Option Explicit
Sub ConvertEquation()
Dim objDoc As Document
Dim wdRng As Range
Dim SearchTxt As String
Const START_TAG = "\<eq\>"
Const END_TAG = "\</eq\>"
Set objDoc = ActiveDocument
Set wdRng = objDoc.Content
' Search with wildcards
SearchTxt = START_TAG & "*" & END_TAG
With wdRng.Find
.ClearFormatting
.Forward = True
.Wrap = wdFindStop
.MatchWholeWord = True
.MatchCase = False
.MatchWildcards = True
.Text = SearchTxt
End With
Do While wdRng.Find.Execute
' Locate the equation range
wdRng.MoveStart wdCharacter, Len(START_TAG) - 2
wdRng.MoveEnd wdCharacter, 2 - Len(END_TAG)
' Convert equation
wdRng.OMaths.Add Range:=wdRng
wdRng.Collapse wdCollapseEnd
Loop
End Sub
使现代化
问题:它也可以删除标签吗?(来自评论)
Sub ConvertEquation()
Dim objDoc As Document
Dim wdRng As Range
Dim SearchTxt As String
Dim EquTxt As String
Dim iStart As Integer
Dim iOffset As Integer
Const START_TAG = "\<eq\>"
Const END_TAG = "\</eq\>"
Set objDoc = ActiveDocument
Set wdRng = objDoc.Content
' Search with wildcards
SearchTxt = START_TAG & "*" & END_TAG
With wdRng.Find
.ClearFormatting
.Forward = True
.Wrap = wdFindStop
.MatchWholeWord = True
.MatchCase = False
.MatchWildcards = True
.Text = SearchTxt
End With
iStart = Len(START_TAG) - 1
Do While wdRng.Find.Execute
' Remove tag
EquTxt = wdRng.Text
iOffset = Len(EquTxt) - Len(START_TAG) - Len(END_TAG) + 4
EquTxt = VBA.Mid(EquTxt, iStart, iOffset)
wdRng.Text = EquTxt
' Convert equation
wdRng.OMaths.Add Range:=wdRng
wdRng.Collapse wdCollapseEnd
Loop
End Sub