Excel VBA 错误管理

Excel VBA 错误管理

我读此主题在错误处理方面,但当我尝试复制即使是简单的错误管理场景时,它也不会起作用。我尝试从其中一个示例中运行以下修改后的代码:

Sub Example()
    Dim n As Variant

    On Error GoTo nx

    For i = 1 To 10
        n = 1 / 0 'this WILL cause an error.
    label1:
    Next i

Exit Sub

    nx:
    n = 5
    Resume label1

End Sub

代码看起来不错,但是当我实际运行它时,会出现run-time error 11: division by zero一个弹出窗口。

有人能帮助我理解这一点或者给我指明正确的方向吗?

答案1

代码对我来说运行良好,没有出现任何错误。我甚至使用调试器逐行检查了代码,也没有出现任何异常。

作为一个小问题,我发现下面的替代方案更容易理解:

Sub Example()

    Dim n As Variant

    On Error Resume Next

    For i = 1 To 10
        n = 1 / 0 'this WILL cause an error.
        If Err.Number <> 0 Then n = 5
    Next i

    On Error GoTo 0

End Sub

但这只是个人喜好而已。

答案2

我终于明白问题出在哪里了,在阅读此主题。在选项菜单上,我的默认设置是“发生所有错误时中断”,而不是“发生未处理的错误时中断”。修复起来很容易,但我的 excel 仍然遇到另一个问题,即任何 实例都会中断err.[arg]。我得到了Compile error: Expected Function or Variable。有人能帮我吗?

答案3

你的代码会捕获错误,然后继续运行。像这样尝试一下,也许你会更好地看到它发生了什么:

Sub Example()
Dim n As Variant

On Error GoTo nx

For i = 1 To 10
    n = 1 / 0 'this WILL cause an error.
    label1:
        Next i

Debug.print "loop done"

Exit Sub

nx:
    Debug.print "error called", i
    n = 5
    Resume label1

End Sub

相关内容