首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Vlookup在VBA中查找日期时出错2042

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

Stack Overflow用户
提问于 2017-04-11 15:17:55
回答 1查看 3.1K关注 0票数 2

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

当我试图在VBA中使用Application.VLookup函数时,一直会出现错误2042:

代码语言:javascript
运行
复制
'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证明正在查找的数据被正确地提取,问题是我正在获得“批处理”变量中的错误。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-11 15:21:19

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

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

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
batch = Application.VLookup(CLng(CDate(TSDate.Value)), DRange, 2, 0)

在表中实际上不存在日期值的情况下,仍然需要进行错误处理。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43349983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档