Excel VBA Макросы. Почему-то не работает метод Find.

Автор Посетитель 27.11.2023, 27 ноября 2023, 15:22

Посетитель 27.11.2023

Столкнулся с непонятной проблемой: почему-то в макросе (прилагается) метод 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
[свернуть]

Администратор

Наверное ваш макрос ищет не на том листе, на котором вы думаете.

Вы пишите:
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 диапазоны относились к требуемому листу, перед диапазоном нужно ставить точку.
Если точку не ставить, то диапазон будет относиться к активному листу.

Посетитель 27.11.2023

Все получилось.
Благодарен за столь подробный ответ, я этого не знал.
Спасибо большое!