Excel宏需求:实现另存为后停留在原工作簿
解决Excel宏"另存为"后停留在原工作簿的问题
没问题,我帮你搞定这个需求。你之前的代码只是弹出了"另存为"对话框,要是结合SaveAs使用的话,确实会自动切换到新保存的工作簿。下面给你两种可行的解决方案,按需选择就行:
方法1:直接保存副本(推荐,不打开新文件)
这种方法用SaveCopyAs创建原工作簿的副本,不会打开新文件,执行后直接留在原工作簿里,操作最简洁。缺点是只能保存和原文件相同的格式(比如原文件是宏启用的.xlsm,就不能存为普通.xlsx):
Sub STEP3SaveAs() Dim savePath As Variant ' 弹出另存为对话框,可根据需要调整支持的格式 savePath = Application.GetSaveAsFilename( _ FileFilter:="Excel Macro-Enabled Workbook (*.xlsm), *.xlsm, Excel Workbook (*.xlsx), *.xlsx") ' 判断用户是否取消了对话框 If savePath <> False Then ' 保存原工作簿的副本,全程不会切换工作簿 ThisWorkbook.SaveCopyAs Filename:=savePath MsgBox "副本已成功保存!", vbInformation End If End Sub
方法2:支持选择不同格式保存
如果需要保存为其他格式(比如从.xlsm转成.xlsx),可以用SaveAs,之后关闭新保存的工作簿再切回原文件:
Sub STEP3SaveAsWithFormat() Dim savePath As Variant Dim originalWorkbook As Workbook ' 先把原工作簿的引用存下来,避免后续找不到 Set originalWorkbook = ThisWorkbook ' 弹出支持多格式的另存为对话框 savePath = Application.GetSaveAsFilename( _ FileFilter:="Excel Workbook (*.xlsx), *.xlsx, Excel Macro-Enabled Workbook (*.xlsm), *.xlsm, Excel 97-2003 Workbook (*.xls), *.xls") If savePath <> False Then ' 保存为新文件,此时新文件会成为活动工作簿 originalWorkbook.SaveAs Filename:=savePath ' 关闭新保存的文件(刚保存过,不需要再提示) ActiveWorkbook.Close SaveChanges:=False ' 切回原工作簿 originalWorkbook.Activate MsgBox "副本已成功保存!", vbInformation End If End Sub
小提示
- 如果你原工作簿还没保存过(新建的空白文件),
SaveCopyAs会报错,这种情况建议先用方法2,或者在代码里加个判断提示用户先保存原文件。 - 可以根据自己的需求修改
FileFilter里的格式选项,添加你需要的文件类型。
内容的提问来源于stack exchange,提问作者MrITM
相关产品推荐
相关产品推荐

