Vergleich zwischen Collection und Array

Aus VBA-wiki
Zur Navigation springen Zur Suche springen

Das Anlegen, Befüllen und Auslesen wird bei Collections und eindimensionalen Arrays sehr ähnlich gehandhabt:

Schritt Array Anmerkungen Collection Anmerkungen
Deklaration
Dim strArray() As String
Dim colCollection As Collection
Vor dem ersten Einsatz
ReDim strArray(3)
Die Anzahl der erwarteten Einträge muss bekannt sein. Da das Array 0-basiert ist, wird hier der höchste erwartete Index angegeben (Anzahl - 1).
Set colCollection = New Collection
Die Collection muss initialisiert werden, damit sie die Elemente aufnehmen kann.
Erstes Element
strArray(0) = "Max"
Das Array enthält nach der Dimensionierung die geforderte Anzahl von leeren Plätzen. Jedes Element wird einem Platz zugeordnet.
colCollection.Add "Max"
Die Collection ist ursprünglich leer, einzelne Elemente werden mit 'Add' hinzugefügt.
Weitere Elemente
strArray(1) = "Moritz"
strArray(2) = "Hempel"
strArray(3) = "Bolte"
colCollection.Add "Moritz"
colCollection.Add "Hempel"
colCollection.Add "Bolte"
Werte abfragen
For lngIndex = 0 To UBound(strNames)
    Debug.Print strArray(lngIndex)
Next lngIndex
Array ist 0-basierend, UBound ermittelt letzten Index.
For lngIndex = 1 To colNames.Count
    Debug.Print colNames.Item(lngIndex)
Next lngIndex
Collection ist 1-basierend, Count ermittelt Anzahl der Elemente
Wert überschreiben
...
strArray(lngIndex) = "Neuer Wert"
In Arrays können die Werte beliebig überschrieben werden.
Public Function ReplaceItemInCollection(ByVal colInCollection As Collection,
       _ ByVal strNewItem As String, ByVal lngItemIndex As Long) As Collection
    Dim lngCount As Long
    
    Set ReplaceItemInCollection = colInCollection
    If lngItemIndex < 1 Then Exit Function
    lngCount = ReplaceItemInCollection.Count
    If lngItemIndex > lngCount Then Exit Function
    ReplaceItemInCollection.Remove lngItemIndex
    Select Case lngItemIndex
        Case 1
            Select Case lngCount
                Case 1
                    ReplaceItemInCollection.Add strNewItem
                Case Else
                    ReplaceItemInCollection.Add strNewItem, , 1
            End Select
        Case Else
            ReplaceItemInCollection.Add strNewItem, , , lngItemIndex - 1
    End Select
End Function
Wenn man in einer Collection ein Element nachträglich mit einem neuen Wert belegen möchte, muss man es entfernen und neu an der alten Stelle hinzufügen (siehe Beispielfunktion).

Große Unterschiede offenbaren sich jedoch, wenn man die zusätzlichen Parameter der Add-Methode zur Positionierung eines Elementes und der Vergabe eines eindeutigen Schlüssels oder die Vorgehensweise beim Verschieben von Elementen betrachtet:

Schritt Array Anmerkungen Collection Anmerkungen
Element löschen
Neues Element positionieren
Positionen vertauschen
Schlüssel verwenden