2 votes

Comment corriger l'erreur en utilisant la fonction Find dans Excel VBA ?

J'ai essayé de rechercher une valeur dans une autre feuille en utilisant plutôt la fonction .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

Ce qui est amusant, c'est que si je saisis

Search(Range("'DataSheet'!A1:Z1000"),"STARTING") 

Cela fonctionne. Lorsque j'essaie

 SearchString = "'" & Selected_sheet &"'!A1:Z1000"

Cela ne fonctionne pas Selected_sheet est simplement le nom d'une feuille de calcul (dans ce cas, il s'agit de "DataSheet"). L'utilisation de

Search(Range(SearchString ),"STARTING") 

Error: RUN-TIME ERROR '91'
Object variable or With Block Varibale Not Set

Quel peut être le problème réel ?

1voto

Siddharth Rout Points 63935

Votre méthode n'est pas incorrecte, mais je vous recommande de ne pas passer votre plage de cette manière.

Utiliser cette

Search(Sheets("DataSheet").Range("A1:Z1000"),"STARTING")

ou

Selected_sheet = "DataSheet"
Search(Sheets(Selected_sheet).Range("A1:Z1000"),"STARTING")

BTW : il n'y a rien de mal à Range(SearchString) dans votre code. Cela devrait fonctionner. Comment appelez-vous Search ? Un espoir comme celui-ci ?

Dim Ret As Range '<~~~

Selected_sheet = "DataSheet"
SearchString = "'" & Selected_sheet & "'!A1:Z1000"
Set Ret = Search(Range(SearchString), "STARTING")

Raison : La fonction renvoie un Range Vous ne pouvez donc pas l'appeler sans Set Ret = ...Ret est à nouveau déclaré comme un Range .

EDIT

Vous pouvez également obtenir cette erreur si votre Search ne renvoie pas d'intervalle et vous essayez d'utiliser la fonction Ret . Voir cet exemple.

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

Comment s'attaquer à ce problème ?

Essayez ceci

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X