Как выбрать все математические уравнения в документах с помощью VBA в MS word?

#vba #ms-word

Вопрос:

Я совсем новичок в редакторе VBA в MS word, и мне было интересно, есть ли способ выбрать все математические уравнения в документе Word с помощью VBA? Например, следующий код

 Sub Change_Equation_Color()
Dim Eq As OMath
For Each Eq In ActiveDocument.OMaths
Eq.Range.Select
Selection.Font.ColorIndex = wdDarkBlue '
Next
End Sub
 

Выбирает каждое математическое уравнение в последовательности и изменяет цвет каждого уравнения на «wdDarkBlue». Даже если это нормально, есть ли способ сначала выбрать все уравнения, а затем изменить цвет/шрифт/и т. Д. Выделения? Основная причина в том, что если в моем документе много уравнений, то предоставленный код немного медленный, так как он должен последовательно проходить через каждое уравнение.

Редактировать. @Тимоти Райлатт предоставил довольно быстрый и общий метод, но для моей цели я обнаружил, что следующий код на самом деле намного быстрее.

 Sub Eq2LM()
    With ActiveDocument.Content.Find
        .ClearFormatting
        .Format = False
        .Font.Name = "Cambria Math"
        .Text = ""
       
        With .Replacement
            .ClearFormatting
            .Font.Name = "Latin Modern Math"
            .Text = ""
        End With
        .Execute Forward:=True, Replace:=wdReplaceAll
    End With
End Sub
 

«Предостережение» заключается в том, что все ваши уравнения должны иметь шрифт «Cambria math», который обычно используется по умолчанию.

Ответ №1:

Невозможно создать несмежный выбор с помощью VBA.

Не рекомендуется использовать этот Selection объект, хотя очень иногда это необходимо. Обычно существуют гораздо лучшие альтернативы, которые более эффективны и менее подвержены ошибкам. Например:

 Sub Change_Equation_Color()
    Dim Eq As OMath
    Application.ScreenUpdating = False
    For Each Eq In ActiveDocument.OMaths
        Eq.Range.Font.ColorIndex = wdDarkBlue
    Next
    Application.ScreenUpdating = True
End Sub
 

Комментарии:

1. Я понимаю. В этом случае можно ли было бы изменить шрифт/цвет всех уравнений сразу (без выбора). Например, я могу изменить шрифт всего текста в «нормальном» стиле, просто изменив шрифт, используемый в «нормальном» стиле.

2. @AndrewYuan — для уравнений не существует стиля по умолчанию, поэтому, если вы не применили определенный стиль только к уравнениям, аналогичного ярлыка не существует. Процедура в моем ответе будет выполняться в несколько раз быстрее, чем в вашем вопросе, потому что она ничего не выбирает и не перерисовывает экран для каждого найденного уравнения.