C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

SelectElement4 サンプル

こちらに転載しておきます。

*******************************

Selectionを利用し2ファイル間での処理を行う場合は、
SelectElement4を利用する事で可能です。

例としてPart1とDrawing1を開き、Drawing1にはテーブル(1列2行以上)を
配置し、Drawing1をアクティブにした状態で下記のマクロを実行します。

最初にDrawing1のテーブルを指定。
 ↓
次にPart1の形状セット.1を指定。
 ↓
テーブルの
1行目-Partファイルのパーツ番号
2行目-形状セット名
が書き込まれます。

画像上の実行前 下が実行後
f:id:kandennti:20150514122231p:plain

'vba
Sub CATMain()
    '準備
    Dim Drawing As DrawingDocument
    Dim DrawingSelection 'As Selection
    Dim DrawingSheet As DrawingSheet
    
    If TryDrawDoc(CATIA.ActiveDocument, Drawing) Then
        Set DrawingSelection = Drawing.selection
        Set DrawingSheet = Drawing.Sheets.ActiveSheet
    Else
        MsgBox ("DrawingSheetをアクティブにして下さい")
        Exit Sub
    End If
    
    '出力先テーブル選択
    Dim Status As String
    Dim InputObjectType(0) As Variant
    Dim DrawTable As DrawingTable
    
    InputObjectType(0) = "DrawingTable"
    Status = DrawingSelection.SelectElement2(InputObjectType, "出力先テーブルを選択して下さい/ESC-終了", False)
    If Status = "Cancel" Then Exit Sub
    Set DrawTable = DrawingSelection.selection.Item2(1).Value
    
    '対象の形状セット選択
    Dim partDocument 'As PartDocument ' ←型指定すると、ESC時エラーとなる
    Dim HybridBody1 As HybridBody
    
    InputObjectType(0) = "HybridBody"
    Status = DrawingSelection.SelectElement4(InputObjectType, "こちらのテーブルに出力します", _
                                           "対象となる形状セットを選択して下さい", False, partDocument)
    If Status = "Cancel" Then Exit Sub
    Set HybridBody1 = partDocument.selection.Item2(1).Value
    
    'テーブルに書き出し
    With DrawTable
        Call .SetCellString(1, 1, partDocument.name) '選択されたPartのパーツ番号
        Call .SetCellString(2, 1, HybridBody1.name) '選択された形状セット名
    End With
End Sub

'DrawingDocumentのチェック
Private Function TryDrawDoc(ByRef Doc As Document, ByRef ReturnDoc As DrawingDocument) As Boolean
    On Error Resume Next
        Set ReturnDoc = Doc
        If Err.Number = 0 Then
            TryDrawDoc = True
        Else
            TryDrawDoc = False
        End If
    On Error GoTo 0
End Function

こちらの方が、ソースコードのインデントも消えない為見やすいかと思います。