是否可以使用 Word 宏将一个邮件合并域替换为另一个域?

Is it possible to use a Word macro to replace one mail merge field with another?

我有插入了合并代码的 Word 邮件合并文档。我想知道我是否可以编写一个 Word 宏来搜索一个邮件合并代码并将其替换为另一个?我试过了,但是我替换的合并代码恢复到原来的值。 我创建了一个 Word 宏并使用 CTRL + H,将数据放入搜索和替换(合并字段)并单击替换。它替换了数据,但在我保存并 return 记录旧的合并代码之后仍然存在。生成以下 vba 代码:

  Selection.Find.ClearFormatting 
  Selection.Find.Replacement.ClearFormatting 
  With Selection.Find 
    .Text = "F_400" 
    .Replacement.Text = "F_901" 
    .Forward = True
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
 End With 
 Selection.Find.Execute

我正在用合并字段 F_901 替换合并字段 F_400。

为了替换 Mergefield 的名称,您需要使用基础字段代码。您通常看到的是 Word 显示的 "pretty view",可以在 "field name" 和功能区中邮件选项卡提供的数据预览之间切换。

为了直接在域代码上使用 Find/Replace,请使用 Alt+F9 切换到域代码视图。然后您应该看到 { MERGEFIELD fieldname }。在此状态下,您可以查找字段名并将其替换为数据源中不同的有效字段名。

为了将域代码显示切换为宏的一部分,以便您可以在 VBA 中使用 Find/Replace,请使用 Window 对象和 View.ShowFieldCodes 属性,例如:

ActiveWindow.View.ShowFieldCodes = True 'False to turn them off

这在使用 Selection.Find 时工作正常。对于 Range.Find 有另一种方法,通过更改用于 Find:

的 Range 对象的 TextRetrievalMode
rngFind.TextRetrievalMode.IncludeFieldCodes
With rngFind
   'and so on

IncludeFieldCodes 属性 选取 "hidden" 字段代码进行代码处理,因此字段代码是否显示在屏幕上并不重要。