在VBA中使用VLOOKUP()

我们在工作表中有一个简短的表格,如下所示:

在这里输入图像说明

A1A3中的值是这些公式的结果:

=DATE(1999,12,15) =DATE(1945,1,18) =DATE(2020,2,23) 

如果我尝试在工作表单元格中使用VLOOKUP()

 =VLOOKUP(DATE(1945,1,18),A1:B3,2) 

我得到正确的结果(Moe)

在这里输入图像说明

但是在VBA中:

 Sub RetrieveName() Dim d As Date, nam As String, rng As Range d = DateSerial(1945, 1, 18) Set rng = Range("A1:B3") nam = Application.WorksheetFunction.VLookup(d, rng, 2) MsgBox nam End Sub 

我收到一个错误:

在这里输入图像说明

我们目前的解决方法是使用:

 Sub RetrieveName2() Dim d As Long, nam As String, rng As Range d = 16455 Set rng = Range("A1:B3") nam = Application.WorksheetFunction.VLookup(d, rng, 2) MsgBox nam End Sub 

对于我的生活,我看不出原来的代码有什么问题?

斯科特·克莱纳是正确的,将VBAdate转换为双精度,然后将其传递给VLOOKUP将工作。
我认为问题是Excel和VBA正在使用Range.Value规则将值传回给VLOOKUP函数。 Excel没有真正的date数据types – Excel中的date是伴有date格式的双打。 Range.Value试图将格式为date的Excel数字转换为VBAdate,反之亦然当将VBAdate传递回Excel时,但VLOOKUP不理解伴随格式代码的数字。

 Sub RetrieveName() Dim d As Double, nam As Variant, rng As Range d = DateSerial(1945, 1, 18) Set rng = Range("A1:B3") nam = Application.WorksheetFunction.VLookup(d, rng, 2) MsgBox nam End Sub Sub RetrieveName2() Dim d As Variant, nam As Variant, rng As Range ' ' note Range("a2").value will fail ' d = Range("a2").Value2 Set rng = Range("A1:B3") nam = Application.WorksheetFunction.VLookup(d, rng, 2) MsgBox nam End Sub