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

时间:2016-02-02 16:18:58

标签: vba ms-word word-vba mailmerge

我有插入合并代码的Word Mail Merge文档。我想知道我是否可以编写Word宏来搜索一个邮件合并代码并将其替换为另一个?我试过,但我替换的合并代码恢复到原始值。 我创建一个Word宏并使用CTRL + H,将数据放入搜索并替换(合并字段)并单击替换。它取代了数据,但在我保存并返回文档后,旧的合并代码仍然存在。生成以下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。

1 个答案:

答案 0 :(得分:1)

要替换Mergefield的名称,您需要使用基础字段代码。您通常看到的是Word提供的“漂亮视图”,可以在“字段名称”和功能区中“邮件”选项卡提供的数据预览之间切换。

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

为了将字段代码显示为宏的一部分以便您可以在VBA中使用“查找/替换”,请使用具有View.ShowFieldCodes属性的Window对象,例如:

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属性为代码处理选取“隐藏”字段代码,因此字段代码是否显示在屏幕上无关紧要。