我正在尝试创建要在Supercript和下标之前和之后插入的VBA。我的代码在下面。
Public Sub MySubscriptSuperscript()
Dim myRange As Word.Range, myChr
For Each myRange In ActiveDocument.StoryRanges
Do
For Each myChr In myRange.Characters
If myChr.Font.Superscript = True Then
myChr.Font.Superscript = False
myChr.InsertBefore "<sup>"
myChr.InsertAfter "</sup>"
End If
If myChr.Font.Subscript = True Then
myChr.Font.Subscript = False
myChr.InsertBefore "<sub>"
myChr.InsertAfter "</sub>"
End If
Next
Set myRange = myRange.NextStoryRange
Loop Until myRange Is Nothing
Next
End Sub
此代码对于上标和下标的每个字符都有效。
但是,我正在寻找在完整的上标/下标词/字母之前和之后插入标签的VBA。
示例
C 1 2 H 2 2 O 1 1 和x 2 3 + y 3 9 7 + x 6 7
VBA上方提供以下输出
C<sub>1</sub><sub>2</sub>H<sub>2</sub><sub>2</sub>O<sub>1</sub><sub>1</sub><sub> </sub><sub> </sub> and x<sup>2</sup><sup>3</sup> + y<sup>3</sup><sup>9</sup><sup>7</sup> + x<sup>6</sup><sup>7</sup>
但是我正在寻找这个输出
C<sub>12</sub>H<sub>22</sub>O<sub>11</sub> and x<sup>23</sup> + y<sup>397</sup> + x<sup>67</sup>
请指导,如何实现。
答案 0 :(得分:0)
我会受到诱惑去获得最终结果最简单的办法 - 在最后,简单地做一个替代的</sub><sub>
和</sup><sup>
为空字符串""
。 >
但是,我这种方式很懒...
编辑-只是一个想法: 用replace做整个事情不是更快吗?您不必检查每个字符。这是Word记录下来的替换内容,需要做一些修饰:
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Replacement.Font
.Superscript = False
.Subscript = False
End With
With Selection.Find
.Text = "^?"
.Replacement.Text = "<sup>^&</sup>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
因此,最后,您将运行search&replace 4次:
答案 1 :(得分:0)
尝试:
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Text = ""
.Wrap = wdFindContinue
.Font.Subscript = True
.Replacement.Text = "<sub>^&<\sub>"
.Execute Replace:=wdReplaceAll
.Font.Superscript = True
.Replacement.Text = "<sup>^&<\sup>"
.Execute Replace:=wdReplaceAll
End With
End With
Application.ScreenUpdating = True
End Sub
尚不清楚为什么要遍历所有故事范围,因为此类内容通常只在文档正文中。也就是说,修改代码以使其适用于所有故事情节很容易。