СообЧа > База Знаний > Программы > MS Excel

Вопрос

Есть книга, содержащая несколько десятков листов.

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

Ответ

Если реч идет о написании макроса ручками на Visual Basic, то такой вот код:

Dim R
As Range Dim FirstMatch
As String FirstMatch = ""
' пока ничего еще не найдено, см. далее
For Each W In Worksheets
' букв. "для каждого из листов книги"
' ищем первое вхождение "zzz", параметры в хелпе есть
Set R = W.Cells.Find(What:="zzz", _ After:=ActiveCell, _ LookIn:=xlValues, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False)
' пока что-то найдено Do While (Not R Is Nothing)
' ***** здесь действия над найденными ячейками *****
' адрес ячейки: строка=R.Row, колонка=R.Column
' **************************************************
' запомнить первый результат на листе
If FirstMatch = ""
Then FirstMatch = R.Address
' поискать еще на этом же листе
Set R = W.Cells.FindNext®
' если нашли то, что уже было, то выход
If FirstMatch = R.Address
Then GoTo NextSheet Loop NextSheet: FirstMatch = ""
' обнулить первый результат Next W
' следующий лист


если же нет, то, боюсь, невозможно, т.к. макрос, написанный «автоматикой» может запомнить имя листа, а не переход на следующий лист.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация