为何Workbooks.Open命令触发运行时错误‘1004’?
问题
遍历目录中的.xlsx工作簿,逐个打开处理时,打开第一个文件就触发运行时错误‘1004’:应用程序定义或对象定义错误。已尝试多种Workbooks.Open写法,断点检查变量值均符合预期。
核心VBA代码如下:
Dim sFiltersFolder As String Dim sFilterFilename As String Dim sFilterFullFilename As String Application.ScreenUpdating = False sFiltersFolder = sBaseFilterSubPath If Right(sFiltersFolder, 1) <> "\" Then sFiltersFolder = sFiltersFolder & "\" sFilterFilename = Dir(sFiltersFolder & "*.*") Do Until sFilterFilename = "" sFilterFullFilename = sFiltersFolder & sFilterFilename Set wbCurrentWorkbook = Workbooks.Open(sFilterFullFilename) Call InputMemberFile(sFilterFilename) Application.DisplayAlerts = False ThisWorkbook.Saved = False ThisWorkbook.Close sFilterFilename = Dir Loop Application.ScreenUpdating = True
补充说明:目标文件应为无宏工作簿(.xlsx),本应从辅助填写数据的.xlsm文件另存为该格式,但实际发现部分提供者仅修改了文件扩展名,未执行正确的另存操作。将这类文件重新正确另存为.xlsx后,错误消失。
问题分析与解决
核心错误原因:
部分文件仅手动修改扩展名从.xlsm改为.xlsx,但文件本质仍是宏工作簿格式。直接用Workbooks.Open打开这种格式不匹配的文件时,Excel会因无法识别实际文件结构而抛出1004错误。必须要求提供者通过Excel的「另存为」功能,选择.xlsx格式完成保存,而非手动修改扩展名。代码中的潜在问题:
循环内执行ThisWorkbook.Close会直接关闭当前运行代码的工作簿,导致后续循环无法继续执行。如果需求是处理完每个文件后关闭目标工作簿,应修改为关闭wbCurrentWorkbook,而非ThisWorkbook:' 替换原代码中的关闭语句 wbCurrentWorkbook.Close SaveChanges:=False ' 根据实际需求决定是否保存更改
内容的提问来源于stack exchange,提问作者WarwickW
相关产品推荐
相关产品推荐

