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

时间:2017-04-11 15:17:55

标签: vba excel-vba date vlookup excel

我正在尝试根据在" 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

消息框证明正在查找的数据被正确拉出,问题是我在"批次"变量

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

1 个答案:

答案 0 :(得分:4)

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)

如果表格中不存在日期值字面,您仍需要处理错误。