網路城邦
上一篇 回創作列表 下一篇   字體:
【VBA範例】:MS Word - 將化學式的數字換成下標
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 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=junk200&aid=2878195

 回應文章

ThisIsTheWay
等級:6
留言加入好友
要向你學習 Word VBA
2009/05/06 22:14

程式寫得嚴謹,我向您致敬!
【無★言】雲遊到世界的另一端(junk200) 於 2009-05-06 23:43 回覆:

多謝謬讚.其實我的VBA大都是網上查來的.我知道我想要如何做,然後上網查該如何做.網上資料很多,很容易就查到一大堆資料.知道方法之後,才開始寫程式.

像我另外那兩個程式,由Word控制Excel,或由Excel控制Word,我都是先想要這麼做,然後才查究竟程式該如何寫.查到之後,在人家的程式碼後面加入我自己的碼,就成功了.

只有那個合併欄排序的程式碼是例外,大部份都是我自己寫的.