一、简单演示和代码展示
二、关键对象/方法的分析
Shape
1. 有三个代表图形的对象:
- Shape 对象,该对象代表文档中的单个图形。
- Shapes 集合,该集合代表文档中的所有图形。
- ShapeRange 集合,该集合代表文档中的图形的指定子集,如果同时处理若干图形,或处理选定的图形,可用 ShapeRange 集合。
2. Shape 的属性和方法很多,这里仅挑几个常见的进行介绍:
- Type,图形类型,可以用常量表示,也可以直接用整数值表示。
- TopLeftCell,左上角所在的单元格。注意,照片旋转会影响结果。
- Top/Left,顶边/左边。注意,照片旋转不影响结果。
- Width/Height,宽度/高度。
- Rotation,旋转角度(单位是度)。
- ScaleHeight/ScaleWidth,按指定的比例调整图形的高度/宽度。 对于图片和 OLE 对象,可以指定是相对于初始大小还是相对于当前大小来调整图形的宽度。默认为相对于图形的原有尺寸来调整宽度。
- LockAspectRatio,调整大小时,是否保持其长宽比例不变。
- Placement,与所在的单元格之间的附属关系,以常量表示,对应三种xlMoveAndSize:大小位置随单元格,xlFreeFloating:大小位置均固定,xlMove:大小固定,位置随单元格。
- CopyPicture,将选定对象作为图片复制到剪贴板。
三、执行思路及过程分析
【1】定义区域
为了方便,我们把三个放图片的区域进行定义,注意,需要用 Set 。
【2】统计在 picrange3 区域的图片数量
只有是行号在 5~8 这个范围的图片,我们都将它们当成要放在 picrange3 区域的图片,用变量 pc3 来保存图片的数量。
我们范例这里,第 5~8 行只有 1 个插入图片的区域,如果存在多个,还需要判断图片所处的列号。这个实现起码并不难,只是代码会比较长,我就不进行具体的举例。
后面还要个变量 pcc,当 picrange3 有多张图片的时候,第 1 张图片的位置跟第 2 张的图片位置是不同的,pcc 就是用来指示当前是第几张图片。
【3】区域固定为一张图片时
Case 1 To 4 对应图片固定为一张的情况,再根据图片的列号 c,去区分图片是属于 picrange1 的还是 picrange2 的(小窗口展示)
【4】不定数量图片的灵活调整
我们看 Case 5 To 8,Left 和 Width 的属性,都是固定的。
Height 的属性,根据图片的数量,公式容易推导出来。
而 Top 的属性,除了需要判断图片的数量,还需要判断这是这个区域的第几张图片,这个公式的推导稍微复杂一些,在纸上画画图,还是可以推导出来的。
四、本期代码文字版
代码将通过另一篇文章来分享给有需要的朋友,敬请关注。