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

Excel VBA获取客户ID所在行号失败,出现91错误求助

Excel VBA 运行时错误91(Find方法失败)解决方法

问题分析

你的代码触发91错误的核心原因是:当Find方法找不到匹配的客户ID时,FILA对象会变成Nothing,此时直接调用FILA.Row就会抛出「对象变量或With块变量未设置」的错误。除此之外还有几个潜在问题:

  • 未指定Range所属工作表,默认操作当前激活表,容易引发逻辑错误
  • E列赋值时用了小写的line,和定义的Linea大小写不一致,会导致变量未定义报错
  • valor_buscado直接取控件对象而非其Value属性,可能导致类型不匹配

修正后的代码

Private Sub Modify_Click()
    Dim FILA As Range
    Dim codigo As Integer
    Dim Linea As Long
    Dim wsClientes As Worksheet
    
    ' 绑定目标工作表,避免激活表切换导致的错误
    Set wsClientes = ThisWorkbook.Sheets("Clientes")
    
    ' 获取输入的客户ID
    codigo = Me.Codigo_txt.Value
    ' 执行查找,明确指定查找参数
    Set FILA = wsClientes.Range("A:A").Find(What:=codigo, LookAt:=xlWhole, MatchCase:=False)
    
    ' 先判断是否找到匹配项,再执行更新
    If Not FILA Is Nothing Then
        Linea = FILA.Row
        ' 所有单元格操作都指定到目标工作表
        wsClientes.Range("B" & Linea).Value = Me.txt_name.Value
        wsClientes.Range("C" & Linea).Value = Me.txt_surname.Value
        wsClientes.Range("D" & Linea).Value = Me.txt_ID.Value
        wsClientes.Range("E" & Linea).Value = Me.txt_telf.Value ' 修正变量大小写错误
        wsClientes.Range("F" & Linea).Value = Me.txt_adress.Value
        wsClientes.Range("G" & Linea).Value = Me.txt_CP.Value
        wsClientes.Range("H" & Linea).Value = Me.txt_town.Value
        wsClientes.Range("I" & Linea).Value = Me.txt_email.Value
        MsgBox "客户信息更新完成!"
    Else
        ' 未找到匹配ID时提示用户
        MsgBox "未找到ID为 " & codigo & " 的客户,请检查输入!"
    End If
End Sub

关键优化点

  1. 增加工作表对象绑定,确保所有操作都针对「Clientes」工作表,不受当前激活表影响
  2. 加入If Not FILA Is Nothing Then判断,彻底避免找不到匹配项时的91错误
  3. 修正变量大小写不一致的问题,避免编译错误
  4. 明确Find方法的参数,代码可读性更强
  5. 增加操作结果提示,提升交互体验

内容的提问来源于stack exchange,提问作者Itziar Borrás

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:07:14