[英]Why am I getting an error with Find in VBA?
我正在嘗試使用VBA搜索范圍內的字符串。 我拼湊了一些代碼,但我在“If Not”行中一直收到1004錯誤:
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
If Not Range(search_range).Find("Test") Is Nothing Then
'match found
Set found_range = Range(search_range).Find("Test")
Debug.Print found_range.Column
Else
MsgBox "No match found"
'no match found
End If
End Sub
關於為什么我收到錯誤的任何想法?
我有點混淆了.Find
如果Range.Find
方法已經返回一次Range
對象,則無需將其設置兩次。
search_range
也是一個Range
對象,因此需要嘗試將其封裝在另一個Range()
對象中。
事實上,這是你得到錯誤的原因,因為它期望在類型轉換Range(<string>)
內的Range(<string>)
正如@MathieuGuindon正確指出:
它是錯誤的原因,但原因是因為非限定Range調用是
ActiveSheet
的子對象,而你不能做Sheet1.Range(Sheet2.Cells(1, 1)
,Sheet2.Cells(1,> 10))
- 在OP的代碼中拋出錯誤1004,因為ws不是ActiveSheet
; 使用ws限定Range調用也會修復錯誤...但是,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
你可以使用:
Option Explicit
Sub test1()
Dim wb As Workbook
Dim ws As Worksheet
Dim found_range As Range, search_range As Range
Set wb = Workbooks("D1")
Set ws = wb.Sheets("Master data")
Set search_range = ws.Rows(147).EntireRow
Set found_range = search_range.Find(What:="Test", LookIn:=xlValues, LookAt:=xlWhole)
If Not found_range Is Nothing Then
Debug.Print found_range.Column
Else
MsgBox "No match found"
'no match found
End If
End Sub
注意:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.