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
关键优化点
- 增加工作表对象绑定,确保所有操作都针对「Clientes」工作表,不受当前激活表影响
- 加入
If Not FILA Is Nothing Then判断,彻底避免找不到匹配项时的91错误 - 修正变量大小写不一致的问题,避免编译错误
- 明确
Find方法的参数,代码可读性更强 - 增加操作结果提示,提升交互体验
内容的提问来源于stack exchange,提问作者Itziar Borrás
相关产品推荐
相关产品推荐

