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