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.

解释:

  • 行结果 = 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