Excel宏使用Dir函数时出现Run-time error '1004'找不到文件的问题求助
解决Excel宏Run-time error '1004' 文件找不到问题
问题描述
运行宏时触发错误:
Run-time error '1004':sorry, we couldn't find filename Is it possible it was moved, renamed or deleted?
但文件实际存在、路径正确,且之前宏运行完全正常。
业务流程:
- 目标文件路径:
C:\Users\folder\ - 打开命名格式为
A-99-123的Excel文件 - 在
L66单元格输入22-Apr-2025格式的日期 - 将文件另存为PDF到
C:\Users\folder\dated\123\,最终PDF路径为C:\Users\folder\dated\123\A-99-123.pdf - 目标文件夹属于OneDrive(示例路径已做修改)
宏代码
Sub Dates() Dim sDate, sFile, sMerge As String Dim wb As Workbook sDate = Format(Date, "dd-mmm-yyyy") sFile = Dir("C:\Users\folder\*.xlsx") sMerge = ("C:\Users\folder\dated\") Do While Len(sFile) > 0 Set wb = Workbooks.Open(sFile) wb.Worksheets("Dat").Range("L66").Value = sDate wb.Save wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sMerge & Mid(sFile, 6, 8) & "\" & Left(sFile, 8) & " app.pdf" wb.Close sFile = Dir Loop End Sub
错误触发场景
最初运行宏时未包含PDF导出代码,所有文件能正常打开并保存日期。添加PDF导出代码后,每次运行宏都会触发错误:
Run-time error '1004':
sorry, we couldn't find A-99-123. Is it possible it was moved, renamed or deleted?
调试指向代码行:Set wb = Workbooks.Open(sFile)
已尝试的排查步骤
- 添加新文件
A-99-122,错误提示变为找不到该文件 - 确认OneDrive同步正常,网页端和文件资源管理器均可打开文件
- 注释掉PDF导出代码行
- 重新粘贴并确认路径
C:\Users\folder无拼写错误 - 移除
*.xlsx通配符 - 关机重启电脑
- 关机过夜后问题依旧
解决方案
问题核心是Dir函数仅返回文件名而非完整路径,当宏运行时当前工作目录发生变化,导致Workbooks.Open(sFile)找不到文件;同时PDF导出的路径字符串处理逻辑不可靠,且未检查目标文件夹是否存在。
修改后的宏代码:
Sub Dates() Dim sDate As String, sFile As String, sMerge As String Dim wb As Workbook Dim sourcePath As String Dim pdfFolder As String Dim fileBaseName As String sDate = Format(Date, "dd-mmm-yyyy") sourcePath = "C:\Users\folder\" sMerge = sourcePath & "dated\" ' 获取目标文件夹下的xlsx文件 sFile = Dir(sourcePath & "*.xlsx") Do While Len(sFile) > 0 ' 使用完整路径打开文件,避免当前目录变化导致找不到文件 Set wb = Workbooks.Open(sourcePath & sFile) ' 写入日期并保存 wb.Worksheets("Dat").Range("L66").Value = sDate wb.Save ' 提取文件名(不含后缀)和编号 fileBaseName = Left(sFile, InStrRev(sFile, ".") - 1) pdfFolder = sMerge & Split(fileBaseName, "-")(2) & "\" ' 检查PDF保存文件夹是否存在,不存在则创建 If Dir(pdfFolder, vbDirectory) = "" Then MkDir pdfFolder End If ' 导出PDF到指定路径 wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFolder & fileBaseName & ".pdf" wb.Close SaveChanges:=False sFile = Dir Loop End Sub
修改要点说明
- 使用完整路径打开文件:
Workbooks.Open(sourcePath & sFile),彻底避免当前工作目录变化导致的文件查找失败 - 可靠提取文件编号:通过
Split(fileBaseName, "-")(2)从文件名中拆分出编号,比固定位置的Mid函数更适配命名格式 - 自动创建PDF文件夹:提前检查并创建目标文件夹,避免因文件夹缺失导致的导出错误
- 明确变量类型:原代码中
sDate、sFile未声明类型,默认是Variant,改为明确的String类型,避免潜在问题 - 关闭文件时指定参数:
wb.Close SaveChanges:=False,避免不必要的保存提示
内容的提问来源于stack exchange,提问作者SFilbert
相关产品推荐
相关产品推荐

