使用 Word 的邮件合并时,是否有更快的方法来输入每个邮件合并字段?

Is there a quicker way to enter every mail merge field when using Word's Mail Merge?

有没有一种方法可以将每个字段插入到 Word 邮件合并文档中,而无需为每个字段单击“插入邮件合并”。源数据来自 excel 文档,并且可能有一百个每周更新的字段。

编辑。 示例 Excel 文档。

Name   1   2   3   4   5   6   7
James  85  54  65      36  21  21
John   54  54  14  25  52  54  22
Hamish 41  21  12  35  22      99

我在 Word 的电子邮件邮件合并中使用此 Excel 文档作为数据源。 我需要以下结果:

Name: James

1:85
2:54
3:65
5:36
6:21
7:21

我不知道如何自动执行插入每个字段名称的过程,我必须单击“插入邮件合并”和 select 相应的字段。这对于可能有数百个字段名称来说很费力。

宏结果

Sub Macro1()
'
' Macro1 Macro
'
'
    Selection.TypeText Text:="Dear "
    ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="Name"
    Selection.TypeText Text:=","
    Selection.TypeParagraph
    ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="M_1"
    Selection.TypeParagraph
    ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="M_2"
    Selection.TypeParagraph
    ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="M_3"
End Sub

我想不出循环遍历每个标题的方法,因为真正的标题不是按顺序命名的。

当您查看录制的宏时,您会看到 ActiveDocument.MailMerge.FieldsFields(复数)表示这是一个 "collection"。在许多编程语言(包括 VBA)中,您可以 "loop" 通过集合 - 这意味着您可以使用组中的每个单独项目。录制宏将为您提供有关如何处理该组的信息。

在邮件合并的情况下,有两组"fields":来自数据源的和已经放在文档中的。您录制的宏给了我们第二个。第一个 - 您需要的 - 的名称是 DataFields.

所以按顺序"to insert each field name",如你所问:

Sub Macro1()
  Dim doc as Word.Document
  Dim dtField as Word.MailMergeDataField
  Dim sFieldName as String

  Set doc = ActiveDocument
  For each dtField in doc.MailMerge.DataSource.DataFields
    sFieldName = dtField.Name
    doc.MailMerge.Fields.Add Range:=Selection.Range, Name:=sFieldName
    Selection.TypeParagraph
  Next
End Sub