我是OOP的新手,所以大概有一个明显的解释为什么它不起作用。我试图将对象添加到VBA中的集合。我的课程模块是这样的:
Option Explicit
'the person class
Public FirstName As String
Public LastName As String
Property Get FullName() As String
'return the person's full name
FullName = FirstName & " " & LastName
End Property
我的代码是这样的:
Sub myProg()
'create a new collection!
Dim Persons As New Collection
Dim p1 As New clsPerson
'give them names in "Loop"
p1.FirstName = "Rita"
p1.LastName = "Smith"
Persons.Add p1
p1.FirstName = "Sue"
p1.LastName = "Jones"
Persons.Add p1
p1.FirstName = "Bob"
p1.LastName = "Brown"
Persons.Add p1
'"Loop" end
For Each p1 In Persons
Debug.Print p1.FullName
Next p1
End Sub
它返回3次“鲍勃·布朗”。我希望它返回我输入的3个名字。
p1
是参考变量,它指向clsPerson
使用时创建的单个特定实例New
。
当您将引用变量添加到集合时,您将添加引用本身,而不是副本,这意味着p1
集合中的始终将指向同一clsPerson
实例,该实例将包含您为其分配的最后一个值。
您需要用于New
创建该类的新的独立实例,并将其添加到集合中,例如
Set p1 = New clsPerson
p1.FirstName = "Bob"
p1.LastName = "Brown"
Persons.Add p1
Set p1 = New clsPerson
p1.FirstName = "Sue"
p1.LastName = "Jones"
Persons.Add p1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句