如何设置另一个自定义对象内的自定义对象的数组?如下所示:
这是类别合法:
'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 对象变量或使用块变量未设置'
任何人都可以帮我解决我的错误吗?
谢谢!
答案 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