A имеет ряд объектов, сложную структуру данных, родительский элемент и дочерний элемент.Дочерний объект содержит экземпляр родительского объекта, имеет свойства Let и Get и один метод.Когда метод запрашивает один из объектов ComplexData у родителя, мне выдается старое сообщение RunTime Error 91 - Object Variable or With Variable not set
.Дочерний объект упаковывает все объекты ComplexData от себя и его родителя.Ошибка генерируется, когда дочерний элемент вызывает родительский номер Property Get TitleField()
.
Это классы (выделены жирным шрифтом):
ComplexData
Private sName As String
Private vValue As Variant
Public Property Let Name(sInput As String)
sName = sInput
End Property
Public Property Get Name() As String
Name = sName
End Property
Public Property Let Value(vInput)
vValue = vInput
End Property
Public Property Get Value()
Value = vValue
End Property
ParentClass
Private oTitle As ComplexData
Private Sub Class_Initialize()
Set oTitle = New ComplexData
oTitle.Name = "title"
End Sub
Public Property Let Title(vInput)
oTitle.Value = "Lorum"
End Property
Public Property Get Title()
Value = oTitle.Value
End Property
Public Property Set TitleField(oInput As ComplexData)
Set oTitle = oInput
End Property
Public Property Get TitleField() As ComplexData
TitleField = oTitle 'GENERATES ERROR
End Property
ChildClass
Private oParent As ParentClass
Private oContentData As ComplexData
Private Sub Class_Initialize()
Set oParent = New ParentClass
Set oContentData = New ComplexData
oContentData.Name = "content"
End Sub
Public Property Let Content(sInput As String)
oContentData.Value = sInput
End Property
Public Property Get Content() As String
Content = oContentData.Value
End Property
Public Function getFields()
getFields = Array(oContentData, oParent.TitleField)
End Function
Я могу обойти это, установив oTitle
в Public
inродительский класс и прямой запрос объекта вместо использования Property
.
Я вызываю это из электронной таблицы, используя следующее:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set MyChild = New ChildClass
Fields = MyChild.getFields
field0 = Fields(0).Name
field1 = Fields(1).Name
MsgBox field0 & field1
End Sub