You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CATIA VBA从选择项获取Part Number时遇“Catastrophic failure”错误求助

解决CATIA VBA从Enovia关联对象获取PartNumber的问题

问题分析

从Enovia5导入的CATIA对象,选择项的类型存在两种差异场景:

  • 直接选中已打开的Part文档(TypeName返回Document,实际为PartDocument)
  • 选中Product结构中的Part实例(属于Product对象,可通过LeafProduct访问属性)
    部分Enovia代理对象会导致访问LeafProduct时抛出“Catastrophic failure”错误,而直接声明Part或PartDocument会出现类型不匹配,根源是Selection的Value类型不固定。

解决方案代码

Dim selItem As Object
Dim partNum As String

Set selItem = CATIA.ActiveDocument.Selection.Item(1).Value

' 分场景处理不同类型的选择对象
Select Case TypeName(selItem)
    Case "PartDocument"
        ' 直接获取Part文档的PartNumber
        partNum = selItem.Part.PartNumber
    Case "Product"
        ' 处理Product结构中的Part实例,增加错误捕获规避Enovia代理对象异常
        On Error Resume Next
        partNum = selItem.LeafProduct.PartNumber
        If Err.Number <> 0 Then
            ' 尝试从关联的ReferenceProduct获取
            If Not selItem.ReferenceProduct Is Nothing Then
                partNum = selItem.ReferenceProduct.PartNumber
            End If
        End If
        On Error GoTo 0
    Case "Document"
        ' 兼容TypeName返回Document但实际为PartDocument的情况
        If TypeOf selItem Is PartDocument Then
            partNum = selItem.Part.PartNumber
        End If
End Select

' 输出结果
If partNum <> "" Then
    MsgBox "Part Number: " & partNum
Else
    MsgBox "无法获取Part Number"
End If

关键要点

  • 用Object类型接收选择对象,避免提前固定类型声明导致的类型不匹配
  • 结合TypeName和TypeOf做类型判断,覆盖直接打开的Part文档、Product结构中的Part实例两种场景
  • 针对Enovia代理对象的异常情况,增加错误捕获机制,同时尝试从ReferenceProduct属性获取PartNumber(部分Enovia关联对象的PartNumber存储在此处)
  • 不要无防护直接访问LeafProduct,否则容易触发“Catastrophic failure”错误中断程序

内容的提问来源于stack exchange,提问作者N.TW12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:39:58