This is how I go about doing collections of classes.
CAlpha
CBeta
CMaster
Private pA As CAlpha
Private pB As CBeta
Public Property Set A(a_ As CAlpha)
Set pA = a_
End Property
Public Property Get A() As CAlpha
Set A = pA
End Property
Public Property Set B(b_ As CBeta)
Set pB = b_
End Property
Public Property Get B() As CBeta
Set B = pB
End Property
Private Sub Class_Initialize()
Set pA = New CAlpha
Set pB = New CBeta
End Sub
CMasters
Private m_colMasters As Collection
Public Function Add() As CMaster
Dim clsMaster As CMaster
Set clsMaster = New CMaster
m_colMasters.Add clsMaster, CStr(m_colMasters.Count + 1)
Set Add = m_colMasters(m_colMasters.Count)
End Function
Public Function Master(Index As Variant) As CMaster
On Error Resume Next
Set Master = m_colMasters(Index)
Exit Function
End Function
Public Function Masters() As Collection
Set Masters = m_colMasters
End Function
Private Sub Class_Initialize()
Set m_colMasters = New Collection
End Sub
Test module to demostrate uses
Sub Test()
Dim clsMasters As CMasters
Dim clsMaster As CMaster
Dim clsAlpha As CAlpha
Dim clsBeta As CBeta
Set clsMasters = New CMasters
Set clsMaster = clsMasters.Add
clsMaster.A.Val = "Alpha"
clsMaster.B.Val = "Beta"
Set clsMaster = clsMasters.Add
clsMaster.A.Val = "Gamma"
clsMaster.B.Val = "Delta"
For Each clsMaster In clsMasters.Masters
Debug.Print "A="; clsMaster.A.Val, "B="; clsMaster.B.Val
Next
Set clsAlpha = clsMasters.Master(2).A
Set clsBeta = clsMasters.Master(1).B
Debug.Print "There are "; clsMasters.Masters.Count; " in Masters Collection"
Debug.Print "A="; clsAlpha.Val, "B="; clsBeta.Val
Set clsMasters = Nothing
End Sub
Bookmarks