Добрый вечер, форумчане!
Нужна ваша помощь.
Думаю что ошибка кроется в последующем использовании find после findnext.
Имеем: в первом столбце таблицы находятся ну скажем параграфы.
1. Макрос в первом проходе находит наибольшее количество символов в каждой ячейке.
2. Во втором проходе макрос ищет эти ячейки.
3. Затем макрос ищет вышестоящий параграф, в который входит тот, с которым мы работаем в данный момент.
С пунктами 1 и 2 макрос справляется, но если раскомментировать 2 строки, макрос срабатывает только один раз, показывая первое найденное значение и уходит в цикл.
Читал что можно вместо findnext можно использовать find но с параметром after. Подскажите пожалуйста как правильно ввернуть в данный код.
Код |
---|
Option Explicit
Sub test2()
Dim ACTrng As Range, ACTcll As Range, STRlen&, STRlenMAX&, FSTrez As String, FNDpar As Range
Set ACTrng = ThisWorkbook.Worksheets("Лист2").ListObjects("TAB_3").ListColumns(1).DataBodyRange
With ThisWorkbook.Worksheets("Лист2")
'1й проход - находим ячейки с наибольшим кол-вом символов
Set ACTcll = ACTrng.Find("*", , xlValues, xlWhole, xlByColumns)
STRlenMAX = Len(.Cells(ACTcll.Row, ACTcll.Column))
If Not ACTcll Is Nothing Then
FSTrez = ACTcll.Address
Do
Set ACTcll = ACTrng.FindNext(ACTcll)
STRlen = Len(.Cells(ACTcll.Row, ACTcll.Column))
If STRlen > STRlenMAX Then STRlenMAX = STRlen
Loop Until FSTrez = ACTcll.Address
End If
'2й проход - находим самую нижнюю в древе подсборку
Set ACTcll = ACTrng.Find("*", , xlValues, xlWhole, xlByColumns)
If Not ACTcll Is Nothing Then
FSTrez = ACTcll.Address
Do
Set ACTcll = ACTrng.FindNext(ACTcll)
STRlen = Len(.Cells(ACTcll.Row, ACTcll.Column))
If STRlen = STRlenMAX Then
MsgBox ACTcll
'Set FNDpar = ACTrng.Find(Left(ACTcll, STRlen - 2), , xlValues, xlWhole, xlByColumns)
'MsgBox FNDpar
End If
Loop Until FSTrez = ACTcll.Address
End If
End With
End Sub
|