Страницы: 1
RSS
.findnext из примера возвращает ошибку
 
запутался в трех соснах.

почему пример из хелпа экселя,

With Worksheets(1).Range("a1:a500")
   Set c = .Find(2, lookin:=xlValues)
   If Not c Is Nothing Then
       firstAddress = c.Address
       Do
           c.Value = 5
           Set c = .FindNext©
       Loop While Not c Is Nothing And c.Address <> firstAddress
   End If
End With

возвращает ошибку 91? чего ему не хватает?
 
Не хватает ему Адреса.
Когда заменили последнюю двойку на пятерку, то .FindNext© выдает Nothing. Цикл работает пока "с" не Nothing и c.Address не равен адресу первой двойки. Как Вы понимаете, у Nothing нет адреса.
Если бы двойки не менялись на пятёрки, то цикл без ошибки прекратился бы на совместном условии, а так только на первом. Разработчики тоже ошибаются  :)
 
Можно и без FindNext обойтись

Попробуйте функцию FindAll, которая вернёт вам диапазон, содержащий сразу все найденные ячейки.
http://excelvba.ru/code/FindAll

А потом уже сделаете цикл по диапазону с результатами поиска
 
Sergei_A, т.е. по идее надо сначала проверять а потом искать. do..loop while -> do while...loop.

EducatedFool, спасибо, функцию попробую.
еще была идея с автофильтрами но пока не нашел рецепта как выцепить из него список уникальных записей и их кол-во в солбце.
 
ae485, в данном случае без разницы. Ошибка возникает при проверке условия c.Address. В этом примере, вторая половина условия, а именно: c.Address <> firstAddress будет всегда выполняться, так как .FindNext уже не найдет ту ячейку firstAddress, потому что её значение изменили на 5.
Оставьте только
Код
Loop While Not c Is Nothing

и всё будет работать.
Изменено: Sergei_A - 06.02.2013 11:07:23
Страницы: 1
Читают тему
Наверх