By default, a new class module is a Private class, so it is only available for instantiation and use within the VBProject in which it is defined. You can declare, instantiate and use the class anywhere in the same project:
'Class List has Instancing set to Private
'In any other module in the SAME project, you can use:
Dim items As List
Set items = New List
But often you'll write classes that you'd like to use in other projects without copying the module between projects. If you define a class called List in ProjectA, and want to use that class in ProjectB, then you'll need to perform 4 actions:
Change the instancing property of the List class in ProjectA in the Properties window, from Private to PublicNotCreatable
Create a public "factory" function in ProjectA that creates and returns an instance of a List class. Typically the factory function would include arguments for the initialization of the class instance. The factory function is required because the class can be used by ProjectB but ProjectB cannot directly create an instance of ProjectA's class.
Public Function CreateList(ParamArray values() As Variant) As List
Dim tempList As List
Dim itemCounter As Long
Set tempList = New List
For itemCounter = LBound(values) to UBound(values)
tempList.Add values(itemCounter)
Next itemCounter
Set CreateList = tempList
End Function
In ProjectB add a reference to ProjectA using the Tools..References... menu.
In ProjectB, declare a variable and assign it an instance of List using the factory function from ProjectA
Dim items As ProjectA.List
Set items = ProjectA.CreateList("foo","bar")
'Use the items list methods and properties
items.Add "fizz"
Debug.Print items.ToString()
'Destroy the items object
Set items = Nothing