2016-11-11 2 views
0

VbScriptを持つ初心者の種類で、エラー処理を実装しようとしています。私の方法は、エラーオブジェクトをHandleErrサブに渡すことですが、エラーは明らかにサブオンと "On Error Resume Next"ステートメントでクリアされます。 Windows 7を使用しています。VbScriptのエラーオブジェクトがエラー時にクリアされるステートメント

On Error Resume Next 
Dim x 
x = 1/0 
msgbox "Original Error: " & err.Number & " - " & err.Description 
if err.number <> 0 then HandleErr err 

Sub HandleErr(objErr) 
    on error resume next '### Without this On Error statement, the script runs fine. 
    msgbox "Error in HandleErr: " & objErr.Number & " - " & objErr.Description '### objErr.Number becomes zero. 
    WScript.Quit objErr.Number 
End Sub 

私はこれに簡単な答えがあると思います。どんな助けでも大歓迎です。

+1

使用 'であるので、私はあなたの関数にErrを通過していないでしょうが個人的に

On Error Resume Next Dim x x = 1/0 MsgBox "Original Error: " & Err.Number & " - " & Err.Description if Err.Number <> 0 then HandleErr Err 'Stop skipping lines when errors occur. On Error Goto 0 Sub HandleErr(objErr) MsgBox "Error in HandleErr: " & objErr.Number & " - " & objErr.Description '### objErr.Number becomes zero. 'Clear current error now you have trapped it. Err.Clear WScript.Quit objErr.Number End Sub 

現在のエラーをトラップした後は、 'On Error Resume Next'と' Err.Clear() 'を無効にして、現在のエラーをクリアします。 – Lankymart

答えて

2

HandleErr()に達すると、On Error Resume Nextでスキップエラーを停止します。またを使用してErrオブジェクトをリセットしてください。 Errは後藤エラー時にグローバル組み込みオブジェクトあなたはまだそれを渡さずに値を確認できるようにします。

On Error Resume Next 
Dim x 
x = 1/0 
MsgBox "Original Error: " & Err.Number & " - " & Err.Description 
Call HandleErr() 
'Stop skipping lines when errors occur. 
On Error Goto 0 

Sub HandleErr() 
    'Do we need to trap an error? 
    If Err.Number <> 0 Then 
     MsgBox "Error in HandleErr: " & Err.Number & " - " & Err.Description '### Err.Number becomes zero. 
     'Clear current error now you have trapped it. 
     Err.Clear 
     WScript.Quit Err.Number 
    End If 
End Sub 
+0

あなたの答えをよろしくお願いします。私は完全にはっきりしていないことがわかります。 'HandleErr'内のMsgboxはデバッグ用です。私はこのスクリプトがエラーコードを返すようにしたいので、必ずしもエラーをクリアする必要はありません。あなたのコードから、エラーハンドラで 'On Error Resume Next'ステートメントが不要であると言っていると思いますか? – JBStovers

+0

また、なぜスクリプト本体の最後の行に 'On Error Goto 0'を置くのでしょうか? – JBStovers

+0

関数に 'Err'を渡さないというあなたの意見を完全に見ています。私は 'Err'が本当にグローバルであるかどうかを調べるためにテストしましたが、私のサブは最初に' On Error Resume Next'ステートメントを持っていました。これはエラーをクリアするようです。今度は、(On Errorがなければ)あなたはサブから 'Err'にアクセスできます。 – JBStovers

関連する問題