使用集合作为VBA中对象的属性

时间:2014-04-09 23:21:22

标签: vba excel-vba excel

将类模块“Class1Test”作为

Private pGreetings As Collection

Public Property Get Greetings() As Collection
Greetings = pGreetings
End Property
Public Property Let Greetings(Value As Collection)
pGreetings = Value
End Property

如果我运行子

Dim MyPhrases As Class1Test
Public Sub Test()
Set MyPhrases = New Class1Test
MyPhrases.Greetings.Add "Have a nice day"
End Sub

我收到编译错误“Argument not optional”

为什么我不能将字符串添加到集合myphrases.greetings中?请原谅新手问题。刚刚学习VBA。

1 个答案:

答案 0 :(得分:3)

有些不对劲。

Collection是一个对象,因此在分配时必须使用Set关键字。同样在Let程序中,为了保证命名约定的一致性,我会使用lGreetings代替Value,尽管这不应该真正重要。

Private pGreetings As Collection

Public Property Get Greetings() As Collection
    Set Greetings = pGreetings
End Property
Public Property Let Greetings(lGreetings As Collection)
    Set pGreetings = lGreetings
End Property

这仍然会引发91错误(对象变量或未设置块),因为您尚未实例化集合对象。可能你应该这样做的方法是在类模块的Initialize例程中。

Private Sub Class_Initialize()
    Set pGreetings = New Collection
End Sub