【问题标题】:Can You Add a Class to a Class Property VBA您可以将类添加到类属性 VBA
【发布时间】:2017-02-04 16:09:47
【问题描述】:

所以我有两个 Class 模块,ClassA 和 ClassB,以及一个模块中的子模块,我在其中尝试将 Class B 中的对象添加到 ClassA 中对象的属性中。

According to the VBE Glossary,类是对象,属性set语句可以添加对象类型,所以看起来应该可以。但是,当我运行测试子时,我得到一个“对象变量或未设置块变量”错误

子:

Sub test()

Dim Class_A_Object As ClassA
Dim Class_B_Object As ClassB

Set Class_A_Object = New ClassA
Set Class_B_Object = New ClassB

Class_B_Object.Class_B_Property = 42
Class_A_Object.Class_A_Property = Class_B_Object

End Sub

A 类:

Private a_Class_A_Property As Object

Public Property Set Class_A_Property(pClass_A_Property As Object)
    a_ClassA_Property = pClass_A_Property
End Property

Public Property Get Class_A_Property() As Object
    Class_A_Property = a_Class_A_Property
End Property

B类:

Private b_Class_B_Property As Integer

Public Property Let Class_B_Property(pClass_B_Property As Integer)
    b_Class_B_Property = pClass_B_Property
End Property

Public Property Get Class_B_Property() As Integer
    Class_B_Property = b_Class_B_Property
End Property

【问题讨论】:

  • Set Class_A_Object.Class_A_Property = Class_B_Object
  • 谢谢,我对示例进行了更改以及其他一些更改,以获得正常运行的版本。再次,非常感谢!
  • 就像注释一样,您还可以将集合设置为类的属性,然后将其他类对象放入该集合中以创建层次结构。
  • 请不要将您的问题变成答案。如果您愿意,请将您为解决问题所做的工作添加为答案

标签: excel class object class-properties vba


【解决方案1】:

这是我进行必要更改后的代码,以便能够将类对象添加到我的属性中。除了提出更改 pinkfloydx33 的建议外,我还在打算保存对象的属性语句中添加了“Set”关键字,并将所述属性的数据类型更改为要保存的类的名称。

'The Sub:
Sub test()

Dim Class_A_Object As ClassA
Dim Class_B_Object As ClassB

Set Class_A_Object = New ClassA
Set Class_B_Object = New ClassB

Class_B_Object.Class_B_Property = 42
Set Class_A_Object.Class_A_Property = Class_B_Object

End Sub

'ClassA:
Private a_Class_A_Property As Class B

Public Property Set Class_A_Property(pClass_A_Property As ClassB)
    Set a_ClassA_Property = pClass_A_Property
End Property

Public Property Get Class_A_Property() As ClassB
    Set Class_A_Property = a_Class_A_Property
End Property

'Class B:
Private b_Class_B_Property As Integer

Public Property Let Class_B_Property(pClass_B_Property As Integer)
    b_Class_B_Property = pClass_B_Property
End Property

Public Property Get Class_B_Property() As Integer
    Class_B_Property = b_Class_B_Property
End Property

【讨论】: