Страницы: 1
RSS
Совместное использование методов .find и .findnext
 
Добрый вечер, форумчане!

Нужна ваша помощь.
Думаю что ошибка кроется в последующем использовании 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
Изменено: tsutse - 05.02.2019 02:09:14
 
В качестве примера. Заполняем столбец "А" одинаковыми значениями, запускаем код через 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
 
Вы бы лучше описАли саму ЗАДАЧУ, а не СПОСОБ которым ее пытаетесь решить. Просто, по-русски, обычными словами.
Согласие есть продукт при полном непротивлении сторон
 
Цитата
tsutse написал:
1. Макрос в первом проходе находит наибольшее количество символов в каждой ячейке.
Это можно сделать проще
Код
STRlenMAX = [MAX(LEN(TAB_3))]
 
Казанский, вау, опробую обязательно)

Sanja,  я попробую) мне нужно отыскать ну скажем координаты самого нижнего в "дереве" параграфа, затем найти его "родителя" произвести операции по сложению/вычитанию/умножению в ячейках правее найденных, затем подняться на уровень выше, так пока не дойдем до первого родителя. Еще осложняется тем, что родителей  первого уровня может быть несколько ("параграфы" 1, 2, 3...) и "детей" у каждого родителя может быть несколько.

Походу после разъяснения всех распугал)
Изменено: tsutse - 04.02.2019 19:56:38
 
Покажите в файле-примере Как есть-Как надо. Со всеми этими
Цитата
tsutse написал: операции по сложению/вычитанию/умножению в ячейках правее найденных
По Вашему объяснению совсем не нужно что-то искать. Идите циклом сверху вниз по первому столбцу и складывайте/умножайте/делите/вычитайте ячейки правее  
Изменено: Sanja - 05.02.2019 08:40:04
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх