目前,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
答案 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