簡體   English   中英

VB中的VLookup返回錯誤2042,其中工作表中的VLookup返回預期值

[英]VLookup in VB returning Error 2042 where VLookup in worksheet returns expected

我正在嘗試編寫一個函數,該函數將基於匹配日期在表中查找值。 如果沒有匹配,它將在返回錯誤之前最多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。

運行一些測試后,我記得使用VLookup和“與日期Match時遇到的一些問題,最好使用它們的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM