Hi Henry,
You're asking for more than the standard Find/Replace functions allow.
The following macro will search the active document for chemical formulae (represented by numbers preceded by a letter or a right
bracket) and subscript just the numbers. Unless you're working with isotopes, the results should be correct - you'll need to apply
the isotope superscripting yourself (if the numbers are already superscripted, they'll be left alone).
If your document has other alphanumeric strings in which a non-superscripted number follows a letter (eg Table cell references), you'll
need to select only the range(s) containing the text to be converted and answer 'No' to the prompt.
Sub ChemicalFormatter()
Dim oRng As Range, fRng As Range, bState As Boolean
Application.ScreenUpdating = False
Select Case MsgBox("Do you want to process the whole document?", _
vbYesNoCancel + vbQuestion, "Chemical Formatter")
Case vbYes
bState = True
Case vbNo
bState = False
Case vbCancel
End
End Select
With Selection
Set oRng = .Range
With .Find
.ClearFormatting
.Text = "[A-Za-z)][0-9]{1,}"
.MatchWildcards = True
.Wrap = wdFindContinue
.Forward = True
Do While .Execute = True
Set fRng = ActiveDocument.Range(Start:=Selection.Start + 1, End:=Selection.End)
If bState = False Then
If fRng.Start >= oRng.End Then Exit Do
If fRng.End >= oRng.End Then fRng.End = oRng.End
End If
If fRng.Font.Superscript = False Then fRng.Font.Subscript = True
fRng.Collapse Direction:=wdCollapseEnd
Loop
End With
End With
oRng.Select
Set fRng = Nothing
Set oRng = Nothing
Application.ScreenUpdating = True
End Sub