Vba WorksheetFunction.Vlookup和运行时错误1004

Vba WorksheetFunction.Vlookup和运行时错误1004,vba,excel,Vba,Excel,我在尝试使用worksheetfunction.Vlookup时一直遇到错误。误差如下所示: 运行时错误1004(应用程序定义或对象定义错误) 错误发生在“g”的代码中。我的代码是: Sub Rankings() Dim f As Variant Dim n As Variant Dim h As Variant Dim e As Integer Dim d As Integer Dim c As Integer Dim g As Variant d = 2 e = 2 While d &

我在尝试使用worksheetfunction.Vlookup时一直遇到错误。误差如下所示:

运行时错误1004(应用程序定义或对象定义错误)

错误发生在“g”的代码中。我的代码是:

Sub Rankings()

Dim f As Variant
Dim n As Variant
Dim h As Variant
Dim e As Integer
Dim d As Integer
Dim c As Integer
Dim g As Variant

d = 2
e = 2

While d < 7

    c = 2
    Worksheets("Sheet1").Activate

    While Cells(c, 1) <> vbNullString
        n = Right(Cells(c, 1), Len(Cells(c, 1)) - 1)
        h = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, e).End(xlUp).Row
        g = WorksheetFunction.VLookup(n, Worksheets("Sheet2").Range(Cells(3, e - 1), Cells(h, e)), 2, False)
        f = WorksheetFunction.Rank_Eq(g, Worksheets("Sheet2").Range(Cells(3, e), Cells(h, e)), 1)
        If Not IsError(f) Then
            Cells(c, d) = f
        Else
            Cells(c, d) = WorksheetFunction.Max(Worksheets("Sheet2").Range(Cells(3, e), Cells(h, e)) + 1)
        End If

    Wend
Wend

End Sub
子排名()
作为变体的dimf
作为变体的dimn
Dim h作为变体
作为整数的Dim e
作为整数的Dim d
作为整数的Dim c
dimgas变体
d=2
e=2
而d<7
c=2
工作表(“表1”)。激活
而单元格(c,1)为空字符串
n=右(单元格(c,1),Len(单元格(c,1))-1)
h=工作表(“Sheet2”)。单元格(工作表(“Sheet2”)。行。计数,e)。结束(xlUp)。行
g=工作表函数.VLookup(n,工作表(“Sheet2”)。范围(单元格(3,e-1),单元格(h,e)),2,假)
f=工作表函数。秩_等式(g,工作表(“表2”)。范围(单元格(3,e),单元格(h,e)),1)
如果不是IsError(f),则
单元(c,d)=f
其他的
单元格(c,d)=工作表功能最大值(工作表(“表2”)。范围(单元格(3,e),单元格(h,e))+1)
如果结束
温德
温德
端接头
基本上,我要做的是对第2页第2列中的值进行排序,并将它们放入第1页第2列中的单元格中,对应于相关的高尔夫球手

有没有关于如何修复错误的建议


常见错误。激活Sheet1后,您尝试在Sheet2上的范围内执行vlookup

g=WorksheetFunction.VLookup(n,工作表(“Sheet2”)。范围(单元格(3,e-1),单元格(h,e)),2,False)

但是,您构建为Vlookup参数的范围使用对活动工作表(Sheet1)的单元格调用。

经常在工作表之间切换时,建议使用工作表句柄,如下所示:

Dim ws1 As Worksheet
Dim ws2 As Worksheet
set ws1 = Worksheets("Sheet1")
set ws2 = Worksheets("Sheet2")
那么你应该这样做:

g = WorksheetFunction.VLookup(n, ws2.Range(ws2.Cells(3, e - 1), ws2.Cells(h, e)), 2, False)

常见的错误。激活Sheet1后,您尝试在Sheet2上的范围内执行vlookup

g=WorksheetFunction.VLookup(n,工作表(“Sheet2”)。范围(单元格(3,e-1),单元格(h,e)),2,False)

但是,您构建为Vlookup参数的范围使用对活动工作表(Sheet1)的单元格调用。

经常在工作表之间切换时,建议使用工作表句柄,如下所示:

Dim ws1 As Worksheet
Dim ws2 As Worksheet
set ws1 = Worksheets("Sheet1")
set ws2 = Worksheets("Sheet2")
那么你应该这样做:

g = WorksheetFunction.VLookup(n, ws2.Range(ws2.Cells(3, e - 1), ws2.Cells(h, e)), 2, False)

c
不增加?c、d和e将以不同的数量增加。但是,错误发生在当前情况下,我希望在处理递增元素之前先测试代码。@ScottCraner Vlookup不区分大小写。
c
不递增?c、d和e将以不同的量递增。但是,错误发生在当前情况下,我希望在处理增量元素之前先测试代码。@ScottCraner Vlookup不区分大小写。