Удаление нижнего или верхнего индекса из пробела в Word VBA - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу удалить форматирование нижнего или верхнего индекса из пробелов.

Когда я запускаю приведенный ниже код, работает только верхняя функция, тогда как нижняя функция ничего не делает. Если я переключаю положения функций, все равно работает только верхняя функция. Функции практически идентичны, и я не знаю, с чего начать, чтобы это исправить. Пожалуйста, кто-нибудь может указать мне правильное направление?

Dim oRng As Word.Range
Set oRng = ActiveDocument.Range

'For subscripted spaces

Selection.HomeKey unit:=wdStory
With oRng.Find
 .ClearFormatting
 .Replacement.ClearFormatting
.Forward = True
.Text = "[A-z0-9] "
.Replacement.Text = ""
.MatchWholeWord = False
    While .Execute
        If oRng.Characters(2).Font.Subscript = True Then
        oRng.Characters(2).Font.Subscript = False
        End If
    oRng.Collapse direction:=wdCollapseEnd
    Wend
End With

'For superscripted spaces

 Selection.HomeKey unit:=wdStory
With oRng.Find
 .ClearFormatting
 .Replacement.ClearFormatting
.Forward = True
.Text = "[A-z0-9] "
.Replacement.Text = ""
.MatchWholeWord = False
    While .Execute
        If oRng.Characters(2).Font.Superscript = True Then
        oRng.Characters(2).Font.Superscript = False
        End If
    oRng.Collapse direction:=wdCollapseEnd
    Wend
End With

1 Ответ

0 голосов
/ 05 сентября 2018

Проблема в том, что к тому моменту, когда вы закончили обрабатывать серию, которую вы поместили первой, диапазон, определенный Rng, свернулся до последнего найденного экземпляра. В любом случае, вам не нужна петля. Попробуйте:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = " "
    .Replacement.Text = "^&"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .Font.Superscript = True
    .Replacement.Font.Superscript = False
    .Execute Replace:=wdReplaceAll
    .Font.Subscript = True
    .Replacement.Font.Subscript = False
    .Execute Replace:=wdReplaceAll
  End With
End With
Application.ScreenUpdating = True
End Sub
...