如何设置自定义对象数组?

时间:2013-12-11 18:05:03

标签: arrays class object excel-vba vba

如何设置另一个自定义对象内的自定义对象的数组?如下所示:

这是类别合法:

'Class Licit

Private LObj() As Obj

Sub RedimObj(index As Integer)
    ReDim Preserve LObj(index)
End Sub

Public Property Let SetObjConlicit(ByVal index As Integer, ByVal ObjConlicit As Double)
    LObj(index).ObConlicita = ObjConlicit
End Property

Public Property Get GetObjConlicit(index As Integer) As Double
    GetObjConlicit = LObj(index).ObConlicita
End Property

这是Class Obj(尚未创建set / let属性):

'Class Obj
Public ObConlicita As Double
Public Obgrupo As Integer
Public ObitemNum As Integer
Public Obdescr As String
Public ObvalMax As Double
Public Obobs As String

这是我的惯例:

Public Licita As Licit

sub run()
Set Licita = New Licit

NumObjetos = 3
Licita.RedimObj (NumObjetos)
For i = 0 To NumObjetos - 1
    Licita.SetObjConlicit(i) = i
Next i

end sub

但我在这一行上收到错误     LObj(index).ObConlicita = ObjConlicit whentrying设置值。

我得到的错误是:

  

'运行时错误91   对象变量或使用块变量未设置'

任何人都可以帮我解决我的错误吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是RedimObj方法只调整数组的大小,但不会为每个元素创建Obj的新实例。 因此,当您调用SetObjConlicit属性时,LObj(index)指向的元素的值为Nothing,您就会收到该错误。

因此,您必须确保在访问其ObConlicita属性之前已经构造了该对象。

为了做到这一点,你可以,例如(看看它是否对你的情况有意义),检查元素是否已经初始化,如果没有,则初始化它。例如:

Public Property Let SetObjConlicit(ByVal index As Integer, ByVal ObjConlicit As Double)
    ' Check is element is initialized
    If LObj(index) Is Nothing Then
        ' and initialize it if it is not.
        Set LObj(index) = New Obj
    End If
    LObj(index).ObConlicita = ObjConlicit
End Property