【问题标题】:Not able to handle runtime error 9 with on error go to [label]无法处理运行时错误 9 错误转到 [标签]
【发布时间】:2017-06-28 12:47:20
【问题描述】:

我有以下代码。但是错误没有得到处理

Sub Some_sub()

Some code here

On Error GoTo resumeCode
If Workbooks("Some file.xlsm").ReadOnly Then
    GoTo readOnlyError
End If

resumeCode:

On Error GoTo fileNotOpen
Workbooks("Some file.xlsm").Activate

some more code here

Exit Sub

fileNotOpen:
    MsgBox "Error: Claims followup.xlsm is not open." & Chr(10) & Chr(10) & 
"Open the file in read/write"
    Exit Sub

End Sub

当我运行调试模式时,它会显示这一行:Workbooks("Some file.xlsm").Activate 黄色。而不是处理错误并转到标签。

在工具 -> 选项 -> 常规选项卡下的 VBA 中:在未处理的错误时中断处于活动状态。

当我打开文件时,它会按应有的方式运行代码。当它关闭时,它不会处理错误。

我做错了什么?

提前感谢您的帮助

【问题讨论】:

  • 执行此代码时是否打开了文件“some file.xlsm”?您是否在同一个 Sub 中定义了带有 fileNotOpen 标签的行?另外:以黄色显示错误线正是您所指的选项所做的。如果您关闭该选项,您应该转到“fileNotOpen”标签之后黄线失败(再次按 F8)。
  • @RikSportel 选项Break on Unhandled Errors 实际上是使代码跳转到错误处理标签而不中断的选项。无论如何,@OP,除了上面的问题,你在同一个 sub 中还有其他一些On Error 语句吗?
  • 我稍微更新了代码。我还有其他错误转到标签是的,但它们在此错误处理(尝试)之前,并且它们有效。
  • @A.S.H 是的,你是对的,我的错。它会在未处理时破裂(不应该如此),但就像未处理一样(因此我的问题)。
  • @SergeInácio,如果您在该行之前有On Error Resume Next 并且确实发生了错误,那么除非您致电Resume something,否则您的新On Error GoTo fileNotOpen 将无法工作。发布其中一些声明。

标签: excel error-handling vba


【解决方案1】:

就是这样。正如我在 cmets 中所说,当发生错误并且您处理它时,您无法设置新的 On Error 机制,除非您以任何方式显式调用 Resume 关键字。

如果您不想更改例程的流程,实现它的一种可能方法是在新的On Error 语句和Resume 之前添加一个标签。比如这样:

Sub Some_sub()
  ' Some code ...

  On Error GoTo resumeCode
  If Workbooks("Some file.xlsm").ReadOnly Then
    GoTo readOnlyError
  End If

  ' Some more code ...

resumeCode:
  Resume ResumeHere ' <---------------------------------------- Invoke Resume

ResumeHere:               ' <------------------------------------- Add some label

On Error GoTo fileNotOpen
Workbooks("Some file.xlsm").Activate

Exit Sub

fileNotOpen:
   msgBox "Error: Claims followup.xlsm is not open." & Chr(10) & Chr(10) & "Open the file in read/write"
  Exit Sub

End Sub

您应该小心,如果错误状态为空白并且从正常流程到达,关键字Resume 本身会引发错误,在这种情况下,您应该将错误处理部分分开放置,最后您的日常工作并从那里恢复正常流程中的任何标签。这通常是常用的方法。

【讨论】:

  • 哇。太棒了,非常感谢您抽出宝贵的时间:)
猜你喜欢
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多