グループもOK! 各個の図形を一括処理する

ExcelシートまたはWord文書内の図形(Shapeオブジェクト)を一括処理するコードです。グループ化されていても内部の図形を一つずつ処理できます。

各個の図形を一括処理するマクロ

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

 

タイトルとURLをコピーしました