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

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

排查VBA运行时错误'91':对象变量未设置

嘿,我来帮你搞定这个烦人的错误!运行时错误'91'本质就是你声明了对象变量,但没给它分配实际的对象实例——虽然你说脚本功能正常,那大概率是错误出现在某个你没完全贴出来的代码分支里,比如初始化过程或者调用的子过程中。

先拆解可能的问题点:

1. UserForm_Initialize过程里的wb变量未赋值

你只写了Dim wb As Workbook...,但如果后续代码里用到了这个wb对象(比如wb.Sheets("XXX")),却没执行Set语句给它分配具体工作簿,就会直接触发错误91。

修复示例:

Public Sub UserForm_Initialize()
    Dim wb As Workbook
    ' 必须用Set给对象变量赋值,这里用ThisWorkbook指代当前运行代码的工作簿
    Set wb = ThisWorkbook
    ' 如果你要指定其他工作簿,就写:Set wb = Workbooks("你的文件名.xlsm")
    ' 后续用到wb的代码...
End Sub

2. GetCabinet1子过程存在未初始化的对象变量

你没贴这个过程的代码,但它是触发错误的高危区域。如果里面声明了对象类型变量(比如WorksheetRangeChart),却没通过Set语句绑定具体对象,直接调用对象的方法/属性就会报错。

错误示例(会触发91):

Sub GetCabinet1()
    Dim ws As Worksheet
    ' 错误:直接给对象变量赋值,没加Set
    ws = Sheets("CabinetSheet")
    ws.Range("B5").Value = "Test"
End Sub

正确写法:

Sub GetCabinet1()
    Dim ws As Worksheet
    ' 用Set绑定具体工作表对象
    Set ws = ThisWorkbook.Sheets("CabinetSheet")
    ws.Range("B5").Value = "Test"
End Sub

3. 额外优化:避免不必要的Select操作

你的CommandButton1_Click里的rng.Select完全没必要,直接给rng赋值就行。Select方法依赖当前激活的工作表,反而容易引发其他问题,删掉它代码会更稳定:

Public Sub CommandButton1_Click()
    Dim rng As Range
    Set rng = Range("F24:I24")
    ' 删掉rng.Select
    If TextBox1.Text = "" Then
        MsgBox ("Must insert Temperature you dingus!")
    Else
        rng = TextBox1.Text
        Call GetCabinet1
    End If
    Unload Me
End Sub

按照上面的步骤检查补全代码,应该就能彻底消除这个错误啦!

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

火山引擎 最新活动