我试图找到一个单词并将选择保存在数组中,然后再次查找,然后将下一个选择保存在数组中。最后尝试选择数组中的所有选择。
我正在尝试这种方法,但是对它的了解却很少。我无法得到它。可以帮忙吗。
Sub Macro6()
'
' Macro6 Macro
'
'
Selection.HomeKey Unit:=wdStory
Dim selecttest(2) As Selection
For I = 1 To 2
Selection.Find.ClearFormatting
With Selection.Find
.Text = "PQXY"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute
Set selecttest(I) = Selection
Selection.MoveRight Unit:=wdCharacter, Count:=1
Next I
For I = 1 To 2
selecttest(I).Select
Next I
End Sub
我想将选择内容保留在循环中,并在最后显示它们。
我尝试过的解决方案:
Sub Macro61()
'
' Macro6 Macro
'
'
Selection.HomeKey Unit:=wdStory
Dim selecttest(2) As Range
For i = 1 To 2
Selection.Find.ClearFormatting
With Selection.Find
.Text = "PQXY"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute
Set selecttest(i) = Selection.Range
Selection.MoveRight Unit:=wdCharacter, Count:=1
Next i
For i = 1 To 2
selecttest(i).Select
Next i
End Sub
上面的问题是仅选择了selecttest(2)。我希望同时选择selecttest(1)和selecttest(2)的最终结果
我也尝试过
Dim totalselect as Range
For i = 1 to 2
set totalselect = totalselect + selectest(i)
Next i
totalselect.select
显示不存在“ +”(加号)操作的错误
解决方案:不可能
找到了一些有关不连续范围选择的文章,VBA不可能,而FindAll可能。
在VBA中查找全部:https://forums.windowssecrets.com/showthread.php/124485-Find-All-in-VBA
原因1:谈论findall
不幸的是,Microsoft省略了对“全部查找”的支持。 Word的VBA对象模型。换句话说,无法执行“查找全部” 从宏。
您可以遍历VBA中所有出现的搜索文本,但是 这与“查找全部”不同。
原因2:findall与不可能的不连续选择有着密切的联系
“查找全部”不在VBA中的原因可能是VBA也从未 有任何方法可以处理不连续的选择(您可以 使用Ctrl和鼠标进行修改),这就是“查找全部”结果。 此处的知识库文章介绍了可以完成的一些操作。每一个 自2002年以来(包括2010年)的版本在此方面未进行任何更改。
原因3:在处理和内存方面,计算量很大。如果由VBA完成
我怀疑这种疏忽是故意的并且经过了仔细的考虑。在 打开的文档窗口的视觉环境,“查找全部”是一个完美的选择 明智的概念。但是,在VBA的程序世界中,这有点 处理一组事情变得更加困难,而且通常 计算效率较低。
这并不是说它不能在VBA中完成,只是我可以 了解为什么没有完成。对于它的价值,这是真的 与Excel中的Find对象的关系更为紧密,并且 最近,经验。
要在VBA中支持“查找全部”,将需要Execute方法返回 Range对象的集合,可以通过计算 在处理和内存方面都很昂贵
答案 0 :(得分:0)
尝试两个简单的更改,将Selection
替换为Range
对象:
Sub Macro6()
...
...
Dim selecttest(2) As Range 'not Selection
...
...
Set selecttest(i) = Selection.Range 'not just a Selection
...
End sub
答案 1 :(得分:0)
如果您只想显示比赛内容,则只需要:
ActiveDocument.Range.Find.HitHighlight FindText:="PQXY"
答案 2 :(得分:0)
Dim oRng As Word.Range
Set oRng = Selection.Range
oRng.Find.ClearFormatting
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "shhada"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
While .Execute
oRng.Editors.Add wdEditorEveryone
Wend
ActiveDocument.SelectAllEditableRanges wdEditorEveryone
ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
End With
End Sub