ReDim-AnweisungReDim statement

Wird auf Prozedurebene zur Neuzuordnung von Speicherplatz für Variablen dynamischer Arrays verwendet.Used at the procedure level to reallocate storage space for dynamic array variables.

SyntaxSyntax

ReDim [ Beibehalten ] varname ( tiefgestellte Zeichen) [ Als Typ ], [ varname ( tiefgestellte Zeichen) [ als Typ ]] ...ReDim [ Preserve ] varname ( subscripts ) [ As type ], [ varname ( subscripts ) [ As type ]] . . .


Die Syntax der ReDim-Anweisung umfasst die folgenden Komponenten:The ReDim statement syntax has these parts:

TeilPart BeschreibungDescription
PreservePreserve Optional.Optional. Schlüsselwort zur Beibehaltung der Daten in einem bestehenden Array, wenn die Größe der letzten Dimension geändert wird.Keyword used to preserve the data in an existing array when you change the size of the last dimension.
varnamevarname Erforderlich.Required. Name der Variablen; folgt standardmäßigen Konventionen für die Variablenbenennung.Name of the variable; follows standard variable naming conventions.
subscriptssubscripts Erforderlich.Required. Dimensionen einer Arrayvariablen. Es können bis zu 60 Mehrfachdimensionen deklariert werden.Dimensions of an array variable; up to 60 multiple dimensions may be declared. Das subscripts-Argument verwendet die folgende Syntax:The subscripts argument uses the following syntax:

[ lowerTo ] upper [ , [ lowerTo ] upper ] . . .[ lowerTo ] upper [ , [ lowerTo ] upper ] . . .

Wenn sie nicht explizit in lower angegeben ist, wird die Untergrenze eines Arrays durch die Option Base-Anweisung gesteuert.When not explicitly stated in lower, the lower bound of an array is controlled by the Option Base statement. Die Untergrenze ist Null, wenn keine Option Base-Anweisung vorhanden ist.The lower bound is zero if no Option Base statement is present.
typetype Optional.Optional. Der Datentyp der Variablen. Kann Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (zurzeit nicht unterstützt), Date, String (für Zeichenfolgen mit variabler Länge), String length (für Zeichenfolgen mit fester Länge), Object, Variant, ein benutzerdefinierter Typ oder ein Objekttyp sein.Data type of the variable; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (for variable-length strings), String length (for fixed-length strings), Object, Variant, a user-defined type, or an object type.

Verwenden Sie eine separate As Type -Klausel für jede definierte Variable.Use a separate As type clause for each variable being defined. Für eine Variant, die ein Array enthält, beschreibt type den Typ jedes Elements des Arrays, ändert die Variant-Variable aber nicht in einen anderen Typ.For a Variant containing an array, type describes the type of each element of the array, but doesn't change the Variant to some other type.

HinweiseRemarks

Mit der ReDim-Anweisung wird die Größe eines dynamischen Arrays festgelegt bzw. geändert, das bereits mit einer Private-, Public- oder Dim-Anweisung mit leeren Klammern (ohne Dimensions-Subscripts) formal deklariert wurde.The ReDim statement is used to size or resize a dynamic array that has already been formally declared by using a Private, Public, or Dim statement with empty parentheses (without dimension subscripts).

Sie können die ReDim-Anweisung mehrmals verwenden, um die Anzahl der Elemente und Dimensionen in einem Array zu ändern.You can use the ReDim statement repeatedly to change the number of elements and dimensions in an array. Sie können jedoch kein Array eines Datentyps deklarieren und später ReDim verwenden, um das Array in einen anderen Datentyp zu ändern (es sei denn, das Array ist in einer Variant-Variablen enthalten).However, you can't declare an array of one data type and later use ReDim to change the array to another data type, unless the array is contained in a Variant. Wenn das Array in einem Variant-Element enthalten ist, kann der Typ der Elemente mithilfe einer as- **** Type -Klausel geändert werden, es sei denn, Sie verwenden das Preserve -Schlüsselwort, in diesem Fall sind keine Änderungen des Datentyps zulässig.If the array is contained in a Variant, the type of the elements can be changed by using an As type clause, unless you are using the Preserve keyword, in which case, no changes of data type are permitted.

Wenn Sie das Preserve-Schlüsselwort verwenden, können Sie lediglich die Größe der letzten Array-Dimension ändern, die Anzahl der Dimensionen ist nicht veränderbar.If you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all. Wenn Ihr Array beispielsweise nur über eine Dimension verfügt, können Sie die Größe dieser Dimension ändern, da sie die letzte und einzige Dimension ist.For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. Wenn Ihr Array jedoch zwei oder mehr Dimensionen hat, können Sie nur die Größe der letzten Dimension ändern und den Inhalt des Arrays dennoch beibehalten.However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array.

Das folgende Beispiel zeigt, wie Sie die letzte Dimension vergrößern können, ohne dabei bestehende Daten im Array zu löschen.The following example shows how you can increase the size of the last dimension of a dynamic array without erasing any existing data contained in the array.

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

Ebenso können Sie bei Verwendung von Preserve die Größe des Arrays nur durch Ändern der oberen Grenze ändern. Eine Änderung der unteren Grenze erzeugt einen Fehler.Similarly, when you use Preserve, you can change the size of the array only by changing the upper bound; changing the lower bound causes an error.

Wenn Sie ein Array kleiner machen, gehen Daten aus den entfernten Elementen verloren.If you make an array smaller than it was, data in the eliminated elements will be lost.

Beim Initialisieren der Variablen werden numerische Variablen als 0, Zeichenfolgen mit variabler Länge als Zeichenfolge der Länge null ("") und Zeichenfolgen mit fester Länge als mit Nullen angefüllte Zeichenfolge initialisiert.When variables are initialized, a numeric variable is initialized to 0, a variable-length string is initialized to a zero-length string (""), and a fixed-length string is filled with zeros. Variant -Variablen werden auf Empty initialisiert.Variant variables are initialized to Empty. Jedes Element einer Variablen von einem benutzerdefinierten Typ wird so initialisiert, als wäre es eine separate Variable.Each element of a user-defined type variable is initialized as if it were a separate variable.

Eine Variable, die ein Objekt referenziert, muss einem vorhandenen Objekt mit der Set-Anweisung zugewiesen werden, bevor sie verwendet werden kann.A variable that refers to an object must be assigned an existing object by using the Set statement before it can be used. Bis dahin hat die deklarierte Objektvariable den speziellen Wert Nothing, der angibt, dass sie auf keine bestimmte Instanz eines Objekts verweist.Until it is assigned an object, the declared object variable has the special value Nothing, which indicates that it doesn't refer to any particular instance of an object.

Die ReDim-Anweisung fungiert als deklarative Anweisung, wenn die deklarierte Variable nicht auf Modulebene oder Prozedurebene existiert.The ReDim statement acts as a declarative statement if the variable it declares doesn't exist at the module level or procedure level. Wenn später eine andere Variable mit demselben Namen erstellt wird, bezieht sich ReDim selbst in einem breiteren Bereich auf die spätere Variable und verursacht nicht notwendigerweise einen Kompilierungsfehler, selbst wenn Option Explicit wirksam ist.If another variable with the same name is created later, even in a wider scope, ReDim will refer to the later variable and won't necessarily cause a compilation error, even if Option Explicit is in effect. Um derartige Konflikte zu vermeiden, sollte ReDim nicht als deklarierende Anweisung, sondern nur zur Neudimensionierung von Arrays verwendet werden.To avoid such conflicts, ReDim should not be used as a declarative statement, but simply for redimensioning arrays.

Hinweis

Um die Größe eines in einem Variant-Objekt enthaltenen Arrays zu ändern, müssen Sie die Variant-Variable explizit deklarieren, bevor Sie versuchen, die Array-Größe zu ändern.To resize an array contained in a Variant, you must explicitly declare the Variant variable before attempting to resize its array.

BeispielExample

In diesem Beispiel wird mit der ReDim-Anweisung Speicherplatz für Variablen dynamischer Arrays zugeordnet bzw. neu zugeordnet.This example uses the ReDim statement to allocate and reallocate storage space for dynamic-array variables. Dabei wird Option Base als 1 vorausgesetzt.It assumes the Option Base is 1.

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
 MyArray(I) = I ' Initialize array. 
Next I 


Die nächste Anweisung ändert die Größe des Arrays und löscht die Elemente.The next statement resizes the array and erases the elements.

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 


Die folgende Anweisung ändert die Größe des Arrays, löscht jedoch keine Elemente.The following statement resizes the array but does not erase elements.

Redim Preserve MyArray(15) ' Resize to 15 elements. 

Siehe auchSee also

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.