我有一个代表一个人的类
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)
给出“运行时错误:438:对象不支持此属性或方法。
”我想我不知道不了解调用方法的 VBA 语法。
最佳答案
我用您给我们提供的名称重新创建了您的项目。 出现编译器错误的行就在这里。
Dim p1 As New clsPerson
这是因为您的类名为 Person
而不是 clsPerson
。
删除前缀应该可以修复编译器错误。
但是...
您很快就会遇到下一个问题。
Dim person_list As Collection
这声明了私有(private)的人员列表。您需要通过将其公开来公开它才能使用它。但还不止于此。您还需要向您的类添加一个 Class_Initialize
例程,以便您实际上拥有一个可以使用的集合对象。
Private Sub Class_Initialize()
Set person_list = New Collection
End Sub
<小时/>
我刚刚注意到您希望将该集合保持私有(private),因此除了类初始值设定项之外,您还需要添加此方法。
Public Sub Add(value As Person)
person_list.Add value
End Sub
关于vba - 在 VBA 中创建带有集合的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327803/