如何传入VLookup函数的Range参数?

我在VBA下面有两个函数。 abb00工作正常,但abb11没有。

我的问题是如何传递一个Rangevariables作为VLookup函数的参数?

 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 

你可以用两种方法做到这一点

修复你的function
您当前的函数不设置范围variables。 它会像这样工作

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

传递一个范围到你的函数
或者,你可以传递一个范围到这个函数

 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 

要传递一个范围,你首先需要得到一个范围的引用。

你现在有这个:

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

这没有得到一个范围; 它将整个范围A:B读入一个Variant数组。 如果你想得到一个范围参考,你需要使用Set关键字。

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

具有讽刺意味的是,这并不影响abb11函数的输出( 编辑:在Excel 2003中 ),因为VLookup可以应用于Variant数组以及范围。 但是,将两个整列读入一个数组是相当低效的,所以我会坚持得到一个范围引用( Set rangeVar = ... )。 编辑在Excel 2007/2010中,将两个整列读入一个Variant数组可能会导致您的函数死亡,因为有一百万行加载,而不是在Excel 2003中,这是我正在testing的65536。