执行邮件合并而不显示Word

时间:2018-01-09 16:30:00

标签: excel vba excel-vba excel-2013 word-2013

我正在从Excel执行邮件合并,它完全按照我的需要工作。我的问题是我想要保护用户隐藏文字,而这种情况并没有发生。我最终在屏幕上显示了一个我不想要的空字符实例。

这是我的语法 - 为什么我在进程结束时无法完全隐藏和关闭单词?

    Dim wdapp As Word.Application, wdDoc As Word.Document, wdMaiMerge As Word.MailMerge
'Setting refs
Set wdapp = CreateObject("Word.Application")
Set wdDoc = wdapp.Documents.Open(wdpath)
Set wdMailMerge = wdDoc.MailMerge
'hiding display from user
wdapp.Visible = False
'Setting mail merge
With wdMailMerge
 .OpenDataSourcexxxx, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False
 .Execute
End With
'Finishing
Set wdapp = Nothing
wdapp.Quit

1 个答案:

答案 0 :(得分:0)

您没有告诉Word使用什么查询或者如果您使用过该文档或使用mailmerge输出后使用的文档怎么办!而且,如果您打开的文档是mailmerge主文档,那么您的代码将挂起 - 您需要禁止它并自己提供所有SQL代码。例如:

Sub MailMerge()
'Note: A VBA Reference to the Word Object Model is required, via Tools|References
Dim wdApp As New Word.Application, wdDoc As Word.Document
Dim strWorkbookName As String: strWorkbookName = ThisWorkbook.FullName
With wdApp
  .Visible = False
  'Disable alerts to prevent an SQL prompt
  .DisplayAlerts = wdAlertsNone
  'Open the mailmerge main document
  Set wdDoc = .Documents.Open(Filename:=ThisWorkbook.Path & "\MailMergeMainDocument.docx", _
    ConfirmConversions:=False, ReadOnly:=True, AddToRecentFiles:=False, Visible:=False)
  With wdDoc
    With .MailMerge
      'Define the mailmerge type
      .MainDocumentType = wdFormLetters
      'Define the output
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      'Connect to the data source
      .OpenDataSource Name:=strWorkbookName, ReadOnly:=True, _
        LinkToSource:=False, AddToRecentFiles:=False, Format:=wdOpenFormatAuto, _
        Connection:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;Data Source=strWorkbookName;" & _
        "Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _
        SQLStatement:="SELECT * FROM `Sheet1$`", SubType:=wdMergeSubTypeAccess
      With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
      End With
      'Excecute the merge
      .Execute
      With wdApp.ActiveDocument
        'What do you want to do with the output document??? For example:
        .SaveAs2 Filename:=ThisWorkbook.Path & "\MailMergeOutputDocument.docx", _
          FileFormat:=wdFormatXMLDocument, AddToRecentFiles:=False
        ' and/or:
        .SaveAs Filename:=ThisWorkbook.Path & "\MailMergeOutputDocument.pdf", _
          FileFormat:=wdFormatPDF, AddToRecentFiles:=False
        'Close the output document
        .Close False
      End With
      'Disconnect from the data source
      .MainDocumentType = wdNotAMergeDocument
    End With
    'Close the mailmerge main document
    .Close False
  End With
  'Restore the Word alerts
  .DisplayAlerts = wdAlertsAll
  'Quit Word
  .Quit
End With
End Sub
相关问题