我需要更改文档的数百个附录的编号。并且编号应具有不同的前缀。因此,我想选择文档的一部分并为选择运行一个宏。但是我只能将Find.Execute
用于整个文档,而不能用于选择。代码应如何查找我的任务?
当我选择文档的一部分并运行宏时,选择会折叠并且代码执行将继续到文档末尾而不是选择的末尾。我试图存储选择的“结束”位置,但它给出了无限循环。
我的代码
Set rngSearch = Selection.Range
Do While rngSearch.Find.Execute(FindText:="App.№", MatchWholeWord:=True, Forward:=True) = True
'routine to change numbering (replace text) and increment counter
rngSearch.Collapse Direction:=wdCollapseEnd
Loop
我也尝试遍历文档段落,但是太慢了(几分钟没有结果)。
答案 0 :(得分:1)
我使用的方法是使用两个 Range
对象:一个用于所选文本,一个用于实际搜索。对于每次循环,折叠搜索范围后,将其设置为选择范围的终点。
为了制作Range
的“副本”,请使用Duplicate
属性。
Sub FindOnlyInSelection()
Dim rngSel As Word.Range
Dim rngSearch As Word.Range
Set rngSel = Selection.Range
Set rngSearch = rngSel.Duplicate
Do While rngSearch.Find.Execute(findText:="App.?", MatchWholeWord:=True, Forward:=True) = True
'routine to change numbering (replace text) and increment counter
rngSearch.Collapse Direction:=wdCollapseEnd
rngSearch.End = rngSel.End
Loop
End Sub
答案 1 :(得分:0)
辛迪·梅斯特。我想我不太了解您的建议,因为它会导致无限循环反复更改同一区域。但是我尝试了另一种方法:删除了“ rngSearch.Collapse Direction:= wdCollapseEnd”行,并使用了下一个代码:
Set originalRange = Selection.Range
endPos = originalRange.End
Set rngSearch = originalRange.Duplicate
With rngSearch.Find
Do While .Execute(FindText:=keyword, MatchWholeWord:=True, Forward:=True) = True
With rngSearch
rngSearch.Select
startPos = rngSearch.End
'routine to change numbers and increment counter
rngSearch.Select
rngSearch.Start = startPos
rngSearch.End = endPos
End With
Loop
End With
此代码运行良好。可以吗?