我正在从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
您没有告诉 Word 使用什么查询,或者在使用邮件合并后如何处理您用于邮件合并的文档或邮件合并输出!而且,如果您要打开的文档是 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