我需要以TeX表示法找到模式并更改其格式。例如,对于这样的文本:
$I_{CC}$, $U_{CC}$, $A_U$
替换应该是
以下是执行此操作的脚本:
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
不会复制范围,而是将r
和r2
等同起来。如何解决我的问题?
答案 0 :(得分:1)
单词范围不同于VBA中的所有其他内容-它们是对象的实际“指针”。因此,如果将一个范围设置为等于另一个范围,则它们是完全相同的对象。改变一个会改变另一个。
因此,如果需要使用另一个独立的实例,则有必要“复制”一个范围。使用Duplicate
方法即可完成:
Set r2 = r.Duplicate