【问题标题】:VBA MS Word - Insert all mail merge fields into Word doc at onceVBA MS Word - 一次将所有邮件合并字段插入 Word 文档
【发布时间】:2019-12-19 18:41:44
【问题描述】:

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

对于第二种可能性,我发现以下代码允许用户一次将与邮件合并名称匹配的文本转换为邮件合并字段(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

【问题讨论】:

  • «目前 MS Word 只允许一次插入 1 个邮件合并字段» 虽然这是真的,但没有必要在插入之间关闭合并字段对话框。与简单的字段插入宏不同,它允许您乱序插入字段,因此您不必在之后重新排列它们。

标签: vba ms-word mailmerge


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多