Excel VBA调用其他工作簿指定工作表出现编译错误如何解决?
VBA跨工作簿引用工作表报错解决方案
报错核心原因
Workbooks("文件名") 语法只能引用当前Excel进程中已经打开的工作簿,未打开的工作簿哪怕路径正确也会触发编译/运行错误,和宏的存放位置无关,不需要迁移到个人宏工作簿。
可行修复方案
- 方案1:运行宏之前,手动打开draft1.xlsx文件,保持两个工作簿同时处于打开状态,原修改后的代码即可正常运行。
- 方案2:在代码中新增自动打开目标工作簿的逻辑,无需手动提前打开,示例如下:
Sub CreateNewMonth() Dim i As Integer, C As Range Dim wbSource As Workbook Application.ScreenUpdating = False ' 先判断目标工作簿是否已打开,避免重复打开报错 On Error Resume Next Set wbSource = Workbooks("draft1.xlsx") On Error GoTo 0 ' 未打开则从同目录下打开 If wbSource Is Nothing Then ' 取当前活动工作簿所在路径拼接draft1的路径,确保同目录下能找到 Set wbSource = Workbooks.Open(ThisWorkbook.Path & "\draft1.xlsx") End If i = 1 Do While i <> 0 ' 明确指定用draft1里的Base工作表 Set C = wbSource.Worksheets("Base").Range("A1").Offset(0, i) If IsEmpty(C) = False Then ' 原有业务逻辑 . . . End If Loop ' 可选操作:如果后续不需要用到draft1,可以加上关闭逻辑 ' wbSource.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
额外排查点
- 确认目标文件后缀名和代码中写的完全一致:如果draft1是启用宏的工作簿,后缀应为
xlsm,如果是二进制格式是xlsb,旧版本格式是xls,写错后缀也会触发报错。 - 确认目标文件没有被加密锁定、没有被其他进程占用。
内容的提问来源于stack exchange,提问作者zaira
相关产品推荐
相关产品推荐

