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

Excel VBA设置Range时触发运行时错误'91':对象变量未设置

问题排查与修复方案

核心错误原因

运行时错误'91'的直接原因是对象变量赋值未使用Set关键字。在VBA中,Range这类对象类型的变量必须通过Set来完成赋值,直接用=会导致对象引用未初始化,触发该错误。

代码修复点

  • 补全对象赋值的Set关键字:原代码中endofSheet = ws.Range(...)需改为Set endofSheet = ws.Range(...)
  • 修正区域范围逻辑:原代码用ws.Range("C7").End(xlUp)会向上查找空单元格,实际应从C列最后一行向上定位最后一个填充单元格,同时判断该行号是否≥7,避免生成无效区域
  • 修正变量声明:VBA中Dim cell, endofSheet As Range仅会将endofSheet声明为Range类型,cell默认是Variant,需明确声明为As Range
  • 避免工作表命名异常:ws.Name = ws.Range("E2").Value可能因E2为空、包含非法字符或名称重复报错,建议增加基础判断

修复后的完整代码

Sub prepReport()
    Dim ws As Worksheet
    Dim cell As Range, endofSheet As Range
    Dim lastRow As Long
    
    For Each ws In Worksheets
        ' 处理工作表命名(增加基础合法性判断)
        If ws.Range("E2").Value <> "" Then
            On Error Resume Next
            ws.Name = ws.Range("E2").Value
            On Error GoTo 0
        End If
        
        ' 获取C列最后一个填充单元格的行号
        lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
        
        ' 确保最后一行≥7,避免生成无效区域
        If lastRow >= 7 Then
            Set endofSheet = ws.Range("C7:C" & lastRow)
            
            ' 遍历区域并设置整行填充色
            For Each cell In endofSheet
                cell.EntireRow.Interior.Color = cell.Interior.Color
            Next cell
        End If
    Next ws
End Sub

额外说明

  • 若C7到C列末尾之间存在空单元格,End(xlUp)仍会跳过空单元格找到最后一个非空行,符合你“最后一个已填充单元格”的需求
  • 增加On Error Resume Next处理命名异常,避免因名称问题导致整个宏中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:32:22