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

问题描述 投票:0回答:1

我试图在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

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

excel vba range
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.