VBA For循环功能正常但提示运行时错误91如何修复?
错误原因
- VBA的
Find方法未匹配到目标值时会返回Nothing空对象,你当前代码直接链式调用.Offset(0,1).Value,未做空对象校验,就会抛出「运行时错误'91':对象变量或With块变量未设置」。 - 你感知到功能正常是因为大部分
flavorname都能在products表A列匹配到,只有少数未匹配的场景才会触发报错。
修复方案
新增空对象校验逻辑,同时显式指定Find参数避免匹配异常,修改后的代码如下:
Private Sub applybutton_Click() variablesheet = "Cl" & box_id.Value maxrow = Sheets("Cl1").Range("A7").Value Dim i As Long ' 新增声明,接收Find返回的单元格对象 Dim findRng As Range For i = 1 To maxrow If Sheets(variablesheet).Cells(i + 19, 1).Value = 0 Then flavorname = Sheets(variablesheet).Cells(i + 19, 2).Value ' 显式指定Find参数,避免继承上次手动查找的参数导致匹配异常 Set findRng = Sheets("products").Range("A:A").Find(flavorname, LookIn:=xlValues, LookAt:=xlWhole) ' 非空校验,只有找到匹配值才执行后续操作 If Not findRng Is Nothing Then flavor_id = findRng.Offset(0, 1).Value Sheets(variablesheet).Cells(i + 19, 4).Value = Me.Controls(flavor_id).Value Else ' 可选:找不到匹配时的处理逻辑,比如给单元格标红方便排查无匹配的flavorname Sheets(variablesheet).Cells(i + 19, 4).Interior.Color = vbRed End If ' 清空对象变量,避免上次结果干扰下一轮循环 Set findRng = Nothing End If Next i End Sub
可选参数说明
你可以根据实际匹配需求调整Find的参数:
LookAt:=xlPart:模糊匹配,只要单元格包含目标值就算匹配;xlWhole:完全匹配,单元格内容和目标值完全一致才算匹配LookIn:=xlFormulas:按单元格公式匹配;xlValues:按单元格显示的实际值匹配
内容的提问来源于stack exchange,提问作者Gustavo Rubinato
相关产品推荐
相关产品推荐

