#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 — для уравнений не существует стиля по умолчанию, поэтому, если вы не применили определенный стиль только к уравнениям, аналогичного ярлыка не существует. Процедура в моем ответе будет выполняться в несколько раз быстрее, чем в вашем вопросе, потому что она ничего не выбирает и не перерисовывает экран для каждого найденного уравнения.