Excel VBA实现Sheet3同时另存为XLSX副本和PDF并修复主文件异常关闭问题
修复后的VBA代码及说明
实现逻辑
- 仅复制Sheet3生成独立临时工作簿,全程不修改原主文件
- 调用保存对话框选择保存位置及基础文件名,自动生成
.xlsx和.pdf两个文件 - 操作完成后自动关闭临时工作簿,不会弹出新文件窗口,也不会关闭原主文件
完整代码
Sub SaveInvoiceFiles() Dim savePath As String Dim newWb As Workbook ' 关闭屏幕更新和警告,避免操作闪烁和多余弹窗 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 调用保存对话框选择路径和文件名 With Application.FileDialog(msoFileDialogSaveAs) .Title = "选择保存位置并输入发票文件名" .ButtonName = "保存发票" ' 初始路径和默认文件名,如需固定取Sheet3的F9可改为 Sheet3.Range("F9").Value .InitialFileName = "E:\Execl Documents\Business management file\Edit invoice\" & Range("F9").Value .FilterIndex = 2 ' 筛选xlsx格式,避免格式选择错误 If .Show = 0 Then MsgBox "已取消保存操作,文件未生成", vbCritical ' 恢复系统设置后退出 Application.ScreenUpdating = True Application.DisplayAlerts = True Exit Sub End If ' 提取不含后缀的文件路径,用于生成两种格式的文件 savePath = .SelectedItems(1) If InStr(savePath, ".") > 0 Then savePath = Left(savePath, InStrRev(savePath, ".") - 1) End If End With ' 复制Sheet3为独立的新工作簿 Sheet3.Copy Set newWb = ActiveWorkbook ' 保存为xlsx格式副本 newWb.SaveAs Filename:=savePath & ".xlsx", FileFormat:=xlOpenXMLWorkbook ' 导出为PDF格式 newWb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=savePath & ".pdf", Quality:=xlQualityStandard ' 关闭临时工作簿,不需要再次保存 newWb.Close SaveChanges:=False ' 恢复系统默认设置 Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox "保存成功,已生成xlsx和PDF两个文件", vbInformation End Sub
注意事项
- 如果需要固定读取Sheet3的F9单元格作为默认文件名,避免活动工作表切换导致取值错误,可将代码中
Range("F9").Value修改为Sheet3.Range("F9").Value - 如果需要保存带宏的副本,可将
FileFormat:=xlOpenXMLWorkbook修改为FileFormat:=xlOpenXMLWorkbookMacroEnabled,同时将后缀调整为.xlsm即可
内容的提问来源于stack exchange,提问作者Saiful Islam
相关产品推荐
相关产品推荐

