Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 13:12   #11
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Если не менять ваш код, можно сделать так:
Код:
firstAddress = "" 'очистить переменную перед циклом
10
Cells.Find(What:=Sheets("управление ").Range("B5").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate

If firstAddress = ActiveCell.Address Then
    GoTo 20 'выход из цикла
ElseIf firstAddress = "" Then
    firstAddress = ActiveCell.Address 'если строка была пустой, значит это первая найденная ячейка
End If

Rows(ActiveCell.Row).Select
Selection.Copy
' тут было то , что я делаю с найденым - не привожу чтобы не засорять
GoTo 10
20 'продолжение программы
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 29.03.2013, 13:17   #12
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

одна ремарочка:
а данном примере (от Microsoft) происходит поиск двоек и замена их на пятерки, так вот, после замены последней двойки макрос вывалится по ошибке 91 в строке
Код:
Loop While Not c Is Nothing And c.Address <> firstAddress
чтобы избежать этого рекомендую внести дополнительную строку для анализа выхода из цикла, так все работет корректно
Код:
      Do
        c.Value = 5
        Set c = .FindNext(c)
        If c Is Nothing Then Exit Do
      Loop While c.Address <> firstAddress
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.03.2013, 14:32   #13
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
По умолчанию

О! Насыпалось ответиков.

Делаю примерно так как Казанский написал, немножко по своему - но принцип тот же. Этот способ в чистом виде меня не спасает в случае, если на листе не найдено искомое и надо переходить к следующему листу. Но в целом принцип похож очень... я о нём упоминал раньше.
Цитата:
Сообщение от ИгорьБ Посмотреть сообщение
Можно ещё сохранять номер последней найденной строки и проверять его - не меньше ли он, чем предпоследний... но это даже по моим упрощённым меркам выглядит совсем уж криво.
Врочем, кривизна меня не смущает ничуть. Просто надеялся, что есть возможность в формате команды Find ограничить диапазон (Ведь есть же там способ указать с какого места искать (after:=ActiveCell,) - думал есть способ и ограничить... но, видимо, увы нету)

Я вношу в начале листа искомое в ячейку. Поиск начинаю ниже.
Если на листе нет искомого или если поиск вернулся наверх - рисую в результатах мессадж о том, что на таком-то листе более ничего не найдено и перехожу к следующему.

PS в любом случае я признателен всем за уделённое внимание. Ваша помощь уже позволила мне перестать биться головой в эту стену. Я перестал искать "простукиванием" дверь и потихоньку карабкаюсь на неё чтобы просто перелезть. Не так удобно, но за-то голова потихоньку остывает от "простукивания".
Я не программер - Я только учусь... вот уже лет 30.
ИгорьБ вне форума Ответить с цитированием
Старый 29.03.2013, 14:35   #14
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
одна ремарочка:
а данном примере (от Microsoft) происходит поиск двоек и замена их на пятерки, так вот, после замены последней двойки макрос вывалится по ошибке 91 в строке
Код:
Loop While Not c Is Nothing And c.Address <> firstAddress
чтобы избежать этого рекомендую внести дополнительную строку для анализа выхода из цикла, так все работет корректно
Код:
      Do
        c.Value = 5
        Set c = .FindNext(c)
        If c Is Nothing Then Exit Do
      Loop While c.Address <> firstAddress
да да да - он по ней же вываливается если ничего не нашёл
If c Is Nothing Then Exit Do
это я пожалуй возьму на заметку - полезная фича
Я не программер - Я только учусь... вот уже лет 30.
ИгорьБ вне форума Ответить с цитированием
Старый 29.03.2013, 14:37   #15
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от ИгорьБ Посмотреть сообщение
надеялся, что есть возможность в формате команды Find ограничить диапазон (Ведь есть же там способ указать с какого места искать (after:=ActiveCell,) - думал есть способ и ограничить... но, видимо, увы нету)
С чего Вы взяли? Как раз этот метод find для диапазона:
[a5:a20].find будет искать только в [a5:a20].
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 29.03.2013, 15:21   #16
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

только представте а5:а20 не линией, а такой полоской (кольцом), где за а20 снова идет а5, потом а6...
если Find что-то нашел в 20-й строке, и запустить след. поиск, то начнется он после а20 (т.е. с а5)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.03.2013, 01:34   #17
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
По умолчанию

Ребята, ещё раз всем спасибо.
Сделал так, как написал тут:
Цитата:
Сообщение от ИгорьБ Посмотреть сообщение
Я вношу в начале листа искомое в ячейку. Поиск начинаю ниже.
Если на листе нет искомого или если поиск вернулся наверх - рисую в результатах мессадж о том, что на таком-то листе более ничего не найдено и перехожу к следующему.
Так даже проще, вроде как, вышло - нет необходимости определять каждый раз размер блока данных для текущего листа.
Всё работает. Просто темку не закрыл. - Нет в опциях темы привычного "Закрыть".
Если кто модерит - закрывайте.
Я не программер - Я только учусь... вот уже лет 30.

Последний раз редактировалось ИгорьБ; 30.03.2013 в 01:37.
ИгорьБ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выйти из цикла по нажатию горячей клавиши? suslik_ Помощь студентам 2 06.07.2011 16:20
Как выйти с процедуры? Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2011 22:26
Как нажатием кнопки выйти из неактивной программы? Iceman Win Api 2 18.12.2009 21:21
Как можно программно выйти из ждущего режима xakkkkker Win Api 1 13.03.2009 17:26
Как выйти из бесконечного цикла! Эдуард Общие вопросы C/C++ 11 02.03.2008 19:15