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

Excel VBA使用Dir函数时出现Runtime Error 1004:文件未找到

解决VBA Dir遍历文件时的Runtime Error 1004问题

我之前也踩过一模一样的坑!你遇到的问题大概率是Dir函数只返回文件名,没有包含完整文件夹路径导致的——虽然错误提示里的文件名是对的,但VBA默认会在当前活动工作簿的路径下去找这个文件,而不是你要遍历的目标文件夹,自然就找不到了。

问题根源

举个例子:你要遍历C:\Reports\下的文件,Dir返回的是Q3_Sales.xlsx,但如果直接用Workbooks.Open(fileName),VBA会去当前打开的Excel文件所在的文件夹找这个文件,而不是C:\Reports\,这就触发了1004错误。

修复方法

把目标文件夹的完整路径和Dir获取的文件名拼接起来,生成完整文件路径再打开:

Sub TraverseFiles()
    Dim targetFolder As String
    Dim fileName As String
    Dim fullFilePath As String
    
    ' 设置目标文件夹,注意末尾一定要加反斜杠!
    targetFolder = "C:\Your\Target\Folder\"
    
    ' 初始化Dir,获取第一个匹配的文件(这里以xlsx为例,可修改扩展名)
    fileName = Dir(targetFolder & "*.xlsx")
    
    Do While fileName <> ""
        ' 拼接完整文件路径
        fullFilePath = targetFolder & fileName
        
        ' 现在用完整路径打开文件就不会报错了
        On Error Resume Next ' 可选:处理文件被锁定等特殊情况
        Workbooks.Open(fullFilePath)
        On Error GoTo 0
        
        ' 这里写你对打开文件的操作逻辑
        ' ...
        
        ' 获取下一个文件
        fileName = Dir()
    Loop
End Sub

额外注意事项

  • 一定要确保targetFolder末尾有反斜杠(\),否则拼接的时候会变成C:\YourTargetFolderQ3_Sales.xlsx这种错误路径
  • 如果目标文件夹路径包含空格,不用额外加引号,拼接完整路径后VBA会自动处理
  • 可以加上错误捕获(比如On Error Resume Next),避免因为文件被锁定、权限不足等其他问题中断遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:49:29