【问题标题】:What happens does resume next at the end of the code stands for in vba?代码末尾的 resume next 在 vba 中代表什么?
【发布时间】: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 允许您在调用它时绕过它。

标签: excel vba


【解决方案1】:

它会在发生错误的那一刻开始执行方法体。

【讨论】:

    【解决方案2】:

    来自 On Error 文档:

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

    【讨论】:

      【解决方案3】:

      已经说过,Resume Next 将在错误发生后的时间点开始执行。还有 Resume ,它从导致错误的行开始执行,还有 Resume ,它在指定的标签处执行。

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

      1. N = 1 / 0 引发除以零错误
      2. 执行移至 ErrHandler 标签。
      3. 错误处理代码将一直运行到 Resume Next。
      4. Resume next 会将执行移至 N = 1/0 之后的行。由于您要返回,因此您的错误处理代码可能会执行类似 N = 1 的操作,否则其余代码将尝试使用未初始化的 N,您将收到另一个错误。

      以下链接提供了错误处理和三个恢复语句的简单说明:

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

      【讨论】:

      • 嗨 Waleed,如果没有发生错误会发生什么,接下来 resume 会产生什么影响?
      • 如果您查看您提供的第一个 sn-p 代码,则在错误处理程序标签之前有一个“Exit Sub”。如果您没有遇到错误,此行将退出该过程,而不运行其后面的任何代码行,包括 Resume Next 语句。因此,如果没有错误,Resume Next 在这里不会做任何事情。
      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多