【问题标题】:Why is VLookup in VBA failing with runtime error 1004?为什么 VBA 中的 VLookup 失败并出现运行时错误 1004?
【发布时间】:2012-06-16 03:46:43
【问题描述】:

电子表格“Sheet3”如下所示:

            S&P 500         DJIA

 1/1/1991   795.4476    2973.09

 1/2/1991   786.3856    2947.1

  1/3/1991  775.4636    2905.19

  1/4/1991  773.5364    2896.8

  1/7/1991  760.2996    2847.9

  1/8/1991  759.0029    2832.81

  1/9/1991  750.8416    2788.67

  1/10/1991 758.1719    2820.8

此外,单元格“F2”实际上是 1991 年 1 月 7 日单元格的复制和粘贴。

VBA 代码如下所示:

Sub badlook3()

Dim BenchSI As Variant
Dim BRange As Range
Dim SIDate As Date


Set BRange = Worksheets("Sheet3").Range("A2:C9")  

MsgBox BRange.Address

SIDate = Worksheets("Sheet3").Range("F2").Value


BenchSI = Application.WorksheetFunction.VLookup(SIDate, BRange, 2, True)


End Sub

我收到“无法获取 WorkSheet 函数类的 VLOOKUP 属性”错误。

我在这里缺少什么? A 列的顺序正确。它们是日期。 Excel 想从我这里得到什么?

【问题讨论】:

    标签: vba excel-2007 vlookup


    【解决方案1】:

    问题在于使用 SIDate 作为日期(Visual Basic 日期类型)
    我的猜测是visual basic日期类型和excel日期类型不匹配,这就是你收到错误的原因

    改为将 SIDate 声明为 Range,它会起作用

    代码如下:

    Sub badlook3()
    
       Dim BenchSI As Variant 
       Dim BRange As Range 
       Dim SIDate As Range
    
       Set BRange = Worksheets("Sheet3").Range("A2:C9")      
       MsgBox BRange.Address
    
       Set SIDate = Worksheets("Sheet3").Range("F2")    
       BenchSI = Application.WorksheetFunction.VLookup(SIDate, BRange, 2, True)
    
    End Sub
    

    【讨论】:

    • 好人!那是我的逻辑崩溃的地方。这很有帮助,谢谢 Kartik!
    【解决方案2】:

    您要求 vLookup 返回 2 列范围,而不是 1 列范围。更改 BRange = "A2:B9" 以使您的 vLookup 获取 S&P 值。

    或者,您可以将范围更改为 A2:C9,然后在 vLookup 中将 2 更改为 3,然后获取 DJ 平均值。

    简而言之,vLookup 只能返回对某个范围内最大数量的列的列引用。它可以返回 3 列范围内的第 1、2、0r 第 3 列引用,但不能返回第 4 列,因为没有第 4 列。

    【讨论】:

    • 谢谢!那是一个错字。我试图把它缩小很多来问这个问题。我对 Range 进行了更改,但仍然有相同的错误。有什么想法吗?
    • 非常感谢您对 Scott 的帮助! - 汤米
    • 感谢 almo,没有意识到这一点!这是不正确的......但是!如果您有任何想法,请随时加入。
    • 上面的 Kartik 在我之前就做到了。他已经解决了你上面的第二个问题。看他的回答。它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2017-11-27
    相关资源
    最近更新 更多