Это слишком много, чтобы вписаться в комментарий, поэтому публиковать его как ответ ...
Вы должны быть осторожны при использовании Find()
только с одним аргументом: если вы ранее использовали Find()
в своем коде и (например) указали аргумент lookat:=xlWhole
, то вы можете не получить ожидаемых результатов особенно если вы ищете подстроку значения ячейки. Параметры, передаваемые в Find (), являются постоянными: если вы не укажете аргумент, он может быть перенесен из предыдущего использования.
В качестве примера (работа с листом, содержащим текст «здравствуй том» в B4:
Sub Tester()
Dim f
Set f = ActiveSheet.Cells.Find(what:="tom", lookat:=xlPart)
Report f
Set f = ActiveSheet.Cells.Find(what:="tom", lookat:=xlWhole)
Report f
Set f = ActiveSheet.Cells.Find("tom")
Report f
End Sub
Sub Report(f)
If Not f Is Nothing Then
Debug.Print f.Address
Else
Debug.Print "not found"
End If
End Sub
Запуск этого дает:
$B$4
not found
not found
Мне кажется, это также относится к случаю, если вы использовали Find () "вручную", а затем использовали его в коде позже в том же сеансе (хотя и не тестировали).