You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBA运行时错误'91':对象变量或With块变量未设置求助

解决Run-time error '91':对象未设置的问题

嘿,这个Run-time error '91'太常见了——你已经声明了wbws这两个对象变量,但完全没给它们赋值指向实际的工作簿/工作表,VBA根本不知道要操作哪张表,可不就报错了嘛!

核心问题分析

你的代码里只做了变量声明:

Dim wb As Workbook
Dim ws As Worksheet

但没有用Set语句把它们绑定到具体的文件或工作表上。打个比方,你告诉别人“我要拿杯子喝水”,但没说拿哪个杯子,别人肯定懵圈。

另外,你的循环还有个潜在大坑:如果所有行的日期都满足<= DateAdd("d",14,Now())的条件,循环会一直往下读空单元格,不仅可能触发新的错误,还会无限运行。

修改后的完整代码

我帮你修正了对象绑定、循环边界,还优化了行索引逻辑(避免原代码里容易搞混的count+1):

Sub Button1_Click()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim count As Integer
    Dim lastRow As Long ' 存储数据最后一行的行号,防止无限循环
    
    ' 关键步骤:给对象变量赋值,明确指定要操作的工作簿和工作表
    Set wb = ThisWorkbook ' 指当前运行这段代码的工作簿
    Set ws = wb.Worksheets("Sheet1") ' 替换成你实际的工作表名称,比如"数据表"
    
    count = 0
    ' 获取A列最后一行有数据的行号
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Do While (2 + count) <= lastRow ' 先判断是否超出数据范围
        Dim currentIssueDate As Date
        ' 临时捕获日期转换错误,避免遇到非日期单元格崩溃
        On Error Resume Next
        currentIssueDate = CDate(ws.Cells(2 + count, 1).Value)
        On Error GoTo 0
        
        ' 仅当日期有效且满足条件时执行着色逻辑
        If Not IsEmpty(currentIssueDate) And currentIssueDate <= CDate(DateAdd("d", 14, Now())) Then
            ' 给Issue Date列对应行着色
            ws.Range("A" & (2 + count)).Interior.Color = RGB(250, 50, 50)
            
            ' 对比Issue Date和Maturity列的值
            If CDate(ws.Cells(2 + count, 1).Value) <> CDate(ws.Cells(2 + count, 2).Value) Then
                If ws.Range("C" & (2 + count)).Value <> "In Sub" Then
                    ws.Range("C" & (2 + count)).Interior.Color = RGB(250, 50, 50)
                Else
                    ws.Range("C" & (2 + count)).Interior.ColorIndex = 44
                End If
            End If
        End If
        
        count = count + 1
    Loop
End Sub

重要修改点说明

  • 对象绑定:通过Set wb = ThisWorkbookSet ws = wb.Worksheets("Sheet1")明确告诉VBA要操作哪个文件和工作表,一定要把"Sheet1"改成你实际的工作表名称!
  • 循环边界控制:用lastRow获取数据最后一行,避免循环无限运行或读取空单元格
  • 行索引优化:直接用2 + count对应数据行(你的数据从第2行开始),比原代码的count+1更直观,不容易出错
  • 错误防护:添加了日期转换的错误捕获,防止遇到非日期格式的单元格导致程序崩溃

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

火山引擎 最新活动