VBA Class() object as property of another class

class, excel, vba

Solution

When you `myQuotes.Quote(3)` you call `Property Get Quote` which has an issue.

Your internal array of `Class2` is not instantiated so `pQuote(Index)` refers to an array element of `Nothing`, when you then `myQuotes.Quote(3).OTC =` you try to assign to `Nothing` which fails.

You need to make sure `pQuote(Index)` is instanced; you can do this on demand:

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

(Note the required `Set`)

Or by adding an intitialisation routine to `Class1`:

Private Sub Class_Initialize()
    Dim Index As Long
    For Index = 0 To UBound(pQuote)
         Set pQuote(Index) = New Class2
    Next
End Sub

Problem

I'm trying to create a class to hold a variable number of items (which are themselves another class object). So, I have Class 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 ``` Then Class 1 contains an array of Class 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 ``` And what I would like to do is something like: ``` Dim myQuotes As Class1 Set myQuotes = New Class1 myQuotes.Curr = "GBP" myQuotes.Quote(3).OTC = "1200" ``` The first line setting myQuotes.Curr is no problem, however when I try to set a value inside the array the next line errors with Run-time 91 Object variable or With block variable not set Any pointers as to what I'm doing wrong and how can I set the values for the elements within the class array? Thanks in advance!

Original source