[英]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.