vba - 在 VBA 中创建带有集合的类

标签 vba excel

我有一个代表一个人的类

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/

相关文章:

math - 将 10 个周期的曲线折叠为 4 个周期

vba - 行 d = Worksheets(A(i)).Cells(B(j), l) + d 处出现错误 1004

c# - 如何使用 C# Windows 窗体读取 Excel 中的多个单元格

vba - Excel VBA VLookup - 错误 13 - "Type Mismatch"

c# - 使用 EPPlus 将列或单元格设置为只读

excel - 在特定单元格更改时捕获数据

c# - 错误:Make sure that it does not include invalid characters or punctuation and that it is not too long

vba - 如何使用 VSTO 在 PowerPoint 文本框中设置左边距

php - 使用 PHP 使用 mysql 数据库中的数据生成带有图表的 Excel 文件

vb.net - 将 Excel 文件附加到完成的 Visual Basic 项目