You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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后,错误消失。

问题分析与解决

  1. 核心错误原因:
    部分文件仅手动修改扩展名从.xlsm改为.xlsx,但文件本质仍是宏工作簿格式。直接用Workbooks.Open打开这种格式不匹配的文件时,Excel会因无法识别实际文件结构而抛出1004错误。必须要求提供者通过Excel的「另存为」功能,选择.xlsx格式完成保存,而非手动修改扩展名。

  2. 代码中的潜在问题:
    循环内执行ThisWorkbook.Close会直接关闭当前运行代码的工作簿,导致后续循环无法继续执行。如果需求是处理完每个文件后关闭目标工作簿,应修改为关闭wbCurrentWorkbook,而非ThisWorkbook:

    ' 替换原代码中的关闭语句
    wbCurrentWorkbook.Close SaveChanges:=False ' 根据实际需求决定是否保存更改
    

内容的提问来源于stack exchange,提问作者WarwickW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:53:15