You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA扫码登记代码报错误91,求实现查找已有条目更新时间功能

错误原因

错误91(对象变量或With块变量未设置)的触发点在第一行判断语句:

If Not (rng Is Nothing) Or rng.Offset(0, 2) > 0 Then

VBA的逻辑运算不会短路,当Find未找到匹配条码、rng为Nothing时,依然会执行后半段的rng.Offset(0, 2) > 0判断,访问未初始化的对象就会抛出错误91。同时原代码的逻辑判断顺序、时间赋值也存在问题,和预期业务逻辑不匹配。

修正后完整代码

Sub inout()
    Dim barcode As String
    Dim rng As Range
    Dim ws As Worksheet
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    barcode = Trim(ws.Cells(2, 2).Value) ' 加Trim避免空格导致匹配失败
    If barcode = "" Then Exit Sub ' 空条码直接退出
    
    ' 在A列查找匹配条码
    Set rng = ws.Columns("A").Find(What:=barcode, _
                        LookIn:=xlValues, LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, SearchDirection:=xlPrevious, ' 找最后一次出现的条码,避免重复条目匹配异常
                        MatchCase:=False, SearchFormat:=False)
    
    If rng Is Nothing Then
        ' 未找到匹配条码,新增签出记录
        Set rng = ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1, 0)
        rng.Value = barcode
        rng.Offset(0, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
        rng.Offset(0, 1).Value = Now ' 用Now存完整日期时间,Date仅存日期
        rng.Offset(0, 2).ClearContents
    Else
        ' 找到匹配条码,判断是否已有签入时间
        If rng.Offset(0, 2).Value <> "" Then
            ' 已有签入时间,新增签出记录
            Set rng = ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1, 0)
            rng.Value = barcode
            rng.Offset(0, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
            rng.Offset(0, 1).Value = Now
            rng.Offset(0, 2).ClearContents
        Else
            ' 无签入时间,更新当前条目的签入时间
            rng.Offset(0, 2).NumberFormat = "m/d/yyyy h:mm AM/PM"
            rng.Offset(0, 2).Value = Now
        End If
    End If
    
    ws.Cells(2, 2).ClearContents
End Sub

核心修改点

  • 调整逻辑判断顺序,先判断rng是否为Nothing,避免访问未初始化对象
  • 将Find的搜索方向改为从下往上,匹配最新的条码记录,避免多笔重复条码匹配旧记录
  • 新增条码非空校验、去除条码首尾空格,避免异常匹配
  • 时间赋值改用Now函数,保留时分秒信息,符合出入库登记的时间精度要求
  • 合并冗余的新增签出逻辑,代码更简洁易维护

内容的提问来源于stack exchange,提问作者wben113

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:45:03