VBA для вставки до и после верхнего и нижнего индексов в MSWord - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь создать VBA для вставки до и после Supercript и subscript.Мой код ниже.

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>

Руководство Pls, как этого можно достичь.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Попробуйте:

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

Непонятно, почему вы просматриваете все сюжеты, так как такой контент обычно находится только в теле документа.Тем не менее, достаточно легко изменить код для работы со всеми сюжетами.

0 голосов
/ 02 февраля 2019

Я бы соблазнился пойти на самый простой способ получить конечный результат - в конце просто сделайте замену </sub><sub> и </sup><sup> пустой строкой "".

Но тогдаМне так лень ...

Правка - просто идея: не быстрее ли будет все это заменить?Вам не нужно проверять каждого персонажа.Вот что 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

Итак, в конце вы бы запустили поиск и замену 4 раза:

  • replaceверхний индекс
  • удалить закрывающие и открывающие теги для верхнего индекса
  • заменить нижний индекс
  • удалить закрывающие и открывающие теги для индекса
...