ReDim-Anweisung (Visual Basic)

Reserviert Speicherplatz für eine Arrayvariable neu.

Syntax

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

Bestandteile

Begriff Definition
Preserve Dies ist optional. Modifizierer zum Beibehalten der Daten im vorhandenen Array, wenn lediglich die Größe der letzten Dimension geändert wird.
name Erforderlich. Name der Arrayvariablen. Siehe Declared Element Names.
boundlist Erforderlich. Liste der Grenzen jeder Dimension des neu definierten Arrays.

Bemerkungen

Sie können die ReDim-Anweisung verwenden, um die Größe einer oder mehrerer Dimensionen eines Arrays zu ändern, das bereits deklariert wurde. Wenn Sie ein großes Array verwenden und einige Elemente nicht mehr benötigen, kann ReDim durch das Reduzieren der Arraygröße Arbeitsspeicher freigeben. Falls Ihr Array mehr Elemente benötigt, kann ReDim diese auch hinzufügen.

Die ReDim-Anweisung ist nur für Arrays bestimmt. Sie gilt nicht für Skalare (Variablen, die nur einen einzelnen Wert enthalten), Auflistungen oder Strukturen. Beachten Sie Folgendes: Wenn Sie für eine Variable den Typ Array deklarieren, verfügt die ReDim-Anweisung nicht über genügend Typinformationen zum Erstellen des neuen Arrays.

Sie können ReDim nur auf Prozedurebene verwenden. Aus diesem Grund muss der Deklarationskontext für die Variable eine Prozedur sein. Folgende Kontexte sind nicht möglich: Quelldatei, Namespace, Schnittstelle, Klasse, Struktur, Modul oder Block. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Regeln

  • Mehrere Variablen: Sie können die Größe mehrerer Arrayvariablen in derselben Deklarationsanweisung ändern und die Teile name und boundlist für jede Variable angeben. Mehrere Variablen werden durch Kommas voneinander getrennt.

  • Arraygrenzen: Für jeden Eintrag in boundlist können die unteren und oberen Grenzen der Dimension angegeben werden. Die untere Grenze ist immer 0 (null). Die Obergrenze ist der größtmögliche Indexwert für diese Dimension, nicht die Länge der Dimension (dies ist die obere Grenze plus 1). Der Index für jede Dimension kann zwischen 0 und dem Wert der oberen Grenze variieren.

    Die Anzahl der Dimensionen in boundlist muss mit der ursprünglichen Anzahl von Dimensionen (Rang) des Arrays übereinstimmen.

  • Datentypen: Mit der ReDim-Anweisung kann der Datentyp einer Arrayvariablen oder ihrer Elemente nicht geändert werden.

  • Initialisierung. Mit der ReDim-Anweisung können keine neuen Initialisierungswerte für die Arrayelemente bereitgestellt werden.

  • Rang. Mit der ReDim-Anweisung kann der Rang (Anzahl von Dimensionen) des Arrays nicht geändert werden.

  • Ändern der Größe mit Beibehaltung (Preserve): Bei Verwendung von Preserve können Sie nur die Größe der letzten Dimension des Arrays ändern. Für alle anderen Dimensionen müssen Sie die Grenze des vorhandenen Arrays angeben.

    Wenn das Array nur eine Dimension hat, können Sie beispielsweise die Größe dieser Dimension ändern und trotzdem den gesamten Inhalt des Arrays beibehalten. Dies liegt daran, dass Sie die letzte und einzige Dimension ändern. Wenn das Array aber über zwei oder mehr Dimensionen verfügt, können Sie bei Verwendung von Preserve nur die Größe der letzten Dimension ändern.

  • Eigenschaften Sie können ReDim für eine Eigenschaft verwenden, die ein Array von Werten enthält.

Verhalten

  • Arrayersetzung. ReDim gibt das vorhandene Array frei und erstellt ein neues Array mit demselben Rang. Das neue Array ersetzt das freigegebene Array in der Arrayvariablen.

  • Initialisierung ohne Beibehaltung (Preserve): Wenn Sie kein Preserve angeben, werden die Elemente des neuen Arrays von ReDim mit dem Standardwert für ihren Datentyp initialisiert.

  • Initialisierung mit Beibehaltung (Preserve): Wenn Sie Preserve angeben, kopiert Visual Basic die Elemente aus dem vorhandenen Array in das neue Array.

Beispiel

Im folgenden Beispiel wird die Größe der letzten Dimension eines dynamischen Arrays erhöht, ohne dass vorhandene Daten im Array verloren gehen. Anschließend wird die Größe mit einem Teilverlust der Daten reduziert. Zuletzt wird die Größe zurück auf den Originalwert reduziert, und alle Arrayelemente werden neu initialisiert.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

Mit der Dim-Anweisung wird ein neues Array mit drei Dimensionen erstellt. Jede Dimension wird mit einer Grenze von 10 deklariert, sodass der Arrayindex für jede Dimension von 0 bis 10 reichen kann. Im folgenden Text werden die drei Dimensionen als Ebene (Layer), Zeile (Row) und Spalte (Column) bezeichnet.

Das erste ReDim-Element erstellt ein neues Array, mit dem das vorhandene Array in der Variablen intArray ersetzt wird. ReDim kopiert alle Elemente aus dem vorhandenen Array in das neue Array. Außerdem werden auf jeder Ebene am Ende jeder Zeile zehn weitere Spalten hinzugefügt, und die Elemente in diesen neuen Spalten werden mit dem Wert 0 initialisiert (Standardwert von Integer, dem Elementtyp des Arrays).

Das zweite ReDim-Element erstellt ein neues Array und kopiert alle passenden Elemente. Am Ende jeder Zeile auf jeder Ebene gehen aber fünf Spalten verloren. Dies ist kein Problem, wenn Sie mit der Verwendung dieser Spalten fertig sind. Durch das Reduzieren der Größe eines großen Arrays kann Speicher freigegeben werden, den Sie nicht mehr benötigen.

Das dritte ReDim-Element erstellt ein weiteres neues Array und entfernt auf jeder Ebene weitere fünf Spalten vom Ende jeder Zeile. Dieses Mal werden keine vorhandenen Elemente kopiert. Mit dieser Anweisung wird das Array auf seine ursprüngliche Größe zurückgesetzt. Da die Anweisung den Preserve-Modifizierer nicht enthält, werden alle Arrayelemente auf ihre ursprünglichen Standardwerte festgelegt.

Weitere Beispiele finden Sie unter Arrays.

Weitere Informationen