将集合添加为另一个集合中的项目 - 类 - Excel VBA

时间:2017-03-29 17:52:25

标签: excel vba excel-vba

我目前正在尝试构建一个项目集合,其中集合可能包含另一个集合作为项目。

我已经设置了两个集合并为每个集合创建了一个类模块: col1 - (链接到Class1);和col2 - (链接到Class2)

以下是我的课程模块:

的Class1:

Option Explicit
Private pTestC1A As String
Private pTestC1B As Collection

Public Property Let TestC1A(Value As String)
pTestC1A = Value
End Property

Public Property Get TestC1A() As String
TestC1A = pTestC1A
End Property

Property Set TestC1B(col2 As Collection)
Set pTestC1B = col2
End Property

Property Get TestC1BElements(v As Integer) As String
    TestC1B = pTestC1B(v)
End Property

等级2:

Option Explicit
Private pTestC2A  As String

Public Property Let TestC2A(Value As String)
pTestC2A = Value
End Property

Public Property Get TestC2A() As String
TestC2A = pTestC2A
End Property

以下是我的模块代码

Sub Test()

Set col1 = New Collection
Set col2 = New Collection

Set cV = New Class1
cV.TestC1A = "First Collection"

Set aV = New Class2
aV.TestC2A = "Second Collection"
sKey1 = CStr(aV.TestC2A)
col2.Add aV, sKey1

Set cV.TestC1B = col2

sKey2 = CStr(cV.TestC1A)
col1.Add cV, sKey2
    If Err.Number = 457 Then
      MsgBox "Error Occured"
    ElseIf Err.Number <> 0 Then Stop
    End If
    Err.Clear

Msgbox col1(1).TestC1A ' works fine
Msgbox col2(1).TestC2A ' works file  
MsgBox col1(1).TestC1B(1).TestC2A ' does not work - 450 run-time error

End Sub

根据上面的代码,如果我分别引用每个集合,我就能成功获取项目的值,但是我得到“错误的参数数量或无效的属性赋值”如果我尝试以嵌套方式获取项值,则运行时错误。

如果有人可以帮助指出我出错的地方,并且可能会对类模块处理属性集的方式有所了解,那将不胜感激。获取集合的参数。

1 个答案:

答案 0 :(得分:3)

您在Get TestC1B课程模块中缺少Class1媒体资源:

Property Get TestC1B() As Collection
    Set TestC1B = pTestC1B
End Property

一旦显示,您就可以拨打col1(1).TestC1B(1)并访问.TestC2A属性

背景

通过在类中使用私有变量并使用属性为您的私有变量提供读/写访问权,您做了正确的事情。你可以通过这种方式获得更多控制权。

属性Get提供对该属性的读访问权(以及广义上讲,底层私有变量)。例如,您可以使用Range.Address返回(读取)范围对象的地址。

属性LetSet授予对该属性的写入权限。对Set使用对象。例如,Range.Value = 1新值写入范围。

考虑一下,Range.Address = $A$1。由于范围的地址没有Property Set,因此不会更改范围的地址。它将Range.Address部分视为Get来电,并评估此示例中$A$1 = $A$1返回TRUE之类的内容