对象变量作为对象属性

时间:2015-09-29 12:24:07

标签: vba object

我在一个名为 MyEmployees 的集合中有一系列员工对象。 我想将其中一个对象指定为其他对象的优势。 我在班级 cEmployee

中创建了 pSuperior 属性

以下是该类的Set和Get方法:

Public Property Set Superior(value As Object)
    Set pSuperior = value
End Property

Public Property Get Superior() As Object
    Superior = pSuperior
End Property

Set方法在运行时没有错误:

Set MyEmployees.Item(1).Superior = MyEmployees.Item(2)

但是当我使用

Debug.Print MyEmployees.Item(1).Superior.Name

测试我得到运行时错误91对象变量或未设置块

我的Set Method无效吗?

2 个答案:

答案 0 :(得分:0)

您始终使用Set将对象分配给变量(包括函数和属性的返回值)。因此,Get方法的代码应为:

Public Property Get Superior() As Object
    Set Superior = pSuperior
End Property

答案 1 :(得分:0)

看起来你的Get属性丢失将对象分配设置为返回值。我不确定你还有什么其他的,所以这里有一些示例代码对我有用(除了没有收集)。将Get / Set对象定义为Employees也可能是一种改进。

这是示例类代码:

button(-text => 'Row1', -command => sub {do_something_with('Row 1', @_)});

使用你所描述的类的示例:

Private pSuperior As Employee
Private pName As String
Public Property Get Name() As String
    Name = pName
End Property
Public Property Let Name(Value As String)
    pName = Value
End Property
Public Property Get Superior() As Employee
    Set Superior = pSuperior
End Property
Public Property Set Superior(Value As Employee)
    Set pSuperior = Value
End Property