该代码旨在搜索当前打开的 Word 文档并选择当前所选文本的所有实例。例如,我选择“Casted”运行宏,并且在出现文本“Casted”的任何地方,所有实例都会同时被选择[就像按住ctr单击进行多个选择]
Sub SelectAllText()
Dim searchText As String
searchText = Selection.Text
If searchText <> "" Then
Dim foundRange As Range
Set foundRange = ActiveDocument.Range
With foundRange.Find
.ClearFormatting
.Text = searchText
.Forward = True
.Wrap = wdFindStop
.MatchWholeWord = True
.MatchCase = False
.Execute
Do While .found
foundRange.Select 'what i needed to work
foundRange.HighlightColorIndex = wdYellow 'This is just to highlight, not what i needed
.Execute
Loop
End With
End If
End Sub
因此代码确实选择了文本,但是当选择下一个实例时,前一个实例将被取消选择。因此,最终只有最后一个实例的文档保持选中状态,同时我希望所有内容都保持选中状态。
就像Red Hare所说,我尝试了Find对象的HitHighlight方法并且成功了。
这个方法虽然不能真正像Selection对象或者Select那样被选中,但是仍然像不连续多选的效果。而且运行后,范围(Find对象的Parent)并没有改变,高亮效果也只是高亮,没有保存在HighlightColorIndex属性中,因此根本不会改变原始文档,即。 Document 的 Saved 属性不会更改为 false。此外,它不会改变插入位置。
Sub SelectAllText()
Dim searchText As String
searchText = Selection.Text
If searchText <> "" Then
Dim foundRange As Range
Set foundRange = ActiveDocument.Range
With foundRange.Find
' .ClearFormatting
' .Text = searchText
' .Forward = True
' .Wrap = wdFindStop
' .MatchWholeWord = True
' .MatchCase = False
' .Execute
' Do While .Found
' foundRange.Select 'what i needed to work
' foundRange.HighlightColorIndex = wdYellow 'This is just to highlight, not what i needed
' .Execute
' Loop
.ClearHitHighlight
.HitHighlight FindText:=searchText, TextColor:=RGB(255, 255, 255), HighlightColor:=RGB(0, 0, 0), MatchCase:=True, MatchWholeWord:=True
End With
End If
End Sub
这应该就是Red Hare提到的框和按钮。非常感谢他!