Excel VBA宏需求:未触发MsgBox时需继续执行后续代码
修改后的VBA代码
Sub Relieving_Pdf() Dim Answer As VbMsgBoxResult ' 修正类型:MsgBox返回枚举值而非字符串 Dim StrFolder As String Dim StrFile As String Dim Folder As String Dim StrName As String Dim StrBack1 As String Dim StrBack As String Dim StrName2 As String ' 新增变量声明,避免未定义错误 StrFolder = Range("A69").Value 'path StrFile = Range("B28").Value 'Company Initial Name Folder = "\" & Range("F1").Text 'Month and year folder name StrName = "\" & Range("B2").Value 'Candidate name StrBack1 = Left$(StrFolder, InStrRev(StrFolder, "\") - 1) StrBack = Left$(StrBack1, InStrRev(StrBack1, "\") - 1) Application.Run "REFRESH" ' 仅在E14值为指定内容时弹出确认框,用户选No则退出 If Range("E14").Value = "EID Already Exist" Then Answer = MsgBox("EID Already Exist Do you want to go ON?", vbQuestion + vbYesNo, "User Response") If Answer = vbNo Then Exit Sub End If End If ' 以下为核心执行逻辑,无论E14值是否符合条件,只要未退出就执行 If Len(Dir(StrBack & Folder, vbDirectory)) = 0 Then MkDir StrBack & Folder End If If Len(Dir(StrBack & Folder & StrName, vbDirectory)) = 0 Then MkDir StrBack & Folder & StrName End If ChDir StrFolder Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:= _ StrFolder & "\" & StrFile & " Master Data.xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False Application.DisplayAlerts = True Dim excelpath As String Dim wordApp As Object Set wordApp = CreateObject("Word.Application") excelpath = ThisWorkbook.FullName wordApp.Documents.Open Filename:=StrFolder & "\" & StrFile & " Master File Macro.docm" wordApp.Visible = True ActiveDocument.MailMerge.OpenDataSource Name:= _ excelpath _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & excelpath & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engi" _ , SQLStatement:="SELECT * FROM `Output$`", SQLStatement1:="", SubType:= _ wdMergeSubTypeAccess 'enter sheet name ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = 1 .LastRecord = 1 StrName2 = "\" & .DataFields("offername") StrFolder = StrBack & "\" End With ActiveDocument.ExportAsFixedFormat OutputFileName:= _ StrFolder & Folder & StrName & StrName2 & ".pdf", ExportFormat:= _ wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _ wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=1, To:=4, Item:= _ wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _ CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _ BitmapMissingFonts:=True, UseISO19005_1:=False End With ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges wordApp.Quit Set wordApp = Nothing ' 修正对象释放变量名,原代码写的wdapp ' Application.Quit ' 如果不需要退出Excel,建议注释掉这行,避免误关文件 End Sub
关键修改说明
- 调整逻辑结构:将核心执行代码从原有的嵌套
If块中移出,改为:仅当E14值为"EID Already Exist"且用户选择No时退出宏,其余所有情况(E14值不符、或E14值符合但用户选Yes)都会执行后续流程。 - 修正变量类型:将原
AnswerYes的String类型改为VbMsgBoxResult,匹配MsgBox的返回值类型,避免类型不匹配问题。 - 新增变量声明:补充
StrName2的声明,符合VBA变量声明规范,避免隐式类型错误。 - 修正对象释放:原代码中
Set wdapp = Nothing是笔误,改为Set wordApp = Nothing,确保正确释放Word对象。 - 修复数据源路径:原代码中Connection字符串里的
Data Source=excelpath是硬编码字符串,改为Data Source=" & excelpath & ",正确引用变量值。 - 可选优化:注释掉
Application.Quit,避免宏执行后直接关闭Excel,如需自动关闭可取消注释。
内容的提问来源于stack exchange,提问作者Samy Somy
相关产品推荐
相关产品推荐

