読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

形状セット内にある形状セットの数をカウントする

こちらにコメント頂いた件のサンプルになるかな?と言った内容です。
VBAでマクロを作成する際の我流な手順2 - C#ATIA

Partファイル内にある形状セット全てをまわり、形状セット内にある形状セットの数を
表示させます。
言葉ではわかりにくいので、こんな感じのPartファイルです。
f:id:kandennti:20150729190201p:plain

ソースコードはこちら

'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 ]内には~」
と表示されてしまうのですが、それ以降は形状セット名で表示されます。
f:id:kandennti:20150729191108p:plain
直すのが面倒なので、ご勘弁。