2017-11-28 137 views
1

パーツの特定のパラメータの存在を確認しようとしていますが、存在しない場合は、コードの小さな部分をスキップします。 これは、必要に応じて動作します私の現在のコードです:CATIA VBAチェックパラメータの存在

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 

オンエラーが[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はただ存在しないため、これもエラーが発生します。

私は他に何ができるのか分かりません。助けてください。

答えて

0

あなたはOn Error Resume Next句をUSO、その後、何らかのエラーが発生した場合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 
0

あなたのアプローチは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: 
関連する問題