用匹配的邮件合并字段替换前缀文本
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
我正在尝试进行一系列报告迁移,并且正在寻找一种方法使其更容易一些。我会将许多字段从 Crystal ({command.somename}) 复制到 Word。我想做的是将 Command.somename 替换为 Mergefield somename,其中名称是动态变量。我是 VBA 的新手,我读过与
如有任何帮助,我们将不胜感激。我刚开始做这个所以还没有真正做很多研究
如有任何帮助,我们将不胜感激。我刚开始研究这个,所以老实说还没有做很多研究。
例如:
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