错误处理只工作一次
Posted
技术标签:
【中文标题】错误处理只工作一次【英文标题】:Error handling only works once 【发布时间】:2016-02-12 22:03:23 【问题描述】:我有一个非常简单的 VBA 代码,它应该尝试打开一个不存在的文件,将我发送到错误处理程序,然后在无限循环中(故意)返回我的代码。
但是,编译器仅在第一次捕获错误,然后在第二次传递时中断。
我已经尝试了 On Error 语句的每种组合,以便在第二次通过时将其发回,但似乎没有任何效果。 代码如下:
Sub TestError()
On Error GoTo errError
lblError:
On Error GoTo errError
'Code that should raise an error and send to errError
Excel.Application.Workbooks.Open ("lakdfjldkj")
Exit Sub
errError:
MsgBox "Code didn't break"
GoTo lblError
End Sub
是我遗漏了什么,还是这是一个错误?
除非你对不得不杀死 Excel 或添加额外的循环条件感到安心,否则不要测试它
【问题讨论】:
【参考方案1】:使用Resume
来...好吧...继续在错误处理程序之后处理。
Sub TestError()
On Error GoTo errError
'Code that should raise an error and send to errError
Excel.Application.Workbooks.Open "lakdfjldkj"
Exit Sub
errError:
MsgBox "Code didn't break"
Resume
End Sub
我已经使用这样的代码访问某个工作表,如果找不到,则错误处理程序会创建一个具有正确名称的工作表,然后继续处理。
【讨论】:
这成功了!我保留了标签,我想我必须使用 Resume 而不是 GoTo 才能转到特定行 旧子但评论帮助他人:这几乎对我有用,但我的错误在循环内并重复了错误 ad infitum -Resume Next
解决了这个问题。
【参考方案2】:
您需要使用以下命令清除错误消息:
Err.Clear
来源:https://msdn.microsoft.com/en-us/library/hh2zczch(v=vs.90).aspx
基本上它仍然认为你正在处理错误,并且没有重置处理机制,所以在你清除它之前它不会重新触发。
(Resume 也会清除错误,正如您可以从上面的参考资料中看到的那样)。
【讨论】:
Err.clear 不起作用,但用 Resume 替换 GoTo 似乎可以清除它 在错误处理程序中使用Err.Clear
是不明智的...使用Err.Clear
代替Resume
会导致意外行为。根据您链接到的文档,“Clear
方法在 [之后] 自动调用...任何类型的 Resume
语句。以上是关于错误处理只工作一次的主要内容,如果未能解决你的问题,请参考以下文章
处理错误“WebDev.WebServer.Exe 已停止工作”
在 nuxt 中出现此错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态