Доступ к родительскому свойству get приводит к ошибке «Переменная объекта или с блоком ...» - PullRequest
0 голосов
/ 25 октября 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...