访问Word邮件合并 - 最后一部分的麻烦

时间:2014-02-10 20:58:45

标签: vba ms-access ms-word mailmerge

我的代码存在某种类型的错误,但我不确定是什么。这个代码不到一个月前就适用于我。

我要做的是:让它为数据库中的每个地址吐出邮件合并信。

我的代码的结果:根据我检查的地址数量,它会为我提供模板的许多精确副本,这些副本填充了数据库的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

1 个答案:

答案 0 :(得分:0)

这里的出发点是将表单字母合并到一个新文档,.Execute将导致单个ActiveDocument包含与数据源中的记录相同数量的表单字母(即nRows)。你的"对于x"然后循环生成该文档的nRows副本。

为什么每个文档只包含数据中的第一个和最后一个记录,这一点并不清楚。但是,如果您的邮件合并主文档包含任何{NEXT}或{NEXTIF}字段,则每个字母可能会消耗来自数据源的多个记录(而#34; For x"循环仍将创建nRows副本它)。

作为初始调试步骤,我会删除For循环并查看mrege产生的内容。如果我仍然感到神秘,我可能会创建一个简单的格式字母"只包含数据源中的字段,而是将其合并。

然而,要做到这一点,你需要使用另一种方法 - 这里有一些其他的问题(最近的一些)讨论了"分裂" mailmerge输出文件,或每个数据源记录生成一个文档。环顾四周。