こちらに転載しておきます。
*******************************
Selectionを利用し2ファイル間での処理を行う場合は、
SelectElement4を利用する事で可能です。
例としてPart1とDrawing1を開き、Drawing1にはテーブル(1列2行以上)を
配置し、Drawing1をアクティブにした状態で下記のマクロを実行します。
最初にDrawing1のテーブルを指定。
↓
次にPart1の形状セット.1を指定。
↓
テーブルの
1行目-Partファイルのパーツ番号
2行目-形状セット名
が書き込まれます。
画像上の実行前 下が実行後
'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
こちらの方が、ソースコードのインデントも消えない為見やすいかと思います。