使用Vlookup在VBA中查找日期时出现错误2042



我正在尝试编写根据在"TSDate"字段中输入的日期查找批处理ID的代码。

尝试在VBA中使用Application.VLookup函数时,我不断收到错误2042:

'Timesheet Date
Private Sub TSdate_KeyDown(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal shift As Integer)
Dim TimesheetDate As Date
Dim batch As Variant
Dim DRange As Range
Set DRange = Range("Table_PayPeriods")
If KeyCode = 13 Or KeyCode = 9 Then
    TSDate.Value = Format(TSDate.Value, "dd-mmm-yy")
    TimesheetDate = TSDate.Value
    batch = Application.VLookup(TSDate.Value, DRange, 2, 0)
    MsgBox (DRange(2, 2))
    BatchID.Text = batch
End If
End Sub

消息框证明正在查找的数据正在正确拉取,问题是我在"批处理"变量中收到错误。

任何帮助将不胜感激。 谢谢!

找不到查找值时,Application.VLookup将返回Error 2042

您需要测试错误,并适当地处理:

If KeyCode = 13 Or KeyCode = 9 Then
    TSDate.Value = Format(TSDate.Value, "dd-mmm-yy")
    TimesheetDate = TSDate.Value
    batch = Application.VLookup(TSDate.Value, DRange, 2, 0)
    If IsError(batch) Then
        'Do something
    Else
        MsgBox (DRange(2, 2))
        BatchID.Text = batch
    End If
End If

至于为什么找不到该值,如果没有您提供有关输入数据和各自格式的更多详细信息,则无法回答 - 也许该值确实不存在,或者它似乎存在但实际上不存在:(通常我希望字符串与日期类型不匹配,反之亦然(。

如果单元格包含日期类型值(即使它们的格式设置为类似于字符串(,则会出现错误。在这种情况下,将字符串输入 ( TSDate.Value ( 转换为 Date 类型,并将其转换为 Long 类型,并使用其长数字等效项执行 Vlookup:

batch = Application.VLookup(CLng(CDate(TSDate.Value)), DRange, 2, 0)

如果表中不存在日期值,则仍需要错误处理。

最新更新