我的代码存在某种类型的错误,但我不确定是什么。这个代码不到一个月前就适用于我。
我要做的是:让它为数据库中的每个地址吐出邮件合并信。
我的代码的结果:根据我检查的地址数量,它会为我提供模板的许多精确副本,这些副本填充了数据库的FIRST和LAST条目。
示例:我检查数据库中的18个地址,并将该变量传递到导出表中。它会扫出18个微软word文件,每个word文件都有一个模板副本,第1页填写第一个地址,第2页填写最后一个地址。
我做错了什么?
Private Sub MailMerge(ClientTemplate As String)
Dim Word As Object
Dim Doc As Object
Dim Sel As Object
Dim nRows As Integer
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Open(ClientTemplate)
Set Sel = Word.Selection
nRows = DCount("*", "tblFinalMailMerge")
With Word
.Visible = True
.Application.Activate
'.Documents.Open (ClientTemplate)
End With
With Doc.MailMerge
.MainDocumentType = wdFormLetters
.Destination = wdSendToNewDocument
.OpenDataSource Name:=CurrentDb.Name, SQLStatement:="SELECT * FROM [tblFinalMailMerge]"
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
For x = 1 To nRows
With Doc.MailMerge.DataSource
.ActiveRecord = x
If ActiveRecord > .LastRecord Then Exit For
End With
Word.ActiveDocument.SaveAs _
FileName:="C:\temp\test" & x & ".docx"
Next x
答案 0 :(得分:0)
这里的出发点是将表单字母合并到一个新文档,.Execute将导致单个ActiveDocument包含与数据源中的记录相同数量的表单字母(即nRows)。你的"对于x"然后循环生成该文档的nRows副本。
为什么每个文档只包含数据中的第一个和最后一个记录,这一点并不清楚。但是,如果您的邮件合并主文档包含任何{NEXT}或{NEXTIF}字段,则每个字母可能会消耗来自数据源的多个记录(而#34; For x"循环仍将创建nRows副本它)。
作为初始调试步骤,我会删除For循环并查看mrege产生的内容。如果我仍然感到神秘,我可能会创建一个简单的格式字母"只包含数据源中的字段,而是将其合并。
然而,要做到这一点,你需要使用另一种方法 - 这里有一些其他的问题(最近的一些)讨论了"分裂" mailmerge输出文件,或每个数据源记录生成一个文档。环顾四周。