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
相关产品推荐
相关产品推荐

