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

VBA查找替换偏移值代码报错:运行时错误91问题求助

解决VBA运行时错误91:对象变量或With块变量未设置

错误根源

当Range.Find在目标工作表B列找不到匹配值时,会返回Nothing,此时直接执行fnd.Offset(0, 31).Value = ...就会触发错误91——因为你在操作一个未初始化的对象。

另外你的代码还有几个冗余/无效问题:

  • Set Search = .Range("A5")只指定了单个单元格,For Each cel In Search的循环完全没必要,应该改成遍历A列需要处理的连续数据区域
  • 定义了wsMaster和fndFirst变量,但全程未使用,属于冗余代码

修复后的代码

Sub Replace_List()
    Dim cel As Range
    Dim fnd As Range
    Dim wbToCheck As Workbook
    Dim wsInput As Worksheet
    
    ' 提前定义工作表对象,避免重复引用
    Set wsInput = ThisWorkbook.Sheets("RAG Data Input")
    ' 先尝试获取目标工作簿,避免因文件未打开报错
    On Error Resume Next
    Set wbToCheck = Workbooks("Test CP6 Y5 New Kent  Sussex Possession Minutes - New Version")
    On Error GoTo 0
    
    ' 检查目标工作簿是否存在
    If wbToCheck Is Nothing Then
        MsgBox "目标工作簿未打开,请先打开对应文件!", vbExclamation
        Exit Sub
    End If
    
    Application.ScreenUpdating = False

    ' 遍历A5到A列最后一行有数据的单元格
    For Each cel In wsInput.Range("A5", wsInput.Cells(wsInput.Rows.Count, "A").End(xlUp))
        ' 跳过空单元格,减少无效查询
        If cel.Value <> "" Then
            Set fnd = wbToCheck.Worksheets("Sheet1").Range("B:B").Find(What:=cel.Value, LookAt:=xlWhole)
            ' 核心修复:先判断是否找到匹配项,再执行赋值
            If Not fnd Is Nothing Then
                fnd.Offset(0, 31).Value = wsInput.Range("O1980").Value
            End If
        End If
    Next

    Application.ScreenUpdating = True
    MsgBox "替换完成", vbInformation, "操作结束"
End Sub

关键修改点

  • 新增目标工作簿存在性检查:避免因目标文件未打开导致的额外报错
  • 修正遍历范围:改成从A5到A列最后一行有数据的单元格,让循环真正发挥作用
  • 新增空单元格跳过逻辑:避免对空单元格执行无效查询
  • 核心错误修复:调用fnd.Offset前,先通过If Not fnd Is Nothing Then判断是否找到匹配项,仅在找到时执行赋值操作,彻底规避错误91

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:17