用匹配的邮件合并字段替换前缀文本

Replace prefaced text with matching Mail Merge Field

我正在尝试进行一系列报告迁移,并且正在寻找一种方法使其更容易一些。我会将许多字段从 Crystal ({command.somename}) 复制到 Word。我想做的是将 Command.somename 替换为 Mergefield somename,其中名称是动态变量。我是 VBA 的新手,我读过与 类似的文章,但我不确定要更改什么才能使该词搜索在“Command.[ 之后是动态的。" 示例将 command.srent 更改为 mergefield { mergefield srent } (<>)。

如有任何帮助,我们将不胜感激。我刚开始做这个所以还没有真正做很多研究

如有任何帮助,我们将不胜感激。我刚开始研究这个,所以老实说还没有做很多研究。

例如:

Sub Demo()
Application.ScreenUpdating = False
Dim StrFld As String
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "\{*\}"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
  End With
  Do While .Find.Execute
    StrFld = "MERGEFIELD " & Replace(Replace(.Text, "{command.", ""), "}", "")
    .Text = vbNullString
    .Fields.Add Range:=.Duplicate, Type:=wdFieldEmpty, Text:=StrFld, Preserveformatting:=False
    .Collapse wdCollapseEnd
  Loop
End With
Application.ScreenUpdating = True
End Sub

我使用 .Words.Parent 解决了这个问题。建议代码的问题在于它返回搜索 .Text 而不是搜索文本中找到的词。然后使用变量 i 遍历每个实例,我能够在找到的范围内隔离每个找到的单词,并将该单词替换为 {mergefield }。在 Word 中快速完成 F9 后,它更新了所有新的合并域。感谢@macropod 的帮助和指导非常有帮助

Sub ReplaceCommandtoMergefield()
Application.ScreenUpdating = False
Dim StrFld As String
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "Command\."
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
  End With
  Do While .Find.Execute
   'MsgBox .Words.Parent
    StrFld = Replace(.Words.Parent, "Command.", "")
    .Words.Parent.Delete
    .Fields.Add Range:=.Duplicate, Type:=wdFieldMergeField, Text:=StrFld, Preserveformatting:=True
    .Text = vbNullString
    .Collapse wdCollapseEnd
  Loop
End With
    Application.ScreenUpdating = True
End Sub