如何select MS word中VBA文档中的所有数学方程式?
How to select all math equations in documents with VBA in MS word?
我对 MS word 中的 VBA 编辑器很陌生,我想知道是否有一种方法可以使用 VBA select word 文档中的所有数学方程式?
比如下面的代码
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'。虽然这很好,但有没有办法先 select 所有方程,然后改变 selection 的 color/font/etc?主要原因是如果我的文档有很多方程式,那么提供的代码会有点慢,因为它必须按顺序遍历每个方程式。
编辑。 @Timothy Rylatt 提供了一种非常快速且通用的方法,但出于我的目的,我发现以下代码实际上要快得多。
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”字体,这通常是默认字体。
无法使用 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
我对 MS word 中的 VBA 编辑器很陌生,我想知道是否有一种方法可以使用 VBA select word 文档中的所有数学方程式? 比如下面的代码
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'。虽然这很好,但有没有办法先 select 所有方程,然后改变 selection 的 color/font/etc?主要原因是如果我的文档有很多方程式,那么提供的代码会有点慢,因为它必须按顺序遍历每个方程式。
编辑。 @Timothy Rylatt 提供了一种非常快速且通用的方法,但出于我的目的,我发现以下代码实际上要快得多。
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”字体,这通常是默认字体。
无法使用 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