我试图在excel VBA中编写类似vlookup的函数。为了做到这一点,我需要操作范围数据,因此使用cell()的范围定义最符合我的兴趣。但我只是不知道我做错了什么。这是第一个有效的代码:
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
你能告诉我为什么吗?谢谢。
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
。