VB中的VLookup返回错误2042,其中工作表中的VLookup返回预期

时间:2018-01-13 17:30:40

标签: excel vba vlookup

我正在尝试编写一个函数,该函数将根据匹配日期查找表中的值。如果没有匹配,它将在返回错误之前最多7天进行查找。

Option Explicit
Public Function GetWeekEndBalanceFromStatement(lookupDate As Date, statement As Range, column As Integer) As Variant
    Dim lookupModifier As Integer

    Do While IsError(Application.VLookup(DateAdd("d", lookupModifier, lookupDate), statement, column, False)) And lookupModifier > -7
        lookupModifier = lookupModifier - 1
    Loop

    GetWeekEndBalanceFromStatement = Application.VLookup(DateAdd("d", lookupModifier, lookupDate), statement, column, False)
End Function

当我将其分解为调试时,我遇到的问题是VLookups一直返回

  

错误2042

即使在电子表格中写入的相同VLookup返回值。

书面函数需要参考,K8是第一行:

=DATE(2018,1,5)
=VLOOKUP(K8, A:F, 6,FALSE )
=GetWeekEndBalanceFromStatement(K8,A:F,6)

关于我可能做错什么的任何线索?我试图在CDate中封装日期,将.Value附加到范围并将日期作为变量并访问.Value2。

1 个答案:

答案 0 :(得分:3)

在运行一些测试后,我回想起在使用VLookupMatch与日期时遇到的一些问题,更好地使用他们的Excel值(将Date更改为Double)。

修改后的功能代码

Option Explicit

Public Function GetWeekEndBalanceFromStatement(lookupDate As Double, statement As Range, column As Integer) As Variant
    Dim lookupModifier As Integer

    Do While IsError(Application.VLookup(lookupDate + lookupModifier, statement, column, False)) And lookupModifier > -7
        lookupModifier = lookupModifier - 1
    Loop

    GetWeekEndBalanceFromStatement = Application.VLookup(lookupDate + lookupModifier, statement, column, False)
End Function