我有一个代表一个人的类
人.cls
Option Explicit
'the person class
Public FirstName As String
Public LastName As String
Run Code Online (Sandbox Code Playgroud)
和另一个类来保存人员列表
PersonList.cls
Dim person_list As Collection
Run Code Online (Sandbox Code Playgroud)
我有一个模块
测试人员.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
Run Code Online (Sandbox Code Playgroud)
当我运行该模块时,出现编译错误:“找不到方法或数据成员。”
我尝试addPerson为 PersonList创建一个子例程,但我不知道如何使其工作。
编辑:
好的,这是我现在所拥有的:
人.cls
Option Explicit
Public FirstName As String
Public LastName As String
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
测试人员.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
Run Code Online (Sandbox Code Playgroud)
而且……它有效!
但是,persons_list.addPerson(p1)给出“ Run-time error: 438: Object doesn't support this property or method.”,我想我不了解调用方法的 VBA 语法。
我用你给我们的名字重新创建了你的项目。得到编译器错误的行就在这里。
将 p1 调暗为新 clsPerson
这是因为您的类是命名的Person而不是clsPerson. 删除前缀应该可以修复编译器错误。
但是……
你很快就会遇到下一个问题。
Dim person_list 作为集合
这将私下声明人员列表。您需要通过公开它来公开它以使用它。但还有更多的东西。您还需要向Class_Initialize您的类添加一个例程,以便您实际上拥有一个可以使用的集合对象。
Private Sub Class_Initialize()
Set person_list = New Collection
End Sub
Run Code Online (Sandbox Code Playgroud)
我刚刚注意到您希望将该集合保持为私有,因此除了类初始值设定项之外,您还需要添加此方法。
Public Sub Add(value As Person)
person_list.Add value
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |