In diesem Tutorial wird gezeigt, wie Sie dynamische Arrays (redim und redim beibehalten) in VBA verwenden.
Dynamisches Array
Dynamische Arrays sind Arrays, die ihre Größe ändern können (im Gegensatz zu statische Arrays, die statisch sind).
Um ein dynamisches Array zu deklarieren, deklarieren Sie das Array, lassen aber die Array-Größe weg:
1 | Dim strNames() As String |
Bevor Sie Ihrem Array Werte zuweisen können, müssen Sie das Array mithilfe der ReDim-Anweisung auf die gewünschte Größe einstellen:
1 | ReDim-StrNames(1 bis 3) |
Wenn Sie jetzt Ihre Array-Größe ändern möchten, verwenden Sie einfach ReDim (oder ReDim Preserve, wie wir weiter unten erfahren werden).
Dynamische Varianten-Arrays
Hinweis: Variantenarrays sind etwas anders. Bei Variant-Arrays müssen Sie die Array-Größe nicht mit ReDim festlegen, bevor Sie Werte zuweisen.
12345678 | Unter TestArray()'die Variable deklarierenDim varNames() als Variante'das Array auffüllenvarNames() = Array("Fred", "Wilma", "Barney", "Betty")'Werte zurückgebenMsgBox Join(varNames, ",")End Sub |
Redim vs. Redim Preserve
Die ReDim Anweisung ändert die Größe eines Arrays, Clearing alle vorhandenen Werte.
Die ReDim Preserve Anweisung ändert die Größe eines Arrays, halten („erhalten“) aller vorhandenen Werte.
Verwenden von ReDim
In der Praxis sieht die Größenänderung eines Arrays mit ReDim so aus:
123456789101112 | UntertestReDim()'das String-Array deklarierenDim strNames() As String'Größe des String-Arrays ändern, um 3 Werte aufnehmen zu könnenReDim-StrNames(1 bis 3)'das Array mit 3 Namen füllenstrNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'Ergebnis im Direktfenster anzeigenDebug.Print Join(strNames, vbCrLf)End Sub |
Verwenden von ReDim Preserve
In diesem Beispiel verwenden wir ReDim, um das anfängliche dynamische Array festzulegen, und dann ReDim Preserve, um die Größe des Arrays zu ändern. halten die ursprünglichen Werte:
1234567891011121314151617 | UntertestReDim()'das String-Array deklarierenDim strNames() As String'Größe des String-Arrays ändern, um 3 Werte aufnehmen zu könnenReDim-StrNames(1 bis 3)'das Array auffüllenstrNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'Ergebnis im Direktfenster anzeigenDebug.Print Join(strNames, vbCrLf)'redim, aber speichere die DatenReDim Preserve strNames(1 bis 4)strNames(4) = "Fred"'Ergebnis im Direktfenster anzeigenDebug.Print Join(strNames, vbCrLf)End Sub |
Wenn Sie das nicht verwenden BEWAHREN -Anweisung würden Sie die Daten verlieren, die sich zuvor im Array befanden.
Im unmittelbar darüber liegenden Fenster füllte das Array Mel, Steve und Bob. Bei der erneuten Deklaration wurden diese Werte entfernt und stattdessen 3 leere Werte und dann der Wert "Fred" zurückgegeben. Dies liegt an der BEWAHREN Aussage weggelassen wird.