Vba 基类中的子类集合

Vba 基类中的子类集合,vba,Vba,我要创建以下结构: 我创建了以下代码: 带有命令按钮的用户表单(用于激活代码) 子类 Option Explicit Private subClassCollection As Collection Public Sub addSubItem(subItem As SubClass) Call subClassCollection.Add(subItem, Key:=subItem.itemName) End Sub Private Sub Class_Initialize()

我要创建以下结构:

我创建了以下代码:

带有命令按钮的用户表单(用于激活代码)

子类

Option Explicit

Private subClassCollection As Collection

Public Sub addSubItem(subItem As SubClass)
    Call subClassCollection.Add(subItem, Key:=subItem.itemName)
End Sub

Private Sub Class_Initialize()
    Set subClassCollection = New Collection
End Sub
Option Explicit

Private sItemName As String

Property Get itemName() As String
    itemName = sItemName
End Property

Property Let itemName(name As String)
    sItemName = name
End Property
运行此代码时,在Userform中突出显示的行上出现以下错误“Object不支持此属性或方法”


我认为这个例子很简单。。我遗漏了什么?

在调用子例程/方法时,不应该在参数周围加括号。括号强制VBA尝试并计算表达式
(子项)
(例如),但VBA无法这样做

应运行以下主代码。(不能保证它正在做正确的事情,但至少不会崩溃。)


调用过程等的语法如下:

procedure parm1, parm2, parm3
或(过时版本)

或(使用函数)


baseItem.addSubItem(subItem)
应该是
baseItem.addSubItem subItem
(无法将
subItem
转换为可以在表达式中使用的内容,例如
(subItem)
),所以当我编写baseItem.addSubItem(subItem)时,我实际上尝试转换一些内容?我不熟悉VBA/VB语法。表达式
(baseItem)
也是如此,因此在添加到集合时只需使用对象,即
myCollection.Add baseItem
。您需要将
myCollection
设置为
新集合
。是的,调用子例程的语法是
subname parm1,parm2
。因此,您创建了第一个参数
(子项)
,即涉及
子项的表达式。很抱歉,我在表单初始化中错过了您的
设置myCollection=New Collection
。(我只是在一个普通模块中运行了
CommandButton1\u Click
,并忽略了表单在此之前会运行
UserForm\u Initialize()
代码)因此,代码的这一部分没有问题,只需使用两个括号中的参数即可。
Option Explicit

Public myCollection As Collection

Private Sub CommandButton1_Click()
    Dim subItem As SubClass
    Dim baseItem As BaseClass

    Set baseItem = New BaseClass
    Set subItem = New SubClass

    subItem.itemName = "Something"

    baseItem.addSubItem subItem

    myCollection.Add baseItem
End Sub

Private Sub UserForm_Initialize()
    Set myCollection = New Collection
End Sub
procedure parm1, parm2, parm3
Call procedure(parm1, parm2, parm3)
returnValue = procedure(parm1, parm2, parm3)