一、簡單演示和代碼展示
二、關鍵對象/方法的分析
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 的屬性,除了需要判斷圖片的數量,還需要判斷這是這個區域的第幾張圖片,這個公式的推導稍微複雜一些,在紙上畫畫圖,還是可以推導出來的。
四、本期代碼文字版
代碼將通過另一篇文章來分享給有需要的朋友,敬請關注。