接下来在代码结尾处恢复会发生什么?

时间:2010-01-03 20:51:26

标签: excel-vba vba excel

有人可以解释一下这段代码的含义吗? 我想如果发生错误请转到ErrHandler部分,但为什么接下来会有一个简历并且中间有一个Exit子?

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和最后一个数字4? 顺便说一下这个例子没有发生错误。

On Error Goto Err:
n = 1
MsgBox n
Err:
n = 2
MsgBox n
Resume Next
MsgBox 4

Resume Next
End Sub 

3 个答案:

答案 0 :(得分:2)

已经说过Resume Next将在错误发生后的那一刻获取执行。还有Resume,它从导致错误的行开始执行执行,Resume从指定标签处获取执行。

所以,这就是你提供的代码中发生的事情:

  1. N = 1/0引起除以零的错误
  2. 执行被移动到ErrHandler标签。
  3. 错误处理代码将一直运行,直到达到Resume Next。
  4. 接下来将继续执行将执行移至N = 1/0之后的行。由于你要回去,你的错误处理代码可能会做这样的N = 1,否则其余的代码会尝试使用未初始化的N,你会得到另一个错误。
  5. 以下链接提供了一个简单的解释oerror处理和三个resume语句:

    http://www.cpearson.com/excel/ErrorHandling.htm

答案 1 :(得分:1)

它在发生错误之后的那个点获取方法体的执行。

答案 2 :(得分:1)

来自 On Error 文档:

  

指定发生运行时错误时,控制转到发生错误的语句后面的语句,并从该点继续执行