将工作表保存到新工作簿,点击取消时终止宏
解决Excel VBA另存为对话框取消时的保存提示问题
你的问题出在未处理xlDialogSaveAs对话框的返回值:当用户点击「取消」时,Show方法会返回False,但原代码仍会执行wbnew.Close,此时新工作簿已包含复制的工作表(属于已修改状态),关闭时就会触发「是否保存更改」的提示。
要实现点击「取消」直接终止宏且不弹出提示,需要做以下修改:
- 捕获
xlDialogSaveAs的返回结果,判断用户是否取消操作 - 若用户取消,直接关闭新工作簿并指定不保存,然后退出宏
- 修正变量声明的错误(原代码中
wb被默认声明为Variant而非Workbook)
修改后的完整代码:
Sub SU_SaveAsWorksheet() Application.DisplayAlerts = False Call SU_TransferToExcel ' 修正变量声明:明确wb为Workbook类型 Dim wb As Workbook, wbnew As Workbook Dim ws As Worksheet Dim filename As String Dim saveResult As Boolean Set wb = ActiveWorkbook Set ws = wb.Worksheets("CE_Excel") '要复制的工作表名称 filename = Sheet15.Range("K5") & ".xlsx" '新建工作簿 Set wbnew = Workbooks.Add wb.Activate '将工作表复制到新工作簿 wb.Sheets("CE_Excel").Copy Before:=wbnew.Sheets(1) Application.DisplayAlerts = False wbnew.Sheets("Sheet1").Delete Application.DisplayAlerts = True ' 捕获另存为对话框的返回结果 saveResult = Application.Dialogs(xlDialogSaveAs).Show(filename) ' 判断用户是否取消操作 If Not saveResult Then ' 关闭新工作簿且不保存更改 wbnew.Close SaveChanges:=False Application.DisplayAlerts = True ' 退出宏 Exit Sub End If ' 用户点击保存后,正常关闭工作簿(已保存过,无需再提示) wbnew.Close SaveChanges:=False Application.DisplayAlerts = True End Sub
关键修改说明:
- 新增
saveResult变量存储对话框返回值,True表示用户完成保存,False表示取消 - 当
saveResult为False时,调用wbnew.Close SaveChanges:=False直接关闭新工作簿且不保存,避免触发提示 - 修正了
wb的变量声明,确保类型匹配
内容的提问来源于stack exchange,提问作者BrentJohn
相关产品推荐
相关产品推荐

