Question

J'ai les deux fonctions ci-dessous dans VBA. La abb00 fonctionne bien mais le abb11 ne fait pas.

Ma question est de savoir comment passer dans un Range variable comme paramètre pour VLookup fonction?

Function abb00() 'demo func
    abb00 = Application.WorksheetFunction.VLookup("a", _ 
        Worksheets("SheetCache").Range("A:B"), 2, False)
End Function

Function abb11() 'demo func
    rangeVar = Worksheets("SheetCache").Range("A:B")
    abb11 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function
Était-ce utile?

La solution

Vous pouvez le faire de deux manières

Fixation de votre fonction
Votre fonction actuelle ne définit pas une variable de plage. Ça fonctionnera comme ça

Function abb11()
    Dim rangeVar as Range
    Set rangeVar = Worksheets("SheetCache").Range("A:B")
    abb11 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function

Passer une plage à votre fonction
Vous pouvez également transmettre une plage à la fonction comme celle-ci

Sub GetRange()
    Dim rangeVar As Range
    Set rangeVar = Worksheets("SheetCache").Range("A:B")
    MsgBox abb2(rangeVar)
End Sub
Function abb2(ByVal rangeVar)
       abb2 = Application.WorksheetFunction.VLookup("a", rangeVar, 2, False)
End Function

Autres conseils

Pour passer une plage, vous devez d'abord obtenir une référence à une plage.

Vous avez actuellement ceci:

rangeVar = Worksheets("SheetCache").Range("A:B")

Cela n'obtient pas de portée; il lit toute la gamme A:B dans un tableau variant. Si vous souhaitez obtenir une référence de plage, vous devez utiliser le Set mot-clé.

Set rangeVar = Worksheets("SheetCache").Range("A:B")

Ironiquement, cela n'a pas d'impact sur la sortie de votre abb11 fonction (Edit: dans Excel 2003), car VLookup Peut être appliqué à un tableau variant ainsi qu'à une plage. Cependant, la lecture de deux colonnes entières dans un tableau est plutôt inefficace, donc je m'en tiendrais à une référence de plage (Set rangeVar = ...). ÉDITER Dans Excel 2007/2010, la lecture de deux colonnes entières dans un tableau de variantes fera probablement la mort de votre fonction, car il y a un million de lignes à charger par opposition à 65536 dans Excel 2003, ce que je testais.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top