VBA宏执行报错Runtime Error 53:文件未找到问题求助
问题分析与解决
错误原因(Runtime Error 53:文件未找到)
- 最后一行
Kill LatestFile中的LatestFile已被处理成无扩展名的文件名,且SaveAs操作未指定保存路径,文件实际保存到了Excel默认位置(而非C:\Downloads\Test),导致Kill命令找不到目标文件。 - 若需求是删除原始
.xls文件,当前代码逻辑也未指向原文件的完整路径。
修正方案
- 保留原文件完整路径:单独存储原始最新文件的完整路径,避免后续变量被覆盖。
- 指定SaveAs的完整路径:确保
.xlsx文件保存到目标文件夹,避免存到Excel默认路径。 - 明确Kill的目标文件:删除原始
.xls就用原完整路径,删除旧.xlsx则指定完整路径+正确扩展名。
修正后的完整代码
Sub TEST() Dim MyPath As String Dim MyFile As String Dim LatestFile As String Dim LatestFilePath As String ' 存储原始文件完整路径 Dim LatestDate As Date Dim LMD As Date Dim NewFileName As String ' 存储新xlsx文件的完整路径 MyPath = "C:\Downloads\Test" If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) If Len(MyFile) = 0 Then MsgBox "未找到任何文件...", vbExclamation Exit Sub End If Do While Len(MyFile) > 0 LMD = FileDateTime(MyPath & MyFile) If LMD > LatestDate Then LatestFile = MyFile LatestFilePath = MyPath & MyFile ' 保存原始文件完整路径 LatestDate = LMD End If MyFile = Dir Loop Workbooks.Open LatestFilePath ' 生成新xlsx文件的完整路径 NewFileName = MyPath & Left(LatestFile, InStrRev(LatestFile, ".") - 1) & ".xlsx" ' 若旧xlsx文件已存在,先删除(可选逻辑) If Dir(NewFileName) <> "" Then Kill NewFileName ActiveWorkbook.SaveAs Filename:=NewFileName, FileFormat:=51 ActiveWorkbook.Close ' 如需删除原始xls文件,取消下面一行的注释 ' Kill LatestFilePath End Sub
关键修正点说明
- 新增
LatestFilePath变量,专门存储原始.xls文件的完整路径,后续删除原文件可直接调用。 - 新增
NewFileName变量,明确指定.xlsx文件的保存路径和文件名,确保文件存到目标文件夹。 - 可选添加了删除旧
.xlsx文件的逻辑,避免SaveAs时因文件已存在报错。 - 注释掉原错误的Kill命令,改为按需启用删除原始文件的代码,避免误操作。
内容的提问来源于stack exchange,提问作者Harati
相关产品推荐
相关产品推荐

