为什么VBA中的VLookup出现运行时错误1004而失败?

为什么VBA中的VLookup出现运行时错误1004而失败?,vba,excel-2007,vlookup,Vba,Excel 2007,Vlookup,电子表格“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

电子表格“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
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
此外,单元格“F2”实际上是1/7/1991单元格的复制和粘贴

VBA代码如下所示:

            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
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
我遇到“无法获取工作表函数类的VLOOKUP属性”错误


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

您要求vLookup返回2列范围,而不是1列范围。更改BRange=“A2:B9”使您的vLookup获得标准普尔价值

或者,您可以将范围更改为A2:C9,将vLookup中的2更改为3,并获得DJ平均值


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

问题在于使用SIDate作为日期(Visual Basic日期类型)
我猜VisualBasic日期类型和excel日期类型不匹配,这就是为什么会出现错误

相反,将SIDate声明为范围,它将起作用

代码如下:

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在我之前就开始了。他已经解决了你上面的第二个问题。看看他的答案。真管用,好家伙!这就是我的逻辑崩溃的地方。这很有帮助,谢谢Kartik!