繁体   English   中英

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

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

我有插入了合并代码的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_400替换为合并字段F_901。

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

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

为了切换将域代码显示为宏的一部分,以便可以在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属性获取用于代码处理的“隐藏”域代码,因此域代码是否显示在屏幕上都没有关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM