VBA MS Word - 一次将所有邮件合并字段插入到 Word 文档中

VBA MS Word - Insert all mail merge fields into Word doc at once

目前 MS Word 一次只允许插入 1 个邮件合并字段。我正在寻找一个 VBA 代码,它可以让我一次将所有合并字段插入到 Word 文档中 and/or 一个代码,可以输入一个邮件合并字段,其中出现相同的邮件合并文本的名称在文档中。

对于第二种可能性,我发现了以下代码,它允许用户一次将与邮件合并名称匹配的文本转换为一个邮件合并字段 (http://apsona.com/blog/how-to-quickly-create-merge-fields-in-word/)。我正在处理一个包含数千个邮件合并字段的数据源,因此理想情况下我想一次对所有这些字段执行此操作或创建一个循环或类似的东西。

Sub MakeMergeField()

Selection.Copy
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"MERGEFIELD """ + Selection.Text + """, PreserveFormatting:=True"

End Sub

Word 中没有一次性插入所有合并域的功能,因此您需要循环单独插入它们。

以下是这样做的,用 space.

分隔每个合并字段

(注意:通常,当您在 Word 中插入内容时,目标 Range 包含插入的内容 - 合并字段并非如此。这就是 Range.Start 移至文档末尾的原因每次插入后,在向其添加 space 之前。然后 Range 需要 "collapsed" 超出 space 才能进行下一次插入。)

Sub InsertAllMergeFields()
    Dim doc As word.Document
    Dim rng As word.Range
    Dim mm As word.MailMergeDataField

    Set doc = ActiveDocument
    Set rng = doc.content
    If doc.MailMerge.MainDocumentType <> wdNotAMergeDocument Then
        For Each mm In doc.MailMerge.DataSource.DataFields
            doc.MailMerge.Fields.Add rng, mm.NAME
            rng.Start = doc.content.End
            rng.InsertAfter " "
            rng.Collapse wdCollapseEnd
        Next
    End If
End Sub