【发布时间】:2011-01-01 01:28:33
【问题描述】:
谁能解释一下这段代码是什么意思? 我猜如果发生错误,请转到 ErrHandler 部分,但为什么最后会有一个 resume next 和 Exit sub 之间?
On Error Goto ErrHandler:
N = 1 / 0 ' cause an error
'
' more code
'
Exit Sub
ErrHandler:
' error handling code
Resume Next
End Sub
我还写了一个简短的代码来更好地理解。 如果你在 VBA excel 中运行它,你会得到 4 个按顺序弹出的数字:1,2,2,4 我明白前 2 个数字,但为什么第三个数字是 2 而最后一个数字是 4? 顺便说一句,这个例子没有发生错误。
On Error Goto Err:
n = 1
MsgBox n
Err:
n = 2
MsgBox n
Resume Next
MsgBox 4
Resume Next
End Sub
【问题讨论】:
-
当我将 Resume Next 更改为 Resume 时,我得到了 1 ,然后一直只得到 2s ,相当大的变化!
-
您需要在 Err: 之前添加一个 Exit Sub,因为在实际代码中,如果没有错误,您不希望错误处理代码运行。如果你想看看上面的代码发生了什么,你应该设置一个断点并使用 F8 运行代码来单步执行它。这将允许您查看代码执行的顺序。当没有错误时 Resume 和 Resume Next 将代码执行移动到错误处理程序的开头。 Resume 让您陷入无限循环,回到错误处理程序的开头,而 Resume Next 允许您在调用它时绕过它。