从 Excel 文件中打开 OLEObject word 文档时如何防止出现 "mail merge" 警告

How to prevent "mail merge" warning to appear when opening an OLEObject word document from inside an Excel File

我创建了一个包含两个单词字母的 excel 工作簿,并创建了一个 VBA 脚本,该脚本使用工作簿本身内部的数据自动邮件合并所述字母。

然而,当我使用“OLEObject.Activate”打开字母时,我遇到了两个问题:

  1. 文档系统地显示“邮件合并”警告
  2. 所述警告系统地置​​于后台,迫使您执行“Alt+Tab”才能找到它。

我试过两种打开文档的方法:

Dim WDApp As Word.Application
Dim WDDoc As Word.Document

WDObject.Activate

Set WDApp = GetObject(, "Word.Application")
WDAPP.Visible = True
WDApp.DisplayAlerts = wdAlertsNone
Set WDDoc = WDApp.ActiveDocument

和:

Dim WDApp,WDOpen As Word.Application
Dim WDDoc As Word.Document

'for some reason if I try to create the application directly with WDApp it then won't be able to recognize the active document so I have to open word using a proxy
Set WDOpen = CreateObject("Word.Application")
WDOpen.Visible = True
WDOpen.DisplayAlerts = wdAlertsNone

Set WDApp = GetObject(, "Word.Application")

WDObject.Activate

Set WDDoc = WDApp.ActiveDocument

简单的答案是不要在您的工作簿中嵌入邮件合并主文档。在嵌入它们之前将它们作为普通文档保存在 Excel 之外。这也意味着您的 VBA 代码需要包含相关的 SQL 查询代码。

所以我遵循了 macropod 的建议,这里是最终结果:

Private Sub Publipost(WDObject As OLEObject, filter As String)
    Dim WDApp As Word.Application
    Dim WDDoc As Word.Document
    Dim excelFileName, connection As String
            
    excelFileName = Application.ThisWorkbook.Path & "\" & Application.ThisWorkbook.Name
    connection = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=""" & excelFileName & """;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine T"
          
    WDObject.Activate        
    Set WDApp = GetObject(, "Word.Application")    
    Set WDDoc = WDApp.ActiveDocument

    With WDDoc.MailMerge
        .OpenDataSource Name:=excelFileName, _
         ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
         AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
         WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
         Format:=wdOpenFormatAuto, connection:=connection, _
         SQLStatement:="SELECT * FROM `Publipostage$`  where TYPEETAB = '" & filter & "' ", _
         SubType:=wdMergeSubTypeAccess
        .Destination = wdSendToNewDocument
        .Execute
     End With

     WDDoc.Close SaveChanges:=wdDoNotSaveChanges
End Sub

它并不完美,因为如果最终用户在启用邮件合并的情况下保存模型时出错,问题会再次出现,但至少只要您不接触模型,它就会起作用。