こちらにコメント頂いた件のサンプルになるかな?と言った内容です。
VBAでマクロを作成する際の我流な手順2 - C#ATIA
Partファイル内にある形状セット全てをまわり、形状セット内にある形状セットの数を
表示させます。
言葉ではわかりにくいので、こんな感じのPartファイルです。
ソースコードはこちら
'vba Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Call GetHBCount(part1.HybridBodies) End Sub Private Sub GetHBCount(HBodies As HybridBodies) Dim Msg As String Msg = "[ " + HBodies.Name + " ]内には" + vbCrLf _ + "形状セットが" + CStr(HBodies.Count) + "個有ります。" + vbCrLf '0個の場合は、それ以下の階層には行かない If HBodies.Count = 0 Then MsgBox (Msg) Exit Sub End If '1個以上の場合は、ユーザー判断 Msg = Msg + "処理を続けますか?" If MsgBox(Msg, vbYesNo) = vbNo Then End '中止 '下の階層を呼び出し Dim HBody As HybridBody For Each HBody In HBodies Call GetHBCount(HBody.HybridBodies) '再帰呼び出し Next End Sub
Tree構造は再帰だとコードがすっきりします。
今回の場合GetHBCount関数内でGetHBCount関数自身を呼び出します。
'vba Call GetHBCount(HBody.HybridBodies) '再帰呼び出し
実際に実行してみると、1回目(画像左)は「[ HybridBodies ]内には~」
と表示されてしまうのですが、それ以降は形状セット名で表示されます。
直すのが面倒なので、ご勘弁。