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 以降については、実際に行いたい処理に応じてアレンジしてください。この例では、テキストボックスにだけ色を付けています。
