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