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)