Тема: Поиск в тексте включая таблицы - проблемы и !решение
В ходе работы по автоматизации поиска аббревиатур в документе столкнулся с тем, что в случае нахождения моего искомого выражения в части документа, являющегося таблицей поиск залипает - зацикливается
Dim MyRange, oRange As Range
Dim MyRangeEnd As Long
Dim strAcronym As String
Set MyRange = ActiveDocument.Range
MyRangeEnd = MyRange.End
strListSep = Application.International(wdListSeparator)
Set oRange = MyRange
With oRange.Find
.Text = "<[A-ZА-ЯЁ]{2" & strListSep & "}>"
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWildcards = True
'Perform the search
Do While .Execute
'Continue while found
strAcronym = oRange
' VERY IMPORTANT line as for some docs Search gets stuck in headers/footers etc.
If strAcronym = "" Then oRange.Start = oRange.Start + 1
Debug.Print oRange.Start, "Table=" & Selection.Information(wdWithInTable), strAcronym
'***********************************************************************
'Манипуляции с найденным
oRange.Expand Unit:=wdSentence
Debug.Print strAcronym, oRange 'печать сокр. и предложения где оно найдено
'***********************************************************************
If oRange.Information(wdWithInTable) = True Then
oRange.MoveEnd wdCharacter, -1
Else
oRange.Start = oRange.End
oRange.End = MyRangeEnd
End If
Loop
раскопал следующее:
внешняя ссылка
If the end of the range includes the cell marker, then the range includes the whole cell regardless of where you set the start value.
А именно - если диапазон включает маркер конца ячейки, то диапазон расширяется на ВСЮ ячейку, независимо от того, какое задано значение Start
Не знаю как это связано, но именно взяв из указанного примера подход oRange.MoveEnd wdCharacter, -1
удалось добится работоспособности кода как в основном тексте, так и в таблицах. Да, еще и колонтитулы проскакивает.
В общем, дополнения исправления и т.д. приветствуются. Так, например я расширяю диапазон на oRange.Expand Unit:=wdSentence - если кто предложит как по другому получить на этот же диапазон ссылку без расширения oRange было бы лучше, а то там по моему опасению запрятан потенциальный глюк.
З.Ы.
Если соберусь - выложу потом еще код поиска ссылок типа (ХХ-)XXX-XX-XXXX-XXXXXX - госты, осты и др. стандарты... в работе...
Отредактировано VBA-addict (24.11.2010 11:17:54)