我正在尝试编写基于"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
messagebox证明正在查找的数据被正确地提取,问题是我正在获得“批处理”变量中的错误。
任何帮助都将不胜感激。谢谢!
发布于 2017-04-11 15:21:19
当查找值未找到时,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
)转换为日期类型,并将其转换为长类型,并使用其长数字等效执行Vlookup:
batch = Application.VLookup(CLng(CDate(TSDate.Value)), DRange, 2, 0)
在表中实际上不存在日期值的情况下,仍然需要进行错误处理。
https://stackoverflow.com/questions/43349983
复制相似问题