VBA添加On Error Resume Next仍报“Subscript out of range”错误原因查询
VBA
On Error Resume Next 未捕获错误问题原因及解决方案 核心原因
你遇到的错误捕获失效问题,90%以上是VBA编辑器的默认错误捕获配置导致的,和你的代码逻辑无关:
- 打开VBA编辑器(快捷键
Alt+F11),依次点击顶部菜单「工具」→「选项」→切换到「通用」标签 - 找到「错误捕获」板块,如果当前选中的是**「发生错误时中断」**,那么所有代码错误都会直接触发弹窗,无视你写的
On Error系列错误处理语句 - 把选项修改为**「遇到未处理的错误时中断」**,你的代码就能正常运行了
代码优化版本
你原有的逻辑是完全正确的,仅补充了文件存在性判断,避免目标文件不存在时打开报错:
Sub TestBook() Dim strBookName As String, filepath As String, TestBook As Workbook, usr As String usr = Environ("username") filepath = "C:\Users\" & usr & "\Desktop\book1.xlsx" strBookName = "book1.xlsx" On Error Resume Next ' 仅捕获查找已打开工作簿的错误 Set TestBook = Workbooks(strBookName) On Error GoTo 0 ' 及时恢复错误捕获,避免后续异常被忽略 If TestBook Is Nothing Then If Dir(filepath) <> "" Then Set TestBook = Workbooks.Open(FileName:=filepath) Else MsgBox "目标文件不存在于桌面:" & strBookName, vbCritical End If Else MsgBox strBookName & " is open", vbOKOnly + vbInformation End If End Sub
其他少见原因排查
如果修改配置后问题仍然存在,可以排查以下场景:
- 你的VBA工程中存在类模块,且错误捕获配置为「在类模块中中断」,修改为通用的「遇到未处理的错误时中断」即可
- 代码被放在了工作表模块、ThisWorkbook模块等类模块中,部分Excel版本对类模块内的错误捕获处理有差异,把代码移动到标准模块(插入→模块)即可
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

