【问题标题】:How to prevent "mail merge" warning to appear when opening an OLEObject word document from inside an Excel File从 Excel 文件中打开 OLEObject word 文档时如何防止出现“邮件合并”警告
【发布时间】:2021-08-28 04:33:01
【问题描述】:

我创建了一个包含两个单词字母的 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 ms-word mailmerge


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      所以我遵循了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
      

      这并不完美,因为如果最终用户在打开邮件合并的情况下保存模型时出错,问题会再次出现,但至少只要你不触摸模型就可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        • 2015-07-29
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多