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
目前 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