我在过去几个月里一直在学习如何在VBA中使用课程,但是在找出将多个课程项目分组在一起的正确方法时遇到了问题,因此我可以对它们进行迭代。
例如,我有一个名为clsPersons的类,其中包含Name,Gender,DOB和Age(Today - DOB)等属性。如果我只想添加一个人,我会做以下事情:
Dim Person As New clsPersons
Person.Name = "Phillip"
Person.Gener = "Male"
Person.DOB = "#1/1/2000"
' Person.Age would be automatically set by adding Person.DOB
但是,如果我有一个包含所有人的电子表格,并决定创建一个报告,每个人的名字都以字母“#34; P"”开头,那么我首先需要某种对象来使用(集合,字典等)和类似的东西来填充它:
Dim Person As New clsPersons
Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).Row(xlUp).End
For i = 1 To lastRow
If Worksheet.Function.Left(Sheet1.Cells(i, 1), 1) = "P" Then
Person.Name = Sheet1.Cells(i, 1)
Person.Gener = Sheet1.Cells(i, 2)
Person.DOB = Sheet1.Cells(i, 3)
End If
Next i
填充之后,我希望能够遍历它以将项目拉出来,所以像这样:
For Each Person In objPeople
Sheet2.Cells(i, 1) = Person.Name
Sheet2.Cells(i, 1) = Person.Gender
Sheet2.Cells(i, 1) = Person.Age
Next Person
希望我所概述的内容有道理。简单地说,我只是在寻找将人们组合成一个对象的正确方法,我可以在以后的程序中重复这个对象。
答案 0 :(得分:6)
将您的类的多个实例放入Collection中就可以了。
我可能会命名你的班级clsPerson
,因为每个实例只代表一个人。
Dim col As New Collection
Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
With Sheet1.Rows(i)
If Left(.Cells(1), 1) = "P" Then
col.Add Person(.Cells(1), .Cells(2), .Cells(3))
End If
End with
Next i
人员职能:
Function Person(nm, gender, dob) as clsPerson
Dim p As New clsPerson
With p
.Name = nm
.Gender = gender
.DOB = dob
End With
Set Person = p
End Function