Объект класса VBA () как свойство другого класса
Я пытаюсь создать класс для хранения переменного количества элементов (которые сами являются другим объектом класса).
Итак, у меня есть 2 класса:
' Class 2 contain each individual quote elements (OTC and MRC) Private pOTC As String Private pMRC As String Public Property Get OTC() As String OTC = pOTC End Property Public Property Let OTC(Value As String) pOTC = Value End Property Public Property Get MRC() As String MRC = pMRC End Property Public Property Let MRC(Value As String) pMRC = Value End Property
тогда класс 1 содержит массив класса 2:
Private pCurr As String Private pQuote(20) As Class2 Public Property Get Curr() As String Curr = pCurr End Property Public Property Let Curr(Value As String) pCurr = Value End Property Public Property Set Quote(Index As Integer, cQuote As Class2) Set pQuote(Index) = cQuote End Property Public Property Get Quote(Index As Integer) As Class2 Quote = pQuote(Index) End Property
и то, что я хотел бы сделать что-то вроде:
Dim myQuotes As Class1 Set myQuotes = New Class1 myQuotes.Curr = "GBP" myQuotes.Quote(3).OTC = "1200"
первая строка установка myQuotes.Curr не проблема, однако, когда я пытаюсь установить значение внутри массива, следующие ошибки строки с объект времени выполнения 91 переменная или переменная блока With не задано
любые указатели на то, что я делаю неправильно, и как я могу установить значения для элементов в массиве классов?
спасибо заранее!
3 ответов
когда вы myQuotes.Quote(3)
вы называете Property Get Quote
что есть проблема.
ваш внутренний массив Class2
не создается экземпляр так pQuote(Index)
относится к элементу массива Nothing
, после myQuotes.Quote(3).OTC =
вы пытаетесь назначить Nothing
, который терпит неудачу.
вы должны убедиться, что pQuote(Index)
экземпляр; вы можете сделать это по требованию:
Public Property Get Quote(Index As Integer) As Class2
If (pQuote(Index) Is Nothing) Then Set pQuote(Index) = New Class2
Set Quote = pQuote(Index)
End Property
(обратите внимание на обязательную Set
)
или путем добавления процедуры intitialisation к Class1
:
Private Sub Class_Initialize()
Dim Index As Long
For Index = 0 To UBound(pQuote)
Set pQuote(Index) = New Class2
Next
End Sub
вам нужно установить их как новый Class2 в Class1:
For intI = LBOUND(pQuote) to UBOUND(pQuote)
Set pQuote(intI) = New Class2
Next IntI
Так же, как и с класс 1 в окончательном варианте сценария.
возможно, это должно быть
Public Property Let Quote(Index As Integer, cQuote As Class2)
Set pQuote(Index) = cQuote
End Property