我正在尝试使用“查找”逐步遍历所有出现的特定样式。该片段说明了问题。
Public Sub test()
Dim rng As Range
Dim found As Boolean
Set rng = ActiveDocument.Range()
rng.Find.Style = "prod_code"
found = rng.Find.Execute()
rng.Start = rng.End
rng.End = ActiveDocument.Range().End
found = rng.Find.Execute()
End Sub
在第一个执行 found 为True之后,rng.start为152,rng.end为153,rng.text为“ 1”。在第二个Execute之前,rng.start和rng.end分别为153和27219,并且rng.text的值反映了这一点。 在找到第二个Execute之后,开始和结束分别为152和153。
通过搜索文本和样式,我已经确定第二次搜索是从零开始,而不是搜索到末尾然后换行(尽管它仍然应该在范围内换行)。
将最终值视为给定值。如果我在第一个比赛之前设置了它,则Execute返回False。
我尝试为第二次搜索创建一个新的范围,但其行为方式相同。
我已尝试使用MS Office 2007和2016以及Execute和Execute2007方法进行此操作,因此,大概是有此行为的,但我应该如何搜索一个不以零开头的范围?
我刚刚意识到,我要找的样式的第一次出现是在表格的单元格中。当我在没有表的文档上运行测试代码时,它的行为符合我的预期,也就是说,第二个搜索结果在要搜索的范围内。这给了我新的攻击路线,但基本问题仍然存在。我想在文档的特定范围内搜索样式,而不管该范围是包含表还是表的一部分。
答案 0 :(得分:0)
在为表中的格式查找查找时,您会遇到的一个问题是,您未指定文本是所找到的范围可能包含单元格结束标记和/或行末标记。在这种情况下,仅在执行下一个“查找”之前折叠找到的范围是不够的。尝试根据以下方法进行尝试:
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Replacement.Text = ""
.Forward = True
.Format = True
.Wrap = wdFindStop
.Style = "prod_code"
.Execute
End With
Do While .Find.Found
If .Information(wdWithInTable) = True Then
MsgBox .Text
If .End = .Cells(1).Range.End - 1 Then
.End = .Cells(1).Range.End
.Collapse wdCollapseEnd
If .Information(wdAtEndOfRowMarker) = True Then
.End = .End + 1
End If
End If
End If
If .End = ActiveDocument.Range.End Then Exit Do
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub