使用VBA宏执行SaveAs后保持原文件打开的方案求助
解决VBA SaveAs后保留原文件打开状态的问题
这里提供两种可行的解决方法,帮你实现保存为XLSX格式后原文件仍保持打开的需求:
方案1:复制工作表到新工作簿保存(推荐)
这种方法直接创建新工作簿,复制原文件的所有内容后保存为XLSX,原文件完全不受影响,始终保持打开状态。
Sub SaveAsXLSXAndKeepOriginalOpen() Dim originalWB As Workbook Dim newWB As Workbook Dim ws As Worksheet ' 记录原工作簿引用 Set originalWB = ThisWorkbook ' 创建新工作簿 Set newWB = Workbooks.Add ' 复制原工作簿所有工作表到新工作簿 For Each ws In originalWB.Worksheets ws.Copy After:=newWB.Sheets(newWB.Sheets.Count) Next ws ' 删除新工作簿默认的空白工作表 Application.DisplayAlerts = False newWB.Sheets(1).Delete Application.DisplayAlerts = True ' 保存新工作簿为XLSX格式,替换为你的目标路径 newWB.SaveAs Filename:="C:\Your\Target\Path\New_File.xlsx", FileFormat:=xlOpenXMLWorkbook ' 可选:关闭新工作簿(不需要保留打开时启用) newWB.Close SaveChanges:=False ' 激活原工作簿,确保操作焦点回到原文件 originalWB.Activate End Sub
方案2:SaveAs后重新打开原文件
如果依赖SaveAs的原有逻辑,可以在保存新文件后重新打开原文件,同时关闭新生成的文件:
Sub SaveAsXLSXAndReopenOriginal() Dim originalPath As String ' 记录原文件的完整路径 originalPath = ThisWorkbook.FullName ' 保存为XLSX格式,此时当前工作簿切换为新文件 ThisWorkbook.SaveAs Filename:="C:\Your\Target\Path\New_File.xlsx", FileFormat:=xlOpenXMLWorkbook ' 关闭新保存的文件 ActiveWorkbook.Close SaveChanges:=False ' 重新打开原文件 Workbooks.Open originalPath End Sub
注意事项
- 方案1更稳妥,不会修改原文件的任何状态,适合需要持续编辑原文件的场景;若原文件包含宏,XLSX格式不支持宏,如需保留宏请将保存格式改为
xlOpenXMLWorkbookMacroEnabled(对应XLSM格式)。 - 方案2需确保原文件路径正确,且原文件未被其他进程锁定,避免打开失败。
- 记得将代码中的目标路径替换为实际的保存路径。
内容的提问来源于stack exchange,提问作者Jonathan Couture
相关产品推荐
相关产品推荐

