这个excel VBA范围定义有什么错误?

时间:2018-09-05 18:16:08

标签: excel vba range

我正在尝试在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

你能告诉我为什么吗?谢谢。

1 个答案:

答案 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,或者jilk是0。

这将解决该问题:

Set U = T.Range(T.Cells(j, i), T.Cells(l, k))

因为现在保证Cells是从同一工作表对象中提取的。

旁注,避免使用单字母变量名称,尤其是小写的l