CATIA VBA检查参数是否存在

CATIA VBA检查参数是否存在,vba,catia,Vba,Catia,我试图检查一个部件中是否存在特定的参数,如果它不存在,那么我想跳过代码的一小部分。 这是我当前的代码,可以按需要工作: Dim partDoc As PartDocument Set partDoc = CATIA.ActiveDocument Dim ParamV As Parameter Set ParamV = partDoc.Part.Parameters.Item("ParName") Dostuffwith ParamV 现在,我想在执行最后2行代码之前添加一个检查,它将变成这样

我试图检查一个部件中是否存在特定的参数,如果它不存在,那么我想跳过代码的一小部分。 这是我当前的代码,可以按需要工作:

Dim partDoc As PartDocument
Set partDoc = CATIA.ActiveDocument

Dim ParamV As Parameter
Set ParamV = partDoc.Part.Parameters.Item("ParName")
Dostuffwith ParamV
现在,我想在执行最后2行代码之前添加一个检查,它将变成这样:

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
但这是不可能的,因为出错时需要以一份简历或下一份简历结束。我找不到一种方法让它在“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 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:
另一种方法是使用错误处理的恢复方法:

    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:
出错时继续下一步
Set ParamV=partDoc.Part.Parameters.Item(“ParName”)
MyErrNumber=错误编号
错误转到0时重置错误处理
如果MyErrNumber为0,则转到label1
多斯塔夫与帕拉莫
标签1:

您在错误转到时使用
的方法是正确的。但是您需要重置错误处理程序,以便它不会在发生另一个错误时跳转到标签。您可以使用:

    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:
另一种方法是使用错误处理的恢复方法:

    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:
出错时继续下一步
Set ParamV=partDoc.Part.Parameters.Item(“ParName”)
MyErrNumber=错误编号
错误转到0时重置错误处理
如果MyErrNumber为0,则转到label1
多斯塔夫与帕拉莫
标签1:

您可以使用
On Error Resume Next
子句,然后检查
errr.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
此外,还可以创建一个函数来测试并返回参数

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 

您可以使用
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
此外,还可以创建一个函数来测试并返回参数

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