如何获取树中所选部件的“实例名称”

How to get "Instance name" of the selected parts in tree

提问人:Nikita Pelevin 提问时间:7/9/2019 最后编辑:Cindy MeisterNikita Pelevin 更新时间:7/9/2019 访问量:3052

问:

我正在编写宏,该宏将从装配中的选定零件中制作 BOM 列表。

我可以获取装配中零件的“零件号”,但无法获得所选零件的“实例名称”。

此处调用“选择”选项卡的代码,然后尝试获取名称。

Set ItemSelection = CATIA.ActiveDocument.Selection   
InputObjectType(0) = "Part"
SelectionStatus = ItemSelection.SelectElement3(InputObjectType, "Choose parts", false, CATMultiSelTriggWhenUserValidatesSelection, true) 
         If SelectionStatus = "Cancel" Then 
            Exit Sub
        End If

        If ItemSelection.Count >= 1000 Then
            MsgBox "You select more then 1000 parts.", vbExclamation, MsgTextBox & "."
            Exit Sub
        End If

        For i = 1 To ItemSelection.Count 
            k = k + 1
            BOMTable(1,k) = ItemSelection.Item(i).PartNumber
            BOMTable(2,k) = ItemSelection.Item(i).Value.Name
            MsgBox BOMTable(1,k)
        Next

我做错了什么?

VBA CATIA卡蒂亚

评论


答:

2赞 C R Johnson 7/9/2019 #1

如果需要实例性,则需要选择“产品”。 所以。。。

InputObjectType(0) = "Product"
...
sInstanceName = ItemSelection.Item(i).Value.Name

当有人选择组件/子组件时会发生什么?没有什么不同,因为子程序集也有实例名称。

但是,如果您只想包含实际的 CATParts,那么您必须在选择后过滤值,例如......

Dim oInstProd as product
set oInstProd = ItemSelection.Item(i).Value
if TypeName(oInstProd.ReferenceProduct.Parent) = "PartDocument" Then
.... do stuff with only parts...
end If

如果使用缓存模式,则 ReferenceProduct 属性会给您带来麻烦(它将引发错误)。但是,如果需要,有一个解决方法。

评论

0赞 Nikita Pelevin 7/10/2019
谢谢!这很好用。关于错误,我在代码中有一个错误处理程序。