如何将对象集合作为Excel VBA中的其他对象的属性
我不知道如何在Excel VBA中实现以下代码片段。 我想要做的是从u.assignSubjects方法分配用户对象的主题集合。
[课程主题]
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级用户]
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
[执行]
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
请帮帮我
由于您的sSubjects
是一个Collection
对象,因此您必须使用Set
来为其分配一些内容。
此外,您不应该多次创build一个New Collection
。 相反,你可以用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