ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Word > 【VBA範例】:MS Word - 將化學式的數字換成下標

【VBA範例】:MS Word - 將化學式的數字換成下標

作者:绿色风 分类: 时间: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等.

若發現程式有問題,請到留言版留下無法應用的化學式.俾便研究能否改進本程式,以增強其功能.

=====================================

  1. Sub ChemicalSubScripter()
  2. '本程式將化學式中的數字全換成下標
  3. '且將核磁共振符號中的數字換成上標
  4. '本程式唯一不能做的是將CnH2n+2這種通式中的n或2n+2
  5. '換成下標
  6. '
  7. '
  8. '感謝macropod@invalid.invalid提供主要程式碼

  9. Dim rText As Range

  10. '將核磁共振符號中之數字換成上標
  11. Selection.HomeKey wdStory
  12. With Selection.Find
  13.   .ClearFormatting
  14. '尋找0-9的數字[0-9]{1,},前面為空格或段落標記[ ^13]
  15. '其後跟隨大寫字母[A-Z]
  16.   .Text = "[ ^13][0-9]{1,}[A-Z]"
  17.   .MatchWildcards = True
  18.   .Wrap = wdFindStop
  19.   .Forward = True
  20.   Do While .Execute = True
  21.     Set rText = ActiveDocument.Range(Start:=Selection.Start + 1, End:=Selection.End - 1)
  22.     rText.Font.Superscript = True
  23.     Selection.Collapse Direction:=wdCollapseEnd
  24.   Loop
  25. End With

  26. '將化學式中的數字換成下標
  27. Selection.HomeKey wdStory
  28. With Selection.Find
  29.   .ClearFormatting
  30. '尋找0-9的數字[0-9]{1,},前面為任何英文字母或右圓弧括號
  31. '[A-z\)]
  32.   .Text = "[A-z\)][0-9]{1,}"
  33.   .MatchWildcards = True
  34.   .Wrap = wdFindStop
  35.   .Forward = True
  36.   Do While .Execute = True
  37.     Set rText = ActiveDocument.Range(Start:=Selection.Start + 1, End:=Selection.End)
  38.     rText.Font.Subscript = True
  39.     Selection.Collapse Direction:=wdCollapseEnd
  40.   Loop
  41. End With

  42. Set rText = Nothing
  43. End Sub
word.jpg
 
2楼
gouweicao78
谢谢分享。这是正则表达式的应用,应该可以使用查找替换完成。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap