Excel VBA调用其他子程序时错误陷阱无故触发的问题
VBA错误陷阱无错误也触发的问题解决
你的问题核心是错误处理逻辑的流程问题:正常执行的代码会直接走到errhandler标签后的代码块,不管有没有错误发生。
看你给出的代码,实际执行顺序是:
- 运行
some code - 即便没有错误,程序会继续向下执行
errhandler:后的MsgBox,所以弹窗必然触发 - 之后执行
Exit Sub,导致后面的Call AnotherRoutine永远不会被运行
正确的写法是在正常代码结束后,用Exit Sub(函数用Exit Function)让程序直接退出,避免进入错误处理块;同时可在错误处理块中添加Resume或Resume Next来控制错误后的执行流程。
修正后的示例代码:
Public Sub Macro1() ' some DIM statements On Error GoTo Errhandler ' some code Call AnotherRoutine ' 必须放在Exit Sub之前,否则无法执行 Exit Sub ' 正常流程到此处退出,不会进入错误处理 Errhandler: MsgBox "Error! Contact developer" ' 可选:若需错误后继续执行,添加以下语句 ' Resume Next End Sub
你之前尝试把errhandler移到Call语句下方没用,是因为原代码中Exit Sub在Call语句之前,Call根本不会被执行,且错误处理块的核心逻辑问题没解决——只要正常流程能走到错误处理代码,弹窗就会触发。
内容的提问来源于stack exchange,提问作者redsky1970
相关产品推荐
相关产品推荐

