在 VBA 中用上标替换正则表达式
Replace regexpr sith superscript in VBA
我想使用 VBA 将所有出现的表达式“\^[0-9]{1,2}”替换为其上标版本。我已经设法替换了一些私人案例,如下面的代码所示。但是我仍然需要一个基于正则表达式的通用形式。
' replace ^1
Dim table As table
For Each table In ActiveDocument.Tables
With table.Range.Find
.ClearFormatting
.Text = "^^1"
With .Replacement
.ClearFormatting
.Font.Superscript = wdToggle
.Text = "1"
End With
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With
Next table
End Sub
问题中的代码有很多问题:
- 在 VBA 中,变量名绝不能与项目引用的任何库中的对象同名。例如,不要为
Table
对象 table
命名对象变量。 VBA 不 区分大小写,因此它会将两个名称解释为相同,这可能会导致问题。
- 需要在代码中开启通配符匹配
- 为通配符搜索定义脱字符
^
的正确方法是将字符加倍:^^
- 在其前面放置反斜杠是无效的。
- 使用“替换”仅应用格式时,无需指定替换文本。
- 如果这应该是上标,则将 属性 设置为
True
,而不是切换。
- 始终 在 运行 VBA 代码时使用
wdFindStop
以避免进入循环。
我的测试代码:
Sub FindAndSuperscript()
Dim tbl As word.Table
For Each tbl In ActiveDocument.Tables
With tbl.Range.Find
.MatchWildcards = True
.ClearFormatting
.Text = "^^[0-9]{1,2}" 'For systems that use a semicolon as list separator: {1;2}
With .Replacement
.ClearFormatting
.Font.Superscript = True
End With
.Execute Replace:=wdReplaceAll, Forward:=True, wrap:=wdFindStop
End With
Next tbl
End Sub
尝试:
Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Word.Table
For Each Tbl In ActiveDocument.Tables
With Tbl.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Superscript = True
.MatchWildcards = True
.Text = "^^([0-9]@>)"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll
End With
Next Tbl
Application.ScreenUpdating = True
End Sub
我想使用 VBA 将所有出现的表达式“\^[0-9]{1,2}”替换为其上标版本。我已经设法替换了一些私人案例,如下面的代码所示。但是我仍然需要一个基于正则表达式的通用形式。
' replace ^1
Dim table As table
For Each table In ActiveDocument.Tables
With table.Range.Find
.ClearFormatting
.Text = "^^1"
With .Replacement
.ClearFormatting
.Font.Superscript = wdToggle
.Text = "1"
End With
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With
Next table
End Sub
问题中的代码有很多问题:
- 在 VBA 中,变量名绝不能与项目引用的任何库中的对象同名。例如,不要为
Table
对象table
命名对象变量。 VBA 不 区分大小写,因此它会将两个名称解释为相同,这可能会导致问题。 - 需要在代码中开启通配符匹配
- 为通配符搜索定义脱字符
^
的正确方法是将字符加倍:^^
- 在其前面放置反斜杠是无效的。 - 使用“替换”仅应用格式时,无需指定替换文本。
- 如果这应该是上标,则将 属性 设置为
True
,而不是切换。 - 始终 在 运行 VBA 代码时使用
wdFindStop
以避免进入循环。
我的测试代码:
Sub FindAndSuperscript()
Dim tbl As word.Table
For Each tbl In ActiveDocument.Tables
With tbl.Range.Find
.MatchWildcards = True
.ClearFormatting
.Text = "^^[0-9]{1,2}" 'For systems that use a semicolon as list separator: {1;2}
With .Replacement
.ClearFormatting
.Font.Superscript = True
End With
.Execute Replace:=wdReplaceAll, Forward:=True, wrap:=wdFindStop
End With
Next tbl
End Sub
尝试:
Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Word.Table
For Each Tbl In ActiveDocument.Tables
With Tbl.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Superscript = True
.MatchWildcards = True
.Text = "^^([0-9]@>)"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll
End With
Next Tbl
Application.ScreenUpdating = True
End Sub