[英]Excel macro to Word mail merge is trying to merge ALL rows in the column
[英]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.