VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: ReDim-Anweisung

Wird auf Prozedurebene verwendet, um Speicherplatz für dynamische Datenfeldvariablen zu reservieren.

Syntax

ReDim [Preserve] VarName(Indizes) [As Typ] [, VarName(Indizes) [As Typ]] . . .

Die Syntax der ReDim-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Preserve Optional. Schlüsselwort, das zum Erhalt der Daten in einem bestehenden Datenfeld verwendet wird, wenn die Größe der letzten Dimension geändert wird.
VarName Erforderlich. Name der Variablen gemäß den Standardkonventionen für Namen von Variablen.
Indizes Erforderlich. Dimensionen einer Datenfeldvariablen. Bis zu 60 Dimensionen sind zulässig. Die Syntax für das Argument Indizes ist:
  [Untergrenze To] Obergrenze [,[Untergrenze To] Obergrenze] . . .
  Wenn nicht explizit in Untergrenze angegeben, wird die Untergrenze eines Datenfeldes durch die Option Base-Anweisung gesteuert. Die Untergrenze ist Null, wenn keine Option Base-Anweisung vorhanden ist.
Typ Optional. Datentyp der Variablen. Zulässige Typen sind: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (zur Zeit nicht unterstützt), Date, String (für Zeichenfolgen variabler Länge), String * Länge (für Zeichenfolgen fester Länge), Object, Variant, ein benutzerdefinierter Typ oder ein Objekttyp. Verwenden Sie für jede deklarierte Variable einen separaten As Typ-Abschnitt. Bei Variant-Werten, die ein Datenfeld enthalten, beschreibt Typ den Typ der Elemente im Datenfeld, ändert den Variant-Wert aber nicht in einen anderen Typ.

Bemerkungen

Die ReDim-Anweisung dient normalerweise zum Festlegen oder Ändern der Größe eines dynamischen Datenfeldes, das bereits formal mit einer Private-, Public- oder Dim-Anweisung und einem leeren Klammernpaar (ohne Indizes für die Dimensionen) deklariert wurde.

Sie können die ReDim-Anweisung mehrmals verwenden, um die Anzahl der Elemente und Dimensionen in einem Datenfeld zu ändern. Sie können allerdings nicht ein Datenfeld mit einem Datentyp deklarieren und später den Datentyp mit ReDim ändern. Dies ist nur möglich, wenn sich das Datenfeld in einem Variant-Wert befindet. In diesem Fall können Sie den Datentyp der Elemente mit einem As Typ-Abschnitt ändern, bis Sie das Preserve-Schlüsselwort verwenden, das keine Änderungen der Datentypen mehr zuläßt.

Die Anzahl der Dimensionen kann nicht verändert werden. Mit dem Schlüsselwort Preserve können Sie nur die Größe der letzten Datenfelddimension ändern. Wenn das Datenfeld zum Beispiel nur eine Dimension hat, können Sie die Größe dieser Dimension ändern, weil es die letzte und einzige Dimension ist. Hat das Datenfeld jedoch mindestens zwei Dimensionen, so können Sie lediglich die Größe der letzten Dimension ändern, wenn der Inhalt des Datenfeldes erhalten bleiben soll. Das folgende Beispiel verdeutlicht, wie Sie die letzte Dimension eines dynamischen Datenfeldes vergrößern können, ohne bereits bestehende Daten im Datenfeld zu löschen.

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

Ähnlich können Sie bei Verwendung des Preserve-Schlüsselwortes die Größe des Datenfelds nur durch Änderung der oberen Grenze verändern; die Änderung der unteren Grenze löst einen Fehler aus.

Wenn Sie ein Datenfeld verkleinern, gehen die Daten in den entfernten Elementen verloren. Übergeben Sie einer Prozedur ein Datenfeld als Referenz, so können Sie dem Datenfeld innerhalb der Prozedur keine neuen Dimensionen zuweisen.

Bei der Initialisierung wird numerischen Variablen der Wert 0 und Zeichenfolgen variabler Länge eine Null-Zeichenfolge ("") zugewiesen. Zeichenfolgen fester Länge werden mit Nullen aufgefüllt, und Variant-Variablen werden mit Empty initialisiert. Alle Elemente einer Variablen mit einem benutzerdefinierten Typ werden genauso initialisiert wie Variablen eines entsprechenden Datentyps. Einer Variablen mit einem Verweis auf ein Objekt muß mit der Set-Anweisung ein existierendes Objekt zugewiesen werden, bevor sie verwendet werden kann. Eine deklarierte Objektvariable hat vor dem Zuweisen eines Objekts den Spezialwert Nothing, der anzeigt, daß die Variable auf keine bestimmte Instanz eines Objekts verweist.

Vorsicht   Die ReDim-Anweisung verhält sich wie eine deklarierende Anweisung, wenn die deklarierte Variable nicht auf Modulebene oder Prozedurebene existiert. Wird eine andere Variable mit dem gleichen Namen später erstellt, sogar in einem größeren Gültigkeitsbereich, so verweist ReDim auf die später erstellte Variable und verursacht nicht unbedingt einen Kompilierungsfehler, auch wenn Option Explicit wirksam ist. Damit solche Konflikte nicht auftreten, sollte ReDim nicht als eine deklarierende Anweisung verwendet werden, sondern nur zur erneuten Dimensionierung von Datenfeldern.

Anmerkung   Damit Sie die Größe eines Datenfelds in einem Variant verändern können, müssen Sie die Variant-Variable explizit deklarieren, bevor Sie ihr Datenfeld verändern können.