我试图从另一张表中搜索一个值,而不是使用 .FIND 函数
Private Function Search(rng As Range, FindString As String) As Range
With rng
Set Search = .Find(what:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
lookat:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
End With
有趣的是,如果我进入
Search(Range("'DataSheet'!A1:Z1000"),"STARTING")
有用。当我尝试
SearchString = "'" & Selected_sheet &"'!A1:Z1000"
它不起作用 Selected_sheet 只是工作表的名称(在这种情况下,它是“DataSheet”)。使用
Search(Range(SearchString ),"STARTING")
Error: RUN-TIME ERROR '91'
Object variable or With Block Varibale Not Set
实际问题可能是什么?
最佳答案
你的方法没有错,但我建议不要像那样通过你的范围。
用这个
Search(Sheets("DataSheet").Range("A1:Z1000"),"STARTING")
或者
Selected_sheet = "DataSheet"
Search(Sheets(Selected_sheet).Range("A1:Z1000"),"STARTING")
顺便说一句,
Range(SearchString)
没有任何问题在你的代码中。它应该工作。你怎么调用 Search
?希望是这样的?Dim Ret As Range '<~~~
Selected_sheet = "DataSheet"
SearchString = "'" & Selected_sheet & "'!A1:Z1000"
Set Ret = Search(Range(SearchString), "STARTING")
原因 : 函数返回
Range
所以你不能在没有 Set Ret = ...
的情况下直接调用它在哪里 Ret
再次声明为 Range
.编辑
如果您的
Search
也会出现该错误。函数不返回范围,您尝试使用 Ret
.请参阅此示例。Dim Ret As Range
Selected_sheet = "DataSheet"
SearchString = "'" & Selected_sheet & "'!A1:Z1000"
Set Ret = Search(Range(SearchString), "STARTING")
'<~~ This will give you RUN-TIME ERROR '91' if "STARTING" is not found
Debug.Print Ret.Address
那么我们如何解决这个问题
尝试这个
Dim Ret As Range
Selected_sheet = "DataSheet"
SearchString = "'" & Selected_sheet & "'!A1:Z1000"
Set Ret = Search(Range(SearchString), "STARTING")
If Not Ret Is Nothing Then
Debug.Print Ret.Address
Else
Debug.Print "Search Didn't return any results"
End If
关于excel - 如何在 Excel VBA 中使用 Find 函数修复错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092433/