CATIA VBA 检查参数是否存在

CATIA VBA check parameter existence

我正在尝试检查某个部分中是否存在特定参数,如果不存在,那么我想跳过一小部分代码。 这是我当前的代码,可以正常工作:

Dim partDoc As PartDocument
Set partDoc = CATIA.ActiveDocument

Dim ParamV As Parameter
Set ParamV = partDoc.Part.Parameters.Item("ParName")
Dostuffwith ParamV

现在我想在执行最后两行代码之前添加一个检查,它会变成这样:

Dim partDoc As PartDocument
Set partDoc = CATIA.ActiveDocument

Dim ParamV As Parameter

If partDoc.Part.Parameters.Item("ParName") Exists 
then
Set ParamV = partDoc.Part.Parameters.Item("ParName")
Dostuffwith ParamV
End If

我尝试使用

On Error goto label1
Set ParamV = partDoc.Part.Parameters.Item("ParName")
Dostuffwith ParamV
label1

但这是不可能的,因为 On Error 需要以 Resume 或 Resume Next 结束。我找不到在 "Dostuffwith ParamV" 之后恢复的方法,它总是会在最先提示错误的代码行处恢复。

我也试过了

If not partDoc.Part.Parameters.Item("ParName") is nothing 
Then
Set ParamV = partDoc.Part.Parameters.Item("ParName")
Dostuffwith ParamV
End If

但这也会报错,因为参数 ParName 不存在。

我不知道还能尝试什么,请帮忙。

您对 On Error Goto <label> 的处理是正确的。但是你会想要重置错误处理程序,这样它就不会在出现另一个错误时跳转到标签。您可以使用:

    On Error GoTo label1
    Set ParamV = partDoc.Part.Parameters.Item("ParName")
    On Error GoTo 0        ' reset the error handler upon success
    Dostuffwith ParamV
    GoTo label 2
label1:
    On Error GoTo 0        ' reset the error handler after an error
label2:

另一种方法是使用 resume 错误处理方法:

    On Error Resume Next
    Set ParamV = partDoc.Part.Parameters.Item("ParName")
    MyErrNumber = Err.Number
    On Error GoTo 0   ' Reset error handling
    If MyErrNumber <> 0 Then GoTo label1
    Dostuffwith ParamV

label1:

您可以使用 On Error Resume Next 子句,然后检查 Err.Number 以查看是否发生任何错误:

On Error Resume Next
Err.Clear 'Clear any previous error messages
Set ParamV = partDoc.Part.Parameters.Item("ParName")
if Err.Number = 0 then
    'TODO Stuff if Parameter Exists
else
    'TODO Stuff if parameter does not Exist
end if

此外,您可以创建一个函数来测试 return 参数。

Public Function ParameterExist(byref ParameterCollection as Parameters, byval ParameterName as string, Byref OutputParameter as Parameter) as Boolean
    On Error Resume Next
    Err.Clear
    Set OutputParameter = ParameterCollection.Item(ParameterName)
    if Err.Number = 0 then
        ParameterExist = True
    else
        ParameterExist = False
    end if
end function

用法:

dim Param as Parameter
If ParameterExist(PartDoc.Part.Parameters, "ParName", Param) then
     'Param will hold the parameter object
end if