我正在尝试在excel VBA中编写类似于vlookup的函数。为此,我需要处理范围数据,以便使用cells()进行范围定义最适合我的兴趣。但是我只是不知道我在做什么错。这是第一个起作用的代码:
Function GLookUp2(a, b, P, Q, R)
Dim S As Workbook
Set S = Workbooks(P)
Dim T As Worksheet
Set T = S.Sheets(Q)
Dim U As Range
Set U = T.Range(R)
GLookUp2 = Application.VLookup(a, U, b, False)
End Function
但是此代码似乎不起作用。
Function GLookUp1(a, b, P, Q, i, j, k, l)
Dim S As Workbook
Set S = Workbooks(P)
Dim T As Worksheet
Set T = S.Sheets(Q)
Dim U As Range
Set U = T.Range(Cells(j, i), Cells(l, k))
GLookUp1 = Application.VLookup(a, U, b, False)
End Function
你能告诉我为什么吗?谢谢。
答案 0 :(得分:1)
Set U = T.Range(Cells(j, i), Cells(l, k))
正在访问工作表Range
上的T
,使用ActiveSheet
之外的两个范围,因为这两个Cells
调用不符合的条件带有显式工作表对象。
换句话说,它是这样做的:
Set U = SomeSheet.Range(ActiveSheet.Cells(j, i), ActiveSheet.Cells(l, k))
无论何时ActiveSheet
不是SomeSheet
,或者j
,i
,l
或k
是0。
这将解决该问题:
Set U = T.Range(T.Cells(j, i), T.Cells(l, k))
因为现在保证Cells
是从同一工作表对象中提取的。
旁注,避免使用单字母变量名称,尤其是小写的l
。