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

VBA使用Range.Find方法触发Run-Time Error 91错误无法解决求助

报错根源分析
  • 核心触发原因:Find方法未在目标区域找到匹配值时会返回Nothing,你未做非空判断就直接访问返回对象的Row/Column属性,触发运行时错误91。除了你报错的OTc行,前面OTr的Find如果没匹配到Employeecm.Text也会触发同样的报错。
  • 隐藏隐患1:VBA 不支持一行声明多个同类型变量,你写的Dim OTr, OTc As Range实际只有OTc是Range类型,OTr默认是Variant类型,存在类型不匹配风险。
  • 隐藏隐患2:后续条件判断If WS.Cells(OTr.Row, OTc.Column + 2) = "a" And "b" And "c" Then语法完全错误,VBA不支持连续等值判断的简写,且你此处逻辑应该为「或」而非「且」。
修复后的完整代码
Private Sub InputCMBT_Click()
    ' 每个变量单独声明类型
    Dim OTr As Range, OTc As Range
    Dim OTr2 As Range, OTc2 As Range
    Dim WS As Worksheet, PCMB As Variant
    Set WS = Worksheets("OT")
    
    ' 匹配员工名称,增加未找到判断
    Set OTr = WS.Range("a3:a36").Find(Employeecm.Text, lookat:=xlWhole, SearchOrder:=xlByRows)
    If OTr Is Nothing Then
        MsgBox "未找到匹配的员工名称:" & Employeecm.Text, vbExclamation
        Exit Sub
    End If
    MsgBox OTr.Row
    
    ' 匹配日期,增加未找到判断
    Set OTc = WS.Range("c2:dc2").Find(DateworkTB, lookat:=xlWhole, SearchOrder:=xlByColumns)
    If OTc Is Nothing Then
        MsgBox "未找到匹配的日期:" & DateworkTB, vbExclamation
        ' 此处如果是日期匹配失败,可确认目标单元格格式是否和DateworkTB格式一致
        Exit Sub
    End If
    MsgBox OTc.Column
    
    ' 赋值逻辑
    If WS.Cells(OTr.Row, OTc.Column) = "" Then
        WS.Cells(OTr.Row, OTc.Column) = OvertimeTB.Value
        WS.Cells(OTr.Row, OTc.Column + 2) = ShiftCBB.Text
    Else
        WS.Cells(OTr.Row, OTc.Column).Clear
        WS.Cells(OTr.Row, OTc.Column + 2).Clear
        WS.Cells(OTr.Row, OTc.Column) = OvertimeTB.Value
        WS.Cells(OTr.Row, OTc.Column + 2) = ShiftCBB.Text
    End If
    
    ' 修复条件判断语法和逻辑
    Select Case WS.Cells(OTr.Row, OTc.Column + 2).Value
        Case "a", "b", "c"
            WS.Cells(OTr.Row, OTc.Column + 1) = 7
        Case "M", "N"
            WS.Cells(OTr.Row, OTc.Column + 1) = 10.5
        Case Else
            WS.Cells(OTr.Row, OTc.Column + 1) = 8
    End Select
End Sub
关键修改说明
  1. 修正了变量声明规则,每个变量明确指定类型,避免隐式Variant带来的未知错误
  2. 所有Find方法执行后都增加了Is Nothing的判断,匹配失败直接弹出提示终止流程,不会触发91报错
  3. 把错误的多条件判断改成了Select Case写法,逻辑更清晰也不会出现语法错误
  4. 针对日期匹配失败的场景,可以根据弹出的提示确认DateworkTB的值和目标区域C2:DC2的单元格格式是否一致,日期格式不匹配是Find失败的常见原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:07