Reputation: 403
I have no idea how to achieve following code snippet in excel vba. What I want to do is to assign Subject Collections for User object from u.assignSubjects method.
[Class Subject]
Private sName As String
Public Property Get Name() As String
Name = sName
End Property
Public Property Let Name(n As String)
sName = n
End Property
[Class User]
Private sName As String
Private sSubjects As Collection
Public Property Get Name() As String
Name = sName
End Property
Public Property Let Name(n As String)
sName = n
End Property
Public Property Get Subjects() As Collection
Subjects = sSubjects
End Property
Public Property Let Subjects(s As Collection)
sSubjects = s
End Property
Public Sub assignSubjects()
Dim s1 As clsSubject
Dim s2 As clsSubject
Set s1 = New clsSubject
Set s2 = New clsSubject
s1.Name = "English"
s2.Name = "Math"
Set sSubjects = New Collection
sSubjects.Add s1, "subject1"
Set sSubjects = New Collection
sSubjects.Add s2, "subject2"
End Sub
[Implementation]
Sub run()
Dim u As clsUser
Set u = New clsUser
u.assignSubjects
For Each a In u.Subjects
Debug.Print u.Subjects(a).Name
Next
End Sub
Please Help me
Upvotes: 0
Views: 48
Reputation: 61860
Since your sSubjects
is a Collection
object, you must use Set
to assign something to it.
Furthermore you should not create a New Collection
more than once. Instead you could do that with Private Sub Class_Initialize()
.
clsSubject
Private sName As String
Public Property Get Name() As String
Name = sName
End Property
Public Property Let Name(n As String)
sName = n
End Property
clsUser
Private sName As String
Private sSubjects As Collection
Public Property Get Name() As String
Name = sName
End Property
Public Property Let Name(n As String)
sName = n
End Property
Public Property Get Subjects() As Collection
Set Subjects = sSubjects
End Property
Public Property Set Subjects(s As Collection)
Set sSubjects = s
End Property
Private Sub Class_Initialize()
Set Me.Subjects = New Collection
End Sub
Public Sub assignSubjects()
Dim s1 As clsSubject
Dim s2 As clsSubject
Set s1 = New clsSubject
Set s2 = New clsSubject
s1.Name = "English"
s2.Name = "Math"
Me.Subjects.Add s1, "subject1"
Me.Subjects.Add s2, "subject2"
End Sub
Module
Sub run()
Dim u As clsUser
Set u = New clsUser
u.assignSubjects
Dim s As clsSubject
Set s = New clsSubject
s.Name = "German"
u.Subjects.Add s
For Each a In u.Subjects
Debug.Print a.Name
Next
End Sub
Upvotes: 2