VBA Collections

In VBA (Visual Basic for Applications), a Collection is an ordered set of items that can contain different types of data, such as numbers, strings, objects, or other collections. It’s a versatile data structure that allows you to store and manage a group of related items. Here’s how you can work with Collections in VBA:

Creating a Collection: You can create a Collection using the Collection class provided by VBA. Here’s an example:

Dim myCollection As New Collection

Adding Items to a Collection: You can add items to a Collection using the Add method:

myCollection.Add "Item 1"
myCollection.Add 42

Removing Items from a Collection: To remove an item from a Collection, you can use the Remove method:

myCollection.Remove 42 ' Removes the item with value 42

Accessing Items in a Collection: You can access items in a Collection using a loop or by indexing:

For Each item In myCollection
Debug.Print item
Next item
Debug.Print myCollection(1) ' Accesses the first item

Deleting Items from a Collection: If you want to completely remove an item from a Collection, including its index, you can use a loop to search for the item and then remove it:

Sub DeleteItem(collection As Collection, item As Variant)
Dim i As Long
For i = 1 To collection.Count
If collection(i) = item Then
collection.Remove i
Exit For
End If
Next i
End Sub

DeleteItem myCollection, "Item 1"

Keep in mind that Collections are 1-indexed, meaning the first item is at index 1, the second at index 2, and so on.

Here’s a basic code example of working with a Collection:

Sub CollectionExample()
Dim myCollection As New Collection
myCollection.Add “Apple”
myCollection.Add “Banana”
myCollection.Add “Orange”

  For Each fruit In myCollection
    Debug.Print fruit
  Next fruit

  myCollection.Remove "Banana"

  For Each fruit In myCollection
    Debug.Print fruit
  Next fruit

End Sub

Checking if an Item Exists: You can use the On Error Resume Next statement to check if an item exists in a Collection:

Function ItemExists(collection As Collection, item As Variant) As Boolean
On Error Resume Next
ItemExists = Not collection(item) Is Nothing
On Error GoTo 0
End Function

If ItemExists(myCollection, "Apple") Then
Debug.Print "Apple exists in the collection."
Else
Debug.Print "Apple does not exist in the collection."
End If

Clearing a Collection: To remove all items from a Collection, you can use a loop to remove each item:

Sub ClearCollection(collection As Collection)
Do While collection.Count > 0
collection.Remove 1 ' Always remove the first item
Loop
End Sub

ClearCollection myCollection

Nested Collections: You can also create nested Collections, where each item in the main Collection is a sub-collection:

Sub NestedCollectionsExample()
Dim mainCollection As New Collection
Dim subCollection1 As New Collection
Dim subCollection2 As New Collection

subCollection1.Add "Item 1.1"
subCollection1.Add "Item 1.2"

subCollection2.Add "Item 2.1"
subCollection2.Add "Item 2.2"

mainCollection.Add subCollection1
mainCollection.Add subCollection2

For Each subColl In mainCollection
    For Each item In subColl
        Debug.Print item
    Next item
Next subColl

End Sub

Using the For Loop for Iteration: You can also use a For loop with an index to iterate through a Collection:

Sub ForLoopExample()
Dim i As Long
For i = 1 To myCollection.Count
Debug.Print myCollection(i)
Next i
End Sub

What are your feelings