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

求和A、B两行至C列时触发"对象变量未设置"错误,类模块代码报错求助

解决VBA中"object variable or with block variable not set"错误及类模块sum方法报错问题

我来帮你一步步排查和解决这两个问题:

首先,分析核心错误原因

你遇到的object variable or with block variable not set(运行时错误91),本质是类里的对象变量c没有被赋值指向一个实际的Excel单元格区域(Range对象),就直接在sum方法里调用它的Offset属性了。另外你的sum方法代码里还有个明显的拼写乱码错误,这也会导致语法报错。

第一步:修正类模块clscustomer的代码

先把类里的错误语法和逻辑漏洞补上,这里是修正后的代码:

Public z As Integer
Public rng As Range
Public c As Range

Public Sub sum(x As Integer, y As Integer)
    ' 先做安全检查:如果c还没赋值,直接提示并退出
    If c Is Nothing Then
        MsgBox "请先为c对象指定一个有效的单元格!", vbExclamation
        Exit Sub
    End If
    
    z = x + y ' 加法逻辑本身没问题,只要x/y是有效整数
    c.Offset(0, 2).Value = z ' 删掉了原来的乱码错误
End Sub

第二步:确保调用类时正确实例化并赋值对象变量

光改类还不够,你在调用这个类的代码里,必须用Set关键字给c赋值一个真实的Range对象,同时要先实例化类本身。比如在标准模块里写调用代码:

Sub CalculateAndStoreSum()
    Dim cust As clscustomer
    ' 必须先实例化类对象,不能直接用
    Set cust = New clscustomer
    
    ' 给c赋值为你要操作的单元格,比如A1(根据你的实际需求改)
    Set cust.c = ThisWorkbook.Sheets("Sheet1").Range("A1")
    
    ' 传入A行和B行的数值,比如A1和B1的值,调用sum方法
    cust.sum _
        x:=ThisWorkbook.Sheets("Sheet1").Range("A1").Value, _
        y:=ThisWorkbook.Sheets("Sheet1").Range("B1").Value
End Sub

关键注意点

  1. 对象变量必须用Set赋值:普通变量用=,但Range、类对象这类引用类型,必须用Set关键字赋值,这是VBA的核心规则。
  2. 避免空对象调用:在使用任何对象变量(比如c)之前,一定要确认它不是Nothing(也就是已经指向了实际对象),否则就会触发错误91。
  3. 语法错误要仔细检查:你原来代码里的\error hereva是无效的语法,属于手误,必须删掉或者改成正确的注释(用'开头)。

额外优化建议

为了让代码更健壮和易读,你可以:

  • 给变量起更有意义的名字:比如把z改成sumResult,c改成sourceCell,别人(包括未来的你)看代码时能瞬间明白用途。
  • 给类添加初始化事件:在类模块里加Class_Initialize事件,在实例化类时可以做一些默认配置,比如:
Private Sub Class_Initialize()
    ' 可以默认指定c为Sheet1的A1,或者留空让外部赋值
    ' Set c = ThisWorkbook.Sheets("Sheet1").Range("A1")
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:54:15