首页 > 解决方案 > 用内容控件对象替换 word 文档中的文本

问题描述

我有许多带有括号内可变词的文档,如下所示: [my_word] 我的代码已经找到了所有这些词,我将它们保存为字符串。

现在我需要一个函数来用 ContentControl 元素替换这个字符串。这可能吗?因为我首先需要生成一个元素,然后改变里面的文字和它的标签,都用[my_word].
任何帮助表示赞赏。

标签: vbams-wordword-contentcontrol

解决方案


到目前为止,我的代码看起来像这样(现在可以一次用一个控制元素替换一个单词;我想替换宏内部的所有内容。Word 告诉我不可能替换多个选择,所以我会必须手动重新运行此宏多次..)

Sub ReplaceTags()
'
' ReplaceTags Macro
'
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "\<?*\>"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute
    Selection.Range.ContentControls.Add (wdContentControlText)
End Sub

编辑:我对我的代码做了一些工作,并找到了一个解决方案来替换我正在寻找的文本:

Sub ReplaceTags()
'
' ReplaceTags Macro
'
'

With Selection.Find
    .ClearFormatting
    .Text = "\<?*\>"
    .Execute Forward:=True
    .MatchWildcards = True
End With

If Selection.Find.Found = True Then
    Selection.Range.ContentControls.Add (wdContentControlText)
    Selection.ParentContentControl.Tag = Selection.Text
End If

End Sub

我仍然不太确定如何在完整文档上执行此操作而不必多次单击“运行宏”

编辑(编辑):我解决了。如果将来有人遇到同样的问题:

Sub ReplaceAllTags()
'
' ReplaceAllTags Macro
'
'
For i = 0 To ActiveDocument.Words.Count
    Selection.EscapeKey
    Application.Run MacroName:="ReplaceTags"
Next
End Sub

ReplaceTags() 与上面的函数相同。


推荐阅读