Class 类方法返回字典错误

Class 类方法返回字典错误,class,vba,Class,Vba,我的类“联系人”有以下字段: Private Name As String Private CurDate As Date Private Dict As Dictionary Private Sub Class_Initialize() Set Dict = New Dictionary End Sub Private Sub Class_Terminate() Set Dict = Nothing End Sub (这是否应该在ConstructorSet Dict=Ne

我的类“联系人”有以下字段:

Private Name As String
Private CurDate As Date
Private Dict As Dictionary

Private Sub Class_Initialize()
    Set Dict = New Dictionary
End Sub
Private Sub Class_Terminate()
    Set Dict = Nothing
End Sub
(这是否应该在Constructor
Set Dict=New Dictionary
?)中,以及字典字段的以下get属性:

Public Property Get Get_Dict() As Dictionary
    Get_Dict = Dict
End Property
现在,在我的代码中,我有:

Dim Contact1 As New Contact
Contact1.Set_Contact x, y, z

Dim TempDic As New Dictionary
Set TempDict = Contact1.Get_Dict
它没有编译:“参数不是可选的”。如果Get_Dict属性中没有参数,怎么可能呢?

应该使用:

Public Property Get Get_Dict() As Dictionary
   Set Get_Dict = Dict
End Property

当我们将引用指定给对象时。

此行
Contact1.Set x,y,z
不能正确。这意味着您在contact类中有一个名为
Set
的公共子类或函数
Set
是VBA关键字,因此不能将其用作过程的名称。在get–dict中,需要使用Set返回dict(因为它是一个对象)。您不需要实例化TempDict(因此删除新的TempDict),因为您是从类中分配的。@mwolfe2您说得对,这只是一个输入错误。@TimWilliams,谢谢!我总是忘记设置对象。但也许你们知道,当我使用对象变量作为类的字段时,是否应该在“Class_Initialize()”中编写“Set Dict=New Dictionary”?或者默认情况下,编译器将以相同的方式初始化类变量?@grozhd-否,编译器不会为对象变量指定默认值:您必须自己这样做<代码>Class_Initialize是一个很好的地方。