作者:绿色风
分类:
时间:2022-08-18
浏览:132
楼主 allall |
【參考文獻】 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
word.jpg |
2楼 gouweicao78 |
谢谢分享。这是正则表达式的应用,应该可以使用查找替换完成。 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一