在 Word 中使用 VBA 查找和格式化带有上标的序数排名

Using VBA in Word to find and format ordinal ranks with superscript

我在 Microsoft Word 中工作,需要 VBA 查找特定文本并将其格式化为上标。我正在尝试将以下文本格式化为上标,但前提是文本紧跟在数字之后。这是我需要找到的四段文字:

st nd 路 第

这是一个例子:

Bill 在比赛中排名第一,但紧随其后的是第二名 Steve。

将代码应用于此示例后,第一个的 "st" 将被格式化为上标,但第二个的 "nd" 将保持不变。

下面是我正在使用的代码,但我似乎无法让它工作。

Sub ReplaceOrdinals()

ActiveDocument.Range.Select

Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")

With regExp
    .Pattern = "(?<=[0-9])[dhnrst]{2}"
    .Global = True
    Selection.Font.Superscript = wdToggle
End With

End Sub
Private Function SuperscriptAll(ByVal where As Range, ByVal pattern As String, ByVal wildcards As Boolean)
  Dim true_end As Long
  true_end = where.End

  With where.Find
    .ClearFormatting
    .ClearAllFuzzyOptions

    Do While .Execute(pattern, MatchWildcards:=wildcards, Forward:=True, Wrap:=wdFindStop)
      With .Parent
        .MoveStart wdCharacter, 1
        .Font.Superscript = True
        .SetRange .End, true_end
      End With
    Loop
  End With
End Function

Public Sub ReplaceOrdinals()
  SuperscriptAll ActiveDocument.Range, "1st", False
  SuperscriptAll ActiveDocument.Range, "2nd", False
  SuperscriptAll ActiveDocument.Range, "3rd", False
  SuperscriptAll ActiveDocument.Range, "[0-9]th", True
End Sub