VBA之前和的MSWord标和下标后插入

问题描述 投票:1回答:2

我想创建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这之前和之后的完整标/下标字/字母插入标签。

C12H22O11和X23 + Y397 + X67

上述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>

请指导,如何可以做到这一点。

vba ms-word subscript superscript
2个回答
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

这不是明显的,为什么你会通过所有storyranges进行循环,因为这样的内容通常会只在文档主体。这就是说,它是很容易修改代码与所有storyranges工作。


0
投票

我会受到诱惑去获得最终结果最简单的办法 - 在最后,简单地做一个空字符串</sub><sub>一个替代</sup><sup>""的。

但后来,我偷懒这样...

编辑 - 只是一个想法:那岂不是更快地做这件事有更换?你就不必检查每一个字符。这是什么字呢记录的更换,就需要有点抛光:

    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

因此,在最后,你可以运行搜索和替换4次:

  • 更换标
  • 删除标关闭和开启标签
  • 更换标
  • 删除标关闭和开启标签
© www.soinside.com 2019 - 2024. All rights reserved.