On Error 陳述式

d

啟用或停用錯誤處理。

語法

On Error Resume Next

On Error GoTo 0

備註

如果您未在程式碼中的任何位置使用 On Error Resume Next 陳述式,任何發生的執行時期錯誤都可能會導致顯示錯誤訊息並停止程式碼執行。不過,執行程式碼的主機會決定確切的行為。主機有時會選擇以不同的方式處理這類錯誤。在某些情況下,可能會在錯誤發生時呼叫指令碼偵錯程式。還有其他情況是可能完全沒有明顯的錯誤發生跡象,因為主機並不打算通知使用者。同樣地,這完全取決於主機如何處理所發生的錯誤。

在任何程序中,如果在呼叫堆疊的某個位置啟用錯誤處理,則錯誤不一定是嚴重錯誤。如果程序中未啟用區域錯誤處理且發生錯誤,會透過呼叫堆疊傳回控制項,直到找到已啟用錯誤處理的程序並在該處處理錯誤為止。如果在呼叫堆疊中沒有任何程序啟用了錯誤處理,則會在該處顯示錯誤訊息並停止執行,或者由主機視情況處理錯誤。

On Error Resume Next 會從以下陳述式繼續執行:緊接著導致執行時期錯誤的陳述式之後的陳述式,或者緊接著其中包含 On Error Resume Next 陳述式的最近程序呼叫的陳述式。這可讓程式碼即使在發生執行時期錯誤時,也能繼續執行。接著,您可以在程序中建置內嵌的錯誤處理常式。

On Error Resume Next 陳述式會在呼叫另一個程序時變為非作用中,因此如果您想在每個被呼叫的常式內進行內嵌錯誤處理,就應在該常式內執行 On Error Resume Next 陳述式。當程序結束時,錯誤處理功能會回復至進入該程序之前所設定的錯誤處理方式。

如果您先前已使用 On Error Resume Next 啟用錯誤處理,請使用 On Error GoTo 0 來停用它。

下列範例說明 On Error Resume Next 陳述式的用法。

On Error Resume Next  ' Ignore errors and continue execution
' Attempt to divide by zero (this will cause an error)
Dim result
result = 10 / 0
err1 = Err.Number
' Check if an error occurred
If  err1 <> 0 Then
    Err.Clear  ' Clear the error
End If
' Script continues after error handling.

說明:

  • 這行 result = 10 / 0 會導致除以零錯誤。

  • 由於 On Error Resume Next 為作用中,因此指令碼不會停止。我們可以使用 Err.Number 來檢查錯誤。

  • 然後在處理錯誤之後,使用 Err.Clear 清除該錯誤。

重要注意事項:

  • Err.Number:如果發生錯誤,此特性會保留錯誤代碼。如果未發生錯誤,則為 0。

  • Err.Description:提供上次發生錯誤的描述。

  • Err.Clear:在處理錯誤資訊之後清除該資訊,避免後續發生的錯誤影響指令碼。

範例 1:

On Error Resume Next  ' Ignore errors and continue execution
' Attempt to divide by zero (this will cause an error)
Dim result
result = 10 / 0
err1 = Err.Number

On Error GoTo 0  ' Default error handling is restored
' Now, any error that occurs will stop the script

result = 10 / 0 'Error will be thrown