【问题标题】:VLookup in VB returning Error 2042 where VLookup in worksheet returns expectedVB 中的 VLookup 返回错误 2042,其中工作表中的 VLookup 返回预期
【发布时间】:2018-01-13 17:30:40
【问题描述】:

我正在尝试编写一个函数,该函数将根据匹配日期在表中查找值。如果不匹配,它将在返回错误之前最多查找 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。

【问题讨论】:

    标签: excel vba vlookup


    【解决方案1】:

    在运行了一些测试之后,我回想起了在将 VLookup 和 Match 与 Dates 一起使用时遇到的一些问题,最好使用它们的 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
    

    【讨论】:

    • 我得出了相同的结论,但通过将 dateadd 函数包装在 clng 中来解决它,因为日期没有小数部分。
    • 是的,我认为问题在于 Excel 没有 Date 数据类型。 VBA 可以。而VLOOKUP 对特定的数据类型很敏感。因此,必须确保比较是在相同数据类型的值之间进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多