點擊創建後,會打開一個代碼框,裡面有 Word 自動生成的一段代碼,刪掉它,然後把下面的代碼粘貼進去。
Sub Chemical()
Dim Str As String
" 分子式的起始位置
Dim Index As Integer
" 分子式的長度,我用 Str.Length 報錯,只能曲線救國了……我對 VBA 也不是太熟
Dim Length As Integer
" 遍歷選中文本
For Each c In Selection.Characters
Select Case c
Case " "
" 如果遇到空格
If Str &<&> "+" And Str &<&> "→" Then
" 而且不是連接符 + 或者 →
" 調用函數 ChangeFont,改變這一個分子式的上下標
ChangeFont Index:=Index - Length, Length:=Length
End If
" 改完後清空 Str
Str = ""
Length = 0
Case Else
" 如果是其他字元,就認為是分子式,添加到分子式末尾
Str = Str c
Length = Length + 1
End Select
Index = Index + 1
Next c
" 調用函數 ChangeFont,改變這最後一個分子式的上下標
ChangeFont Index:=Index - Length, Length:=Length
End Sub
Sub ChangeFont(ByVal Index As Integer, ByVal Length As Integer)
" 係數模式標記
Dim CoefficientMode As Boolean
" 默認是 True
CoefficientMode = True
" 我用 For i = Index to Index + Lenght - 1 和 Selection.Characters(i) 報錯,所以只好這樣了。
Dim i As Integer
For Each c In Selection.Characters
" 遍歷選中文本
If i &>= Index And i &<= Index + Length - 1 Then
" 如果在該分子式範圍內
If c &>= "0" And c &<= "9" Then
Else
" 且不是數字,則退出係數模式
CoefficientMode = False
End If
" 係數模式外的數字均為上下標
If Not CoefficientMode Then
" 數字設置成下標
If c &>= "0" And c &<= "9" Then
c.Font.Subscript = True
End If
" +- 設置成上標
If c = "+" Or c = "-" Then
c.Font.Superscript = True
End If
End If
End If
i = i + 1
Next c
End Sub