替换只能使用一次

时间:2018-07-21 15:41:58

标签: vba word-vba

我需要以TeX表示法找到模式并更改其格式。例如,对于这样的文本:

$I_{CC}$, $U_{CC}$, $A_U$ 

替换应该是

enter image description here

以下是执行此操作的脚本:

Sub probe()
'
Dim doc As Document
Dim r As Range
Dim r2 As Range
Set doc = ActiveDocument
Set r = doc.Range
With r.Find
    .ClearFormatting
    .Text = "$?*_?*$"
    .MatchWildcards = True
    .Execute
    While .Found
        Debug.Print r.Text
        t = r.Text
        und = InStr(1, t, "_")
        Set r2 = r
        t = r2.Text
        t = Replace(t, "_", "")
        t = Replace(t, "{", "")
        t = Replace(t, "}", "")
        t = Replace(t, "$", "")
        r2.Text = t
        r2.MoveStart wdCharacter, und - 2
        r2.Font.Subscript = True
        .Execute
    Wend
End With
End Sub

它有效,但仅替换第一个找到的文本。据我了解,发生这种情况是因为命令Set r2 = r不会复制范围,而是将rr2等同起来。如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

单词范围不同于VBA中的所有其他内容-它们是对象的实际“指针”。因此,如果将一个范围设置为等于另一个范围,则它们是完全相同的对象。改变一个会改变另一个。

因此,如果需要使用另一个独立的实例,则有必要“复制”一个范围。使用Duplicate方法即可完成:

Set r2 = r.Duplicate