Vergleich zwischen Collection und Array: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Das Anlegen, Befüllen und Auslesen wird bei Collections und eindimensionalen Arrays sehr ähnlich gehandhabt: {| class="wikitable" ! Schritt ! Array ! Anme…“)
 
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:vba-wiki]]
Das Anlegen, Befüllen und Auslesen wird bei Collections und eindimensionalen Arrays sehr ähnlich gehandhabt:
Das Anlegen, Befüllen und Auslesen wird bei Collections und eindimensionalen Arrays sehr ähnlich gehandhabt:


Zeile 56: Zeile 57:
  Next lngIndex
  Next lngIndex
| Collection ist 1-basierend, Count ermittelt Anzahl der Elemente
| Collection ist 1-basierend, Count ermittelt Anzahl der Elemente
|-
| Wert überschreiben
|
...
strArray(lngIndex) = "Neuer Wert"
| In Arrays können die Werte beliebig überschrieben werden.
|
<span style="Color:blue">Public Function </span>ReplaceItemInCollection<span style="Color:gray">(</span><span style="Color:blue">ByVal </span>colInCollection<span style="Color:blue"> As </span>Collection<span style="Color:gray">,</span>
        _<span style="Color:blue"> ByVal </span>strNewItem<span style="Color:blue"> As String</span><span style="Color:gray">,</span><span style="Color:blue"> ByVal </span>lngItemIndex<span style="Color:blue"> As Long</span><span style="Color:gray">)</span><span style="Color:blue"> As </span>Collection
    <span style="Color:blue"> Dim </span>lngCount<span style="Color:blue"> As Long</span>
   
    <span style="Color:blue"> Set </span>ReplaceItemInCollection <span style="Color:gray">=</span> colInCollection
    <span style="Color:blue"> If </span>lngItemIndex <span style="Color:gray"><</span> <span style="Color:gray">1</span><span style="Color:blue"> Then Exit Function</span>
    lngCount <span style="Color:gray">=</span> ReplaceItemInCollection<span style="Color:gray">.</span>Count
    <span style="Color:blue"> If </span>lngItemIndex <span style="Color:gray">></span> lngCount<span style="Color:blue"> Then Exit Function</span>
    ReplaceItemInCollection<span style="Color:gray">.</span>Remove lngItemIndex
    <span style="Color:blue"> Select Case </span>lngItemIndex
        <span style="Color:blue"> Case </span><span style="Color:gray">1</span>
            <span style="Color:blue"> Select Case </span>lngCount
                <span style="Color:blue"> Case </span><span style="Color:gray">1</span>
                    ReplaceItemInCollection<span style="Color:gray">.</span>Add strNewItem
                <span style="Color:blue"> Case Else</span>
                    ReplaceItemInCollection<span style="Color:gray">.</span>Add strNewItem<span style="Color:gray">,</span> <span style="Color:gray">,</span> <span style="Color:gray">1</span>
            <span style="Color:blue"> End Select</span>
        <span style="Color:blue"> Case Else</span>
            ReplaceItemInCollection<span style="Color:gray">.</span>Add strNewItem<span style="Color:gray">,</span> <span style="Color:gray">,</span> <span style="Color:gray">,</span> lngItemIndex <span style="Color:gray">-</span> <span style="Color:gray">1</span>
    <span style="Color:blue"> End Select
End Function</span>
| 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).
|}
|}



Aktuelle Version vom 28. Januar 2023, 00:36 Uhr

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