字體:小 中 大 | |
|
|
2009/04/29 01:05:57瀏覽5616|回應1|推薦5 | |
【參考文獻】 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 |
|
( 興趣嗜好|電腦3C ) |