ブック内にあるすべての図形を取得/処理する方法を解説します。
WorkbookオブジェクトにはShapesプロパティがありませんので、
すべてのシートをFor Eachで回し、Worksheet.Shapesで取得します。
サンプルコード
Sub ブック内のすべての図形を処理する() ' すべてのシートをループ Dim シート As Worksheet For Each シート In ThisWorkbook.Worksheets ' シート内のすべての図形をループ Dim シェイプ As Shape For Each シェイプ In シート.Shapes ' 処理する図形の条件(例:名前がTextBoxから始まる) If シェイプ.Name Like "TextBox*" Then ' 各図形への処理(例:シェイプ名を取得) Debug.Print シェイプ.Name End If Next Next End Sub
解説
すべての図形(Shape)を取得/処理するには、
ShapesコレクションをFor Eachステートメントでループします。
ただしこのShapesコレクションを取得するShapesプロパティは、
Workshetオブジェクトにはありますが、Workbookオブジェクトにはありません。
よって、For Eachステートメントですべてのシートをループし、
そのシート内でさらにすべての図形をFor Eachで取得してください。
なお、Shapeには図形(オートシェイプ)の他に、
画像(Picture)やグラフ(ChartObject)も含まれてしまいます。
特定の図形だけをループしたい場合は、
- Shape.Typeで図形の種類を判定
- Shape.Nameで図形の名前を判定
- Shape.Top/Leftで図形の位置を判定
などのプロパティを用いてIf文を書いてください。
また、「グラフが含まれる」というのも注意しなければいけない点なのですが、
それ以上に危ないのが、なんとドロップダウンリストの▼マークもShapeです。
この罠に引っかからないようご注意ください。
詳しくはこちらの記事をどうぞ。
www.limecode.jp