Vba 错误处理只工作一次

Vba 错误处理只工作一次,vba,excel,Vba,Excel,我有一个非常简单的VBA代码,它应该尝试打开一个不存在的文件,将我发送到一个错误处理程序,然后在无限循环中返回到我的代码(有意) 但是,编译器只在第一次捕获错误,然后在第二次执行时中断 我尝试了各种On-Error语句的组合,以便在第二次传递时将其发送回,但似乎没有任何效果。 代码如下: Sub TestError() On Error GoTo errError lblError: On Error GoTo errError 'Code that should rai

我有一个非常简单的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感到放心,或者为循环添加一个额外条件,否则不要测试此选项。

您需要使用以下命令清除错误消息:

Err.Clear
资料来源:

基本上,它仍然认为您正在处理错误,并且没有重置处理机制,因此在您清除错误之前它不会重新触发


(恢复也会清除错误,正如您在上面的参考中所注意到的那样)。

使用
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来转到特定的lineOld sub,但注释可以帮助其他人:这几乎对我有效,但我的错误在循环中重复了错误ad infitum-
Resume Next
修复了问题。Err.clear不起作用,但是用Resume替换GoTo似乎可以清除它在错误处理程序中使用
Err.clear
是不明智的。。。使用
Err.Clear
代替
Resume
将导致意外行为。根据您链接到的文档,“在任何类型的
Resume
语句之后,[在]…会自动调用
Clear
方法。