Primeiro, quis basear a solução em regex. Escrever tal expressão não é grande coisa, mas Sobrescrito é uma propriedade. Não é possível substituir uma propriedade por outra usando regex. Em vez de RegExp.Replace, é possível usar RegExp.Execute, que localiza todas as ocorrências, mas esse método não salva informações sobre a posição e a duração de cada ocorrência.
Em vez de regex, usei apenas um loop para percorrer todo o texto. No início, o código identifica o que mudar e, no segundo loop, aplica as mudanças. Isso é feito de acordo com a referência msdn „ Pode haver apenas um Objeto de seleção por painel da janela do documento, e apenas um objeto Selection em todo o aplicativo pode estar ativo. ”
Option Explicit
Sub toSuperscript()
Dim al As String
Dim alPosition As Integer
Dim alOcc As String 'Al occurence
Dim strTemp As String
Dim strTemp_len As Integer
Dim counter As Integer
Dim subCounter As Integer
Dim c As New Collection 'start
Dim c1 As New Collection 'length
al = "Al" 'the searched string
ActiveDocument.Select
strTemp = Selection.Text
strTemp_len = Len(strTemp)
'search for Al
For counter = 1 To strTemp_len
alOcc = Mid(strTemp, counter, 2) '2 as Al is characters long
If StrComp(CStr(alOcc), CStr(al), vbBinaryCompare) = 0 Then
subCounter = 0
Do Until IsNumeric(Mid(strTemp, counter + 2, subCounter + 1)) = False
subCounter = subCounter + 1
Loop
c.Add CStr(counter + 2) 'start
c1.Add CStr(subCounter) 'length
End If
Next counter
'Apply superscript
For counter = 1 To c.Count
ActiveDocument.Range(Start:=c.Item(counter) - 1, End:=CInt(c.Item(counter)) + CInt(c1.Item(counter)) - 1).Font.superscript = True
Next counter
Application.Selection.StartOf 'Put the cursor at the beginning of the document (optional)
End Sub