在Word文档中搜索样式时,对样式的搜索有时会在只找到第一个匹配项后挂起,并进入无休止的循环。这种情况大多发生在表中,即使稍后在同一单元格中也会发生。在搜索文本时从未发生过这种情况。那是个虫子吗?它是如何运作的?
Public Sub FindOccurences()
On Error GoTo MyErrorHandler
Dim i As Long: i = 0
Dim findRange As Range
Set findRange = ActiveDocument.Range
With findRange.Find
findRange.Find.ClearFormatting
'findRange.Find.Text = "the" 'Never hangs searching for text
findRange.Find.Style = ActiveDocument.Styles("text.10")
Do While .Execute(Forward:=True) = True
findRange.HighlightColorIndex = wdTurquoise
i = i + 1
DoEvents
Loop
End With
MsgBox "Done. Found times: " & i
Exit Sub
MyErrorHandler:
MsgBox "FindOccurences" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Sub
我尝试了这段代码,结果得到了一个无限循环,尽管我的文档没有任何表。我认为问题在于,您使用的while循环条件是为单词文档的线性搜索而构建的,并且样式不是以线性方式搜索的,而是通过某种类型的集合数据结构进行迭代。