Excel VBA通配符匹配打开工作簿后保存副本报错如何解决
错误原因
- 对
Workbooks集合的引用规则理解错误:该集合仅接受**已打开工作簿的文件名(不带路径前缀)**作为索引参数,你传入完整路径+文件名的组合无法匹配到已打开的工作簿对象,会直接触发“下标越界”报错。 - 逻辑分支遗漏:只有匹配到对应名称的文件时才会执行打开操作,未匹配到文件时
MyFileName为空,后续保存、关闭的代码依旧会执行,必然报错。 - 路径不规范:
SaveCopyAs未指定保存路径,默认会保存到VBA当前工作路径,而非源文件所在目录,容易找不到生成的新文件。
修正后代码
Sub GENERATE() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim MyFileName As Variant Dim myFolderPath As String Dim wbTarget As Workbook ' 定义工作簿对象存储打开的文件 myFolderPath = Application.DefaultFilePath MyFileName = Dir(myFolderPath & "\" & "Report Due*.xlsx") ' 匹配到文件才执行后续操作 If MyFileName <> "" Then ' 打开文件同时赋值给对象,后续直接操作对象即可,无需再拼接路径索引 Set wbTarget = Workbooks.Open(myFolderPath & "\" & MyFileName) ' 保存副本到源文件同目录,也可自行修改为指定路径 wbTarget.SaveCopyAs Filename:=myFolderPath & "\NEW NAME.xlsx" wbTarget.Close SaveChanges:=False Set wbTarget = Nothing ' 释放对象 End If Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
修改说明
- 新增工作簿对象变量存储打开的目标文件,避免通过名称索引集合的易错操作
- 将保存、关闭逻辑全部移入文件匹配成功的分支内,避免无文件时执行无效代码
- 保存副本时明确指定保存路径为源文件所在目录,避免文件丢失
内容的提问来源于stack exchange,提问作者TropicalMagic
相关产品推荐
相关产品推荐

