Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Посетитель от 27 ноября 2023, 15:22

Название: Excel VBA Макросы. Почему-то не работает метод Find.
Отправлено: Посетитель от 27 ноября 2023, 15:22
Столкнулся с непонятной проблемой: почему-то в макросе (прилагается) метод Find выдает Nothing, в то время как искомые данные есть, и они без проблем находятся через диалог Найти.

Макрос
Sub Макрос()
   
    Dim RngFind As Range
   
    With Worksheets(1)
        Set RngFind = Cells.Find(What:="текст", LookIn:=xlFormulas2, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    End With
   
    Debug.Print Not RngFind Is Nothing
   
End Sub
[свернуть]
Название: Excel VBA Макросы. Почему-то не работает метод Find.
Отправлено: Администратор от 27 ноября 2023, 16:32
Наверное ваш макрос ищет не на том листе, на котором вы думаете.

Вы пишите:
With Worksheets(1)
Т.е. вы хотите искать на первом листе.

Здесь поиск делается не на первом листе, а на активном листе (активный лист - это лист, который отображается на мониторе):
Set RngFind = Cells.Find(What:="текст", LookIn:=xlFormulas2, LookAt:=xlWhole, SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

Чтобы макрос искал на первом листе, нужно поставить точку перед Cells:
Set RngFind = .Cells.Find(What:="текст", LookIn:=xlFormulas2, LookAt:=xlWhole, SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)


Вывод

Чтобы при использовании With диапазоны относились к требуемому листу, перед диапазоном нужно ставить точку.
Если точку не ставить, то диапазон будет относиться к активному листу.
Название: Excel VBA Макросы. Почему-то не работает метод Find.
Отправлено: Посетитель от 27 ноября 2023, 18:54
Все получилось.
Благодарен за столь подробный ответ, я этого не знал.
Спасибо большое!