【VBA範例】:MS Word - 將化學式的數字換成下標
2009/04/29 01:05
瀏覽5,854
迴響1
推薦5
引用0

1) replace_using_wildcards
2) using wildcards
微軟Word程式的搜尋與取代功能非常強大.若善加利用,可以節省不少時間.
化學式內的數字格式幾乎都是下標.若僅只兩、三個化學式,頂多七、八個數字,以手選取,慢慢一個個改成下標,也就罷了.若有二、三十個化學式,全都要以手將數字一一改成下標,那就累不堪言.此時最好借重程式,輸入時只要鍵入一般數字,然後以程式將數字全改換為下標,既省時,又省力.
化學裡另有些數字要上標.這也可交給程式一併處理.
本程式分兩段.第一段上標,第二段下標.範例如下:
13C -> 13C
[Ni2(ppepO)(C6H5COO)2(CH3COOH)]ClO4‧C4H10O ->
[Ni2(ppepO)(C6H5COO)2(CH3COOH)]ClO4‧C4H10O
不該下標的數字,本程式會略過不動.
Cu(NO3)2.3H2O -> Cu(NO3)2.3H2O
本程式無法處理通式,如CnH2n+2等.
若發現程式有問題,請到留言版留下無法應用的化學式.俾便研究能否改進本程式,以增強其功能.
=====================================
Sub ChemicalSubScripter()
'本程式將化學式中的數字全換成下標
'且將核磁共振符號中的數字換成上標
'本程式唯一不能做的是將CnH2n+2這種通式中的n或2n+2
'換成下標
'
'
'感謝macropod@invalid.invalid提供主要程式碼
Dim rText As Range
'將核磁共振符號中之數字換成上標
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting
'尋找0-9的數字[0-9]{1,},前面為空格或段落標記[ ^13]
'其後跟隨大寫字母[A-Z]
.Text = "[ ^13][0-9]{1,}[A-Z]"
.MatchWildcards = True
.Wrap = wdFindStop
.Forward = True
Do While .Execute = True
Set rText = ActiveDocument.Range(Start:=Selection.Start + 1, End:=Selection.End - 1)
rText.Font.Superscript = True
Selection.Collapse Direction:=wdCollapseEnd
Loop
End With
'將化學式中的數字換成下標
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting
'尋找0-9的數字[0-9]{1,},前面為任何英文字母或右圓弧括號
'[A-z\)]
.Text = "[A-z\)][0-9]{1,}"
.MatchWildcards = True
.Wrap = wdFindStop
.Forward = True
Do While .Execute = True
Set rText = ActiveDocument.Range(Start:=Selection.Start + 1, End:=Selection.End)
rText.Font.Subscript = True
Selection.Collapse Direction:=wdCollapseEnd
Loop
End With
Set rText = Nothing
End Sub
你可能會有興趣的文章:
限會員,要發表迴響,請先登入
迴響(1) :
- 1樓. ThisIsTheWay2009/05/06 22:14要向你學習 Word VBA
程式寫得嚴謹,我向您致敬!
多謝謬讚.其實我的VBA大都是網上查來的.我知道我想要如何做,然後上網查該如何做.網上資料很多,很容易就查到一大堆資料.知道方法之後,才開始寫程式.
像我另外那兩個程式,由Word控制Excel,或由Excel控制Word,我都是先想要這麼做,然後才查究竟程式該如何寫.查到之後,在人家的程式碼後面加入我自己的碼,就成功了.
只有那個合併欄排序的程式碼是例外,大部份都是我自己寫的.
【無★言】雲遊到世界的另一端 於 2009/05/06 23:43回覆













