VBA – Dynamisches Array (Redim & Redim Preserve)
In this Article
In diesem Tutorial zeigen wir Ihnen, wie Sie dynamische Arrays (ReDim und ReDim Preserve) in VBA verwenden können.
Dynamisches Array
Dynamische Arrays sind Arrays, die ihre Größe ändern können (im Gegensatz zu statischen Arrays, die unveränderlich sind).
Um ein dynamisches Array zu deklarieren, lassen die Array-Größe bei der Deklaration weg:
Dim strNamen() As String
Bevor Sie dem Array dann Werte zuweisen können, müssen Sie es mit der ReDim-Anweisung auf die gewünschte Größe einstellen:
ReDim strNamen(1 To 3)
Wenn Sie nun die Größe Ihres Arrays ändern möchten, verwenden Sie einfach ReDim (oder ReDim Preserve, wie wir weiter unten erfahren werden).
Dynamische Variant-Arrays
Hinweis: Variant-Arrays sind ein wenig anders. Bei Variant-Arrays müssen Sie die Array-Größe nicht mit ReDim festlegen, bevor Sie Werte zuweisen.
Sub ArrayTesten()
'Die Variable deklarieren
Dim varNamen() As Variant
'Das Array auffüllen
varNamen() = Array("Fred", "Wilma", "Barney", "Betty")
'Die Werte zurückgeben
MsgBox Join(varNamen, ",")
End Sub
Redim im Vergleich zu Redim Preserve
Die ReDim-Anweisung ändert die Größe eines Arrays und löscht alle vorhandenen Werte.
Die Anweisung ReDim Preserve ändert die Größe eines Arrays, wobei alle vorhandenen Werte beibehalten werden.
Verwendung von ReDim
In der Praxis sieht die Größenänderung eines Arrays mit ReDim wie folgt aus:
Sub ReDimTesten()
'Das String-Array deklarieren
Dim strNamen() As String
'Die Größe des String-Arrays ändern, damit es 3 Werte aufnehmen kann
ReDim strNamen(1 To 3)
'Das Array mit 3 Namen auffüllen
strNamen(1) = "Mel"
strNamen(2) = "Steve"
strNamen(3) = "Bob"
'Das Ergebnis im Direktfenster anzeigen
Debug.Print Join(strNamen, vbCrLf)
End Sub
ReDim Preserve verwenden
In diesem Beispiel verwenden wir ReDim, um das anfängliche dynamische Array festzulegen, und dann ReDim Preserve, um die Größe des Arrays unter Beibehaltung der ursprünglichen Werte zu ändern:
Sub ReDimTesten()
'Das String-Array deklarieren
Dim strNamen() As String
'Die Größe des String-Arrays ändern, damit es 3 Werte aufnehmen kann
ReDim strNamen(1 To 3)
'Das Array auffüllen
strNamen(1) = "Mel"
strNamen(2) = "Steve"
strNamen(3) = "Bob"
'Das Ergebnis im Direktfenster anzeigen
Debug.Print Join(strNamen, vbCrLf)
'Redim, aber die Daten beibehalten
ReDim Preserve strNameN(1 To 4)
strNamen(4) = "Fred"
'Das Ergebnis im Direktfenster anzeigen
Debug.Print Join(strNamen, vbCrLf)
End Sub
Wenn Sie die PRESERVE-Anweisung nicht verwenden, würden Sie die Daten, die sich zuvor in dem Array befanden, verlieren.
Im obigen Direktfenster enthielt das Array die Werte Mel, Steve und Bob. Als es neu deklariert wurde, wurden diese Werte entfernt und stattdessen 3 leere Werte und der Wert „Fred“ zurückgegeben. Dies ist darauf zurückzuführen, dass die PRESERVE-Anweisung weggelassen wurde.