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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:09:03