使用VLOOKUP()我们有一个短表像一个工作表:通过在A1在VBA
值A3的是这些公式的结果:
=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
对于我的生活,我看不出有什么不对的原代码?
声明d为double并使用'cdbl(dateserial(1945,1,18))'。不知道为什么,但我认为vba将日期视为一个字符串,并且输入的值是来自工作表的一个数字。 –
@ScottCraner你是对的....双'和'长'工作..........我只是不知道为什么转换是必要的? –
或者您可以将d保留为Date,但在调用VLOOKUP时使用cDbl(d)。我怀疑原因是Excel试图将日期变量转换为Excel日期,这不是本机数据Excel数据类型,而是一个伴随格式化指令的双精度型:如果将d作为日期直接传递给使用范围的范围。它将值作为数字传递并将其格式化为日期。如果使用Range.Value2,它会以excel的形式显示为没有日期格式的数字。 –