大家好,我們今日繼續講解VBA代碼解決方案的第119講內容:如何遍歷工作表中的圖形。其實這節的內容在我前面的章節中已經講過,今日拿出來,作為一節的專門的內容。
工作表中的多個圖形,有時我們需要根據實際的需要遍歷所有的圖形以達到某種共同的操作,這時需要怎麼做呢?可以使用For Each...Next 語句循環遍歷所有圖形。這時要根據圖形的Type屬性進行相應的操作,不知道大家是否還記得圖形的Type屬性呢,下面的表格中有常見的16種類型,需要的時候可以查;
1 msoShapeTypeMixed-2混合型圖形
2 msoAutoShape1自選圖形
3 msoCallout2沒有邊框線的標註
4 msoChart3圖表
5 msoComment4批註
6 msoFreeform5任意多邊形
7 msoGroup6圖形組合
8 msoFormControl8窗體控件
9 msoLine9線條
10 msoLinkedOLEObject10鏈接式或內嵌OLE對象
11 msoLinkedPicture11剪貼畫或圖片
12 msoOLEControlObject12ActiveX 控件
13 msoPicture13圖片
14 msoTextEffect15藝術字
15 msoTextBox17文本框
16 msoDiagram21組織結構圖或其他圖示。
我們還是以實際的問題進行分析:一個工作表中中有很多的圖形,我們需要把其中的自選圖形部分的文本修正為"VBA代碼解決方案"。如下面截圖所示。
以上除了我茶壺,其餘的都是自選圖形,代碼該怎麼寫呢?如下:
Sub MynzShapes()
Dim myShape As Shape
Dim i As Integer
i = 0
For Each myShape In Sheets("sheet2").Shapes
If myShape.Type = msoAutoShape Then
myShape.TextFrame.Characters.Text = "VBA代碼解決方案"
i = i + 1
End If
Next
MsgBox ("共修改了" & i & "個文本框的文本!")
End Sub
代碼窗口:
代碼解析:MynzShapes過程在工作表中的所有自選圖形中的文本更換。
第5行代碼使用For Each...Next 語句循環遍歷工作表中所有的圖形對象。
第6行到第9行代碼如果圖形對象是自選圖形msoAutoShape則在寫入文本"VBA代碼解決方案"。其中第6行代碼根據Type屬性判斷圖形對象的屬性的,應用於Shape對象的Type屬性返回或設置圖形類型,讀者可以在代碼運行時查看這個屬性值。
第7行代碼根據返回的Type屬性值在寫入相應的文本,
運行後:
今日內容迴向:
1 如何判斷圖形的屬性?
2 如何更改圖形的自選文字?
閱讀更多 VBA專家 的文章