VBA - classes and structures videos | Excel VBA Part 35 - Class Modules

Posted by Andrew Gould on 13 October 2014

Class Modules in VBA allow you to define your own classes of objects. This video explains why that's a useful and shows you how to go about creating a class. You'll learn about the two class events: initialise and terminate, you'll see how to define properties, including how to create read-only properties and set default values. You'll also find out how easy it is to create methods for your class and how to use your class in your regular code.

You can increase the size of the video:

Full screen mode for YouTube

You can view the video in full screen mode as shown on the left, using the icon at the bottom right of the frame.

You can also increase the quality of the video:

Changing resolution

You can improve the resolution of the video using another icon at the bottom right of the frame. This will slow down the connection speed, but increase the display and sound quality. This icon only becomes visible when you start playing the video.

Finally, if nothing happens when you play the video, check that you're not using IE in compatibility view.

This page has 1 thread Add post
31 Jan 20 at 13:25


Can you please explain why Method 1 fails but Method 2 works?

Method 1:

'This is Class1

Option Explicit

Public MyArr As Variant

Private Sub Class_Initialize()

    ReDim MyArr(1 To 5) As Variant
    Dim i As Integer

    For i = 1 To 5
        MyArr(i) = 0
    Next i

End Sub

'This is in a standard module

Option Explicit

Sub Start()

    Dim abc As Class1
    Set abc = New Class1

    abc.MyArr(1) = 10
    Debug.Print abc.MyArr(1)

End Sub

After this line has been run:

abc.MyArr(1) = 10

in the Immediate Window, I see:

abc.MyArr(1) = 0

I expect it to be 10.


However using tmp variable seems to do the trick.

Method 2:

Sub Start()

   Dim tmp As Variant
   Dim abc As Class1
   Set abc = New Class1
   tmp = abc.MyArr
   tmp(1) = 10
   abc.MyArr = tmp
   Debug.Print abc.MyArr(1)

End Sub



01 Feb 20 at 13:05

Hi duggie, I hope it's OK to answer this question with a link but there's a good explanation of what's going on here https://stackoverflow.com/questions/25328975/array-as-a-class-member

I hope that helps!

04 Feb 20 at 17:29

Thanks for the link.