2

我试图从另一张表中搜索一个值,而不是使用 .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

实际问题可能是什么?

4

1 回答 1

1

你的方法没有错,但我建议不要像那样通过你的范围。

用这个

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")

原因:该函数返回 aRange所以你不能在没有Set Ret = ...WhereRet再次声明为 a 的情况下调用它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
于 2013-04-18T20:36:33.980 回答