CDR11記念の第1弾は、ドキュメント内(現在のページ)の全てのShapeを検索して輪郭ペンの「イメージに合わせてスケール」属性をオンにするコードです。
全てのオブジェクトを選択していきなりこの属性を設定すると、輪郭がないオブジェクトまで輪郭がヘアラインで設定されてしまうため、輪郭を持つShapeに個別に設定する必要があります。(これこそ自動化の威力が発揮できるところですね。)
そこで、全てのオブジェクトを検索するコードが必要になります。
ShapeはShapeコレクションを持つことができ、グループ化とは対象のShapesをコレクションとするShapeです。ですから、実際の属性設定の対象となるShapeであるかどうか判定し、グループであれば更に下位を探しに行くという(ファイル検索と同じ)再帰呼び出しによる探索です。
mainはその最初の部分で、再帰での検索をShapeSearchが行い、最下位の(Groupでない)Shapeに対して属性を設定するsetpropを呼び出します。
今回はたまたま輪郭のスケール属性のみですが、このsetpropのコードを修正すれば、色々な用途に使えると思います。
Option Explicit Sub Main() Dim s As Shape On Error Resume Next If ActiveDocument Is Nothing Then MsgBox "ドキュメントがありません", vbCritical, "Error" End If For Each s In ActiveDocument.ActivePage.Shapes ShapeSearch s Next s End Sub Sub ShapeSearch(ps As Shape) Dim s As Shape For Each s In ps.Shapes If s.Type = cdrGroupShape Then ShapeSearch s Else setprop s End If Next s End Sub Sub setprop(os As Shape) If os.Outline.Type = cdrOutline Then os.Outline.ScaleWithShape = True End If End Sub