ExcelシートまたはWord文書内の図形(Shapeオブジェクト)を一括処理するコードです。グループ化されていても内部の図形を一つずつ処理できます。
各個の図形を一括処理するマクロ
このコードは、ActiveSheet
/ActiveDocument
の箇所を切り替えるだけでExcelとWordどちらでも使えます。
Sub 各個図形の処理()
f_EachShape ActiveSheet.Shapes 'Excel用
' f_EachShape ActiveDocument.Shapes 'Word用
End Sub
'各図形を処理するサブルーチン
Private Sub f_EachShape(ITMS As Object)
Dim oShp As Shape
For Each oShp In ITMS
Select Case oShp.Type
Case msoGroup
f_EachShape oShp.GroupItems
'以下は目的に応じてアレンジ
Case msoTextBox
oShp.Fill.ForeColor.RGB = RGB(255, 0, 0)
End Select
Next oShp
Set oShp = Nothing
End Sub
解説
グループ内図形は再起処理
グループ内の図形に対しては再帰処理を用います。これにより重ね掛けされているグループにも対応できます。再帰処理については以下のトピックを参照してください。
サブルーチンに渡すオブジェクト
サブルーチンの引数(ITMS
)にはオブジェクトの種類を特定しないで、As Object
としています。本体Sub
からの呼び出し時はShapes
オブジェクト、再帰呼び出し時はGroupShapes
オブジェクトが渡されます。どちらもShape
オブジェクトのコレクションです。
oShp.Type でオブジェクトの種別判定
グループ化されたオブジェクト(msoGroup
)の判定は必須です。再帰呼び出しでグループ内のオブジェクトを処理します。
Case msoTextBox
以降については、実際に行いたい処理に応じてアレンジしてください。この例では、テキストボックスにだけ色を付けています。