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

VBA类模块调用字典出现运行时错误91及编译错误求助

解决VBA类模块中Scripting.Dictionary的运行时错误91问题

咱们一步步拆解你的问题,你遇到的错误主要来自两个地方:类模块里对象未正确初始化,以及主模块里的语法错误。

一、类模块的核心问题修正

你的类模块有两个关键错误:

  • 事件过程名拼写错误:class_initalize少了一个字母i,VBA的初始化事件必须严格写成Class_Initialize(注意大小写和完整拼写),否则这个过程根本不会被触发。
  • Dictionary对象未实例化:你声明了subjectData As Scripting.Dictionary,但没有用Set语句创建这个对象的实例,直接用With subjectData会因为对象是Nothing而抛出错误91。

修正后的类模块代码:

' 若未引用Microsoft Scripting Runtime,可改用CreateObject方式实例化
Public subjectData As Scripting.Dictionary

Private Sub Class_Initialize()
    ' 先实例化Dictionary对象
    Set subjectData = New Scripting.Dictionary
    ' 再添加预设键值对
    With subjectData
        .Add "name", ""
        .Add "inn", ""
        .Add "ogrn", ""
        .Add "address", ""
    End With
End Sub

补充:如果你的项目没有提前引用Microsoft Scripting Runtime,可以把实例化语句改成Set subjectData = CreateObject("Scripting.Dictionary"),这样无需手动添加引用也能正常运行。

二、主模块的错误修正

你的主模块有两个小问题需要调整:

  • 键名未加引号:client.subjectData.Item(name)里的name是字符串类型的键,必须用双引号括起来写成"name",否则VBA会把name当成未定义的变量,引发“变量未定义”的编译错误。
  • 错误的实例化语句:Set client = LegalSubject是错误语法,正确实例化类的方式是Set client = New LegalSubject(不过Dim client As New LegalSubject已经会在第一次使用时自动实例化类,这个语句可以省略,但分开写代码逻辑更清晰)。

修正后的主模块代码:

Option Explicit

Private Sub Document_New()
    Dim client As LegalSubject
    ' 显式实例化类对象
    Set client = New LegalSubject
    ' 正确访问Dictionary的键(注意键名加双引号)
    client.subjectData.Item("name") = "Microsoft corporation"
    ' 也可以简化写成:client.subjectData("name") = "Microsoft corporation"
End Sub

额外优化建议

为了让类的封装性更好,你可以把subjectData声明为Private,然后通过类的属性来访问这些键,而不是直接暴露Dictionary对象。比如在类模块里添加:

Private subjectData As Scripting.Dictionary

' 提供name属性的读写接口
Public Property Get Name() As String
    Name = subjectData("name")
End Property

Public Property Let Name(ByVal newValue As String)
    subjectData("name") = newValue
End Property

' 同理可添加Inn、Ogrn、Address的属性

这样主模块里就可以直接写client.Name = "Microsoft corporation",代码更易读,也更符合面向对象的封装原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:27:20