2016-11-11 51 views
0

VbScript類型的新手,並試圖實現錯誤處理。我的方法是將錯誤對象傳遞給HandleErr子,但錯誤顯然被「On Error Resume Next」語句和子對象清除。使用Windows 7.VbScript錯誤對象通過On Error Statement清除

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

使用'對錯誤轉到0'來禁用'On Error Resume Next'和'Err.Clear()'來清除當前錯誤。 – Lankymart

回答

2

一旦您到達HandleErr(),您想要停止跳過錯誤On Error Resume Next。也可用Err.Clear()重置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 

個人,雖然我不會通過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是否真的是全局的,但是我的Sub在開始時有一個On Error Resume Next語句。這似乎清除了錯誤。現在我看到了(沒有'On Error')你可以從子文件中訪問'Err'。 – JBStovers