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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 18:32   #1
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
Смущение Как выйти из поиска по достижению конца листа?

Как выйти из поиска по достижению конца листа?

По достижению последней строки на листе поиск начинает искать по кругу, а мне бы выйти из цикла, чтобы задать следующий лист.

Помогите пжлста. О просвещённые!

10
Cells.Find(What:=Sheets("управление ").Range("B5").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate

Rows(ActiveCell.Row).Select
Selection.Copy
' тут было то , что я делаю с найденым - не привожу чтобы не засорять
GoTo 10

PS нашёл на Вашем форуме очень много ответов, на свои ламерские вопросы, а на этот - не могу. Может он совсем простой и поэтому ответ на него все знают?
Я не программер - Я только учусь... вот уже лет 30.
ИгорьБ вне форума Ответить с цитированием
Старый 28.03.2013, 18:35   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А не проще найти сразу все ячейки, и потом их все скопировать?
http://excelvba.ru/code/FindAll

Использовать можно так:
Код:
Sub test()
    ' поиск и копирование найденных строк
    FindAll(Cells, Sheets("управление ").Range("B5").Value, xlFormulas, xlPart).EntireRow.Copy
End Sub
Кстати, в коде этой функции есть ответ на ваш вопрос.

Последний раз редактировалось EducatedFool; 28.03.2013 в 18:37.
EducatedFool вне форума Ответить с цитированием
Старый 28.03.2013, 19:23   #3
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А не проще найти сразу все ячейки, и потом их все скопировать?
http://excelvba.ru/code/FindAll

Использовать можно так:
Код:
Sub test()
    ' поиск и копирование найденных строк
    FindAll(Cells, Sheets("управление ").Range("B5").Value, xlFormulas, xlPart).EntireRow.Copy
End Sub
Кстати, в коде этой функции есть ответ на ваш вопрос.
Спасибо за оперативность. Но, увы, попытка использовать команду FindAll неизменно приводит к сообщению об ошибке
Compile error: Sub or Function not defined

PS может моя версия офиса (2010) не умеет эту функцию?
Я не программер - Я только учусь... вот уже лет 30.
ИгорьБ вне форума Ответить с цитированием
Старый 28.03.2013, 19:27   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А вы не забыли скопировать из статьи код этой функции, и вставить его под своим макросом?
EducatedFool вне форума Ответить с цитированием
Старый 28.03.2013, 20:03   #5
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
По умолчанию Мне бы всё же ответ на мой первый вопрос

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А вы не забыли скопировать из статьи код этой функции, и вставить его под своим макросом?
Да, я её таки не там подписал - но при попытке с ней работать - вылезает ошибка перепонения ...

Тут в другом проблема - мне бы всё же ответ на мой первый вопрос.

У меня там с найдеными данными выполняется определённая процедура, которая работает и вполне справляется со воей задачей.
При использовании функции поиска всех строк на листе эта процедура перестанет выполняться и вся работа перейдёт из разряда прикладных в разряд теортических. А мне это как-то незачем.

Я, конечно, могу определить текущий номер строки найденного и сравнить его с последним на листе, но мне это ничего не даст - так как последняя найденная строка и последняя строка на листе никак не взаимосвязаны.
Можно ещё сохранять номер последней найденной строки и проверять его - не меньше ли он, чем предпоследний... но это даже по моим упрощённым меркам выглядит совсем уж криво.

Почти наверняка, есть решение и для Cells.Find, но я уже замучил гугль двумя стами вопросами, а ответа не нашёл

Cells.Find(what:=Sheets("óïðàâëåíèå ").Range("B5").Value, after:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate

Форумчане! Помогите плииз:
Как выйти из этой функции, чтоб она не шла по второму кругу на листе ?
Я не программер - Я только учусь... вот уже лет 30.
ИгорьБ вне форума Ответить с цитированием
Старый 29.03.2013, 05:58   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

А Вы прочитайте справку по Find. Там как раз есть пример, отвечающий на Ваш вопрос.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 29.03.2013, 12:53   #7
ИгорьБ
Новичок
Джуниор
 
Аватар для ИгорьБ
 
Регистрация: 28.03.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
А Вы прочитайте справку по Find. Там как раз есть пример, отвечающий на Ваш вопрос.
Что? Легко над убогим издеваться?
(Про убогого - это я про себя ессно)

Ребята, Вы поймите - я - не программист.
Я для себя корявой рукой пишу програмулину, которая помагает мне справляться с повседневной рутиной.

В чём то другом - я разбираюсь. Я могу показать Вам, что I5 и I3 процессоры в ноутбуках - это одинаковые процессоры и разница в цене на ноутбуки на них - просто маркетинг. Я могу объяснить что такое каскадное включение котлов и что оно даёт и когда его надо применять... Я не тупой (ну я сам так надеюсь )
Но, БЛИН! когда я жму на F1 и давлю find - вываливается 2 страницы ЗАГОЛОВКОВ в которых внутри листов 100 английского текста. (Для меня - что на китайском... )

Если не тяжело - умоляю сделайте мне копипаст НУЖНОГО кусочка хелпа
Может у Вас он по другому выглядит? Или очевидное от меня просто ускользает?
Я не программер - Я только учусь... вот уже лет 30.
ИгорьБ вне форума Ответить с цитированием
Старый 29.03.2013, 12:58   #8
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Да пожалуйста. Где Вы там 100 страниц нашли... Хелп:

This example finds all cells in the range A1:A500 on worksheet one that contain the value 2 and changes it to 5.

Код:
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(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 29.03.2013, 13:01   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

http://msdn.microsoft.com/en-us/libr.../ff839746.aspx

вот ссылка на оригинал.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 29.03.2013, 13:04   #10
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от ИгорьБ Посмотреть сообщение
сделайте мне копипаст НУЖНОГО кусочка хелпа
Цитата:
Range.Find Method
Finds specific information in a range.

This example finds all cells in the range A1:A500 on worksheet one that contain the value 2 and changes it to 5.

Код:
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(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
Идея такая: запомнить адрес первой найденной ячейки, а потом в цикле проверять - если адрес очередной найденной ячейки совпал с тем, который запомнили, то выход из цикла.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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