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
相关产品推荐
相关产品推荐

