Я немного путаюсь с двойным .Find
Если ваш Range.Find
метод уже возвращает объект Range
один раз, нет необходимости устанавливать его дважды.
Также search_range
уже является объектом Range
, поэтому необходимо попытаться инкапсулировать его в другой объект Range()
.
На самом деле это причина, вы получаете ошибку, потому что она
ожидает строку внутри приведенного типа Range(<string>)
Как правильно заметил @MathieuGuindon:
Это причина ошибки, но причина в том, что
безусловный вызов Range является дочерним объектом любого ActiveSheet
есть, и вы не можете сделать Sheet1.Range(Sheet2.Cells(1, 1)
, Sheet2.Cells(1,> 10))
- ошибка 1004 генерируется в коде OP, потому что ws не
ActiveSheet
; квалификация вызова Range с ws исправила бы
ошибка тоже ... но да Range(someRange
) определенно избыточно.
Sub test1()
Dim wb As Workbook
Dim ws As Worksheet
Dim found_range As Range
Dim search_range As Range
Set wb = Workbooks("D1")
Set ws = wb.Sheets("Master data")
Set search_range = ws.Cells(147, 1).EntireRow
Set found_range = search_range.Find("Test")
If Not found_range Is Nothing Then
Debug.Print found_range.Address
Else
MsgBox "No match found"
End if
End Sub