我有一个代表一个人的课程
Person.cls
Option Explicit
'the person class
Public FirstName As String
Public LastName As String
和另一个持有人员列表的课程
PersonList.cls
Dim person_list As Collection
我有一个模块
testPersons.bas
Public Sub testPersons()
Dim p1 As New clsPerson
p1.FirstName = "Rita"
p1.LastName = "Smith"
Dim persons2 As New PersonList
persons2.person_list.Add p1
End Sub
当我运行模块时,我收到编译错误:“找不到方法或数据成员。”
我尝试为PersonList创建子例程addPerson
,但我无法弄清楚如何使其工作。
修改
好的,这就是我现在所拥有的:
Person.cls
Option Explicit
Public FirstName As String
Public LastName As String
PersonList.cls
Public person_list As Collection
Private Sub Class_Initialize()
Set person_list = New Collection
End Sub
Public Sub addPerson(this_person As Person)
person_list.Add this_person
End Sub
testPersons.bas
Public Sub testPersons()
Dim p1 As New Person
p1.FirstName = "Rita"
p1.LastName = "Smith"
Dim persons_list As New PersonList
persons_list.addPerson p1
End Sub
并且...... 它有效!
但是,persons_list.addPerson(p1)
给出“Run-time error: 438: Object doesn't support this property or method.
”我想我不理解调用方法的VBA语法。
答案 0 :(得分:4)
我用您给我们的名字重新创建了您的项目。 获取编译器错误的行就在这里。
Dim p1 As new clsPerson
这是因为您的班级名为Person
,而不是clsPerson
。
删除前缀应修复编译器错误。
但的 ...
你很快就会遇到下一个问题。
Dim person_list As Collection
私下声明人名单。您需要通过公开使用它来公开它。但是还有更多的东西。您还需要在类中添加Class_Initialize
例程,以便实际拥有可以使用的集合对象。
Private Sub Class_Initialize()
Set person_list = New Collection
End Sub
我刚注意到你想保持该集合的私密性,所以除了类初始化程序之外,你还需要添加这个方法。
Public Sub Add(value As Person)
person_list.Add value
End Sub