VBA MS Word - 立即将所有邮件合并字段插入Word文档

时间:2018-04-25 20:54:25

标签: ms-word word-vba mailmerge

目前,MS Word仅允许一次插入1个邮件合并字段。我正在寻找一个VBA代码,允许我一次将所有合并字段插入Word文档和/或输入邮件合并字段的代码,其中相同邮件合并文本的名称出现在doc中。对于第二种可能性,我找到了以下代码,允许用户将与邮件合并名称匹配的文本一次转换为邮件合并字段(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

1 个答案:

答案 0 :(得分:0)

Word中没有任何功能可以同时插入所有合并字段,因此您需要在循环中单独插入它们。

以下是这样做,用空格分隔每个合并字段。

(注意:通常,当您在Word中插入内容时,目标Range包含插入的内容 - 合并字段不是这样。这就是为什么Range.Start在每个文档之后被移动到文档末尾的原因插入之前,在向其添加空格之前。Range需要在进行下一次插入之前“折叠”到该空间之外。)

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