Нужна ваша помощь. Думаю что ошибка кроется в последующем использовании 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
В качестве примера. Заполняем столбец "А" одинаковыми значениями, запускаем код через F8:
Код
Sub aaa()
Dim aa As Range, a&
Set aa = [a1].CurrentRegion.Columns("A").Find([a1], , xlValues, xlWhole, xlByColumns)
If Not aa Is Nothing Then a = aa.Row Else Exit Sub
Debug.Print [a1].CurrentRegion.Columns("A").Address
Do
Debug.Print aa.Address
Set aa = [a1].CurrentRegion.Columns("A").FindNext(aa)
Loop While Not aa Is Nothing And aa.Row <> a
End Sub
Sanja, я попробую) мне нужно отыскать ну скажем координаты самого нижнего в "дереве" параграфа, затем найти его "родителя" произвести операции по сложению/вычитанию/умножению в ячейках правее найденных, затем подняться на уровень выше, так пока не дойдем до первого родителя. Еще осложняется тем, что родителей первого уровня может быть несколько ("параграфы" 1, 2, 3...) и "детей" у каждого родителя может быть несколько.