【发布时间】:2019-02-26 08:24:54
【问题描述】:
我正在尝试查找一个单词并将所选内容保存在数组中,然后再次查找,然后将下一个选项保存在数组中。最后尝试选择数组中的所有选择。
我正在尝试这个,但它只知道一半。我无法得到它。有人可以帮忙吗?
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
不幸的是,微软忽略了在 Word 的 VBA 对象模型。也就是说,Find All 无法执行 来自宏。
您可以遍历 VBA 中所有出现的搜索文本,但是 这与 Find All 不同。
原因 2:findall 与不连续的选择不直接相关,这是不可能的
查找全部不在 VBA 中的原因可能是 VBA 也从来没有 有任何方法来处理不连续的选择(你可以 make 使用 Ctrl 和鼠标),这是 Find All 会产生的。 这里的知识库文章解释了可以做的几件事。每一个 自 2002 年以来的版本(包括 2010 年)在这方面没有任何变化。
原因 3:在处理和内存方面的计算成本很高。如果由 VBA 完成
我怀疑这种遗漏是故意的并经过仔细考虑。在 一个打开的文档窗口的视觉上下文,Find All 是一个完美的 明智的概念。但是,在 VBA 的程序世界中,它有点 更难处理一组事物,而且,通常, 计算效率较低。
这并不是说它不能在 VBA 中完成,只是我可以 明白为什么没有完成。对于它的价值,同样如此 Excel 中的 Find 对象,我对它有更多的了解,以及 最近的,经验。
要在 VBA 中支持 Find All 需要 Execute 方法返回 Range 对象的集合,可以计算 就处理和内存而言,价格昂贵
【问题讨论】: