[Edited the code] Sorry for newbie question. I was trying to test nested classes in VBA for Excel but got error message. Can anyone help me understand why? Thank you!
' CLASS MODULE - cInside ' Member variables Private m_Value As Integer ' Properties Property Get Value() As Integer Value = m_Value End Property Property Let Value(i As Integer) m_Value = i End Property ' Methods Sub init() m_Value = 0 End Sub Sub Inc() m_Value = m_Value + 1 End Sub
' CLASS MODULE - cOutside ' Member variables Private m_Num1 As New cInside Private m_Num2 As New cInside ' Properties Property Get Num1() As cInside Num1 = m_Num1.Value End Property Property Get Num2() As cInside Num2 = m_Num2.Value End Property Property Set Num1(i As cInside) Set m_Num1 = i End Property Property Set Num2(i As cInside) Set m_Num2 = i End Property
Sub Main() Dim o As New cOutside Dim i As New cInside i.Value = 9 i.Inc Debug.Print i.Value '<-- this works Set o.Num1 = i o.Num1.Inc '<-- object variable or with block variable not set Debug.Print (o.Num1.Value) End Sub
Thank you again!vbaaccess-vba
n.Num1 returns an
Integer, which isn't an instance of
cInside, and therefore doesn't have an
Inc member, which makes it an invalid qualifier for the compiler to complain about ;-)
cOutside class needs to expose it somehow:
Property Get ComposedObject1() As cInside Set ComposedObject1 = m_Num1 End Property
Then the calling code could do this:
I called that "composed", because what you're doing isn't "nesting", but "composition". VBA doesn't supported nested classes, which would be a class module defined inside another class module, like so:
Class Outside '... members... Class Inside '...members... End Class End Class
VB.NET can do that, but in VBA 1 class module can only define 1 class.