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

理由: 関数は a を返すため、 Whereを再び a として宣言Rangeせずに呼び出すことはできません。Set Ret = ...RetRange

編集

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 に答える