提问人:Gen 提问时间:8/5/2023 最后编辑:Oscar SunGen 更新时间:8/6/2023 访问量:64
VBA Word 非连续选择所有文本实例
VBA word non-contiguous selection of all text instances
问:
该代码旨在搜索当前打开的 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
因此,代码确实会选择文本,但是当选择下一个实例时,前一个实例将被取消选择。因此,归根结底,只有最后一个实例是文档保持选中状态,同时我希望所有内容都保持选中状态。
答:
0赞
Oscar Sun
8/5/2023
#1
就像 Red Hare 说的,我尝试了 Find 对象的 HitHighlight 方法,它奏效了。
虽然这种方法不能真正像 Selection 对象或 Select 那样被选中,但它仍然像非连续多选的效果。并且在它运行后,范围(Find 对象的 Parent)不会更改,并且 Highlight 效果只是 Highlight,不会保存在 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提到的框和按钮。非常感谢他!
为什么保持选中状态
我希望所有内容都保持选中状态。
你为什么希望他们被选中?我能猜到的是:
如果只是为了看起来像,那么 HitHighlight 方法可以实现。
如果您想为他们做点什么,只需将每个找到的范围存储在一个集合中以供进一步使用。就像我在这里的回答:
https://stackoverflow.com/a/76192899/8249058
https://stackoverflow.com/a/76260672/8249058
...
评论
2赞
Timothy Rylatt
8/6/2023
当然有效,但这与“非连续多选的效果”完全不同。它只是一种将突出显示应用于所有比赛的一步方法,而无需实际选择任何内容。HitHighlight
0赞
Oscar Sun
8/6/2023
我知道@TimothyRylatt.非常感谢。为什么我们希望他们被选中?我能猜到的是: 1.如果只是为了看起来像,那么 HitHighlight 方法可以实现。2. 如果我们想为他们做点什么,只需将每个找到的范围存储在一个集合中以备将来使用。不是吗?
评论