BEISPIEL
BEISPIEL
Dynamische Arrays
Die Anzahl der Feldelemente eines dynamischen Arrays braucht erst zur Laufzeit festgelegt zu werden und
ist im Allgemeinen zur Entwurfszeit noch unbekannt. Dynamische Arrays werden unter anderem auch als
Übergabeparameter in so genannten Parameter-Arrays eingesetzt.
ReDim-Anweisung
Die bei der normalen Array-Deklaration angegebenen Bereichsgrenzen müssen Konstanten sein, Variablen
sind also unzulässig.
Die folgende Sequenz erzeugt die gezeigte Fehlermeldung.
Dim x As Integer
Dim y As Integer
x = 5
y = 17
Dim a(1 To x, 10 To y) As Double
Abbildung 2.11 Fehlermeldung beim Versuch
einer dynamischen Reservierung
Aber das ist noch lange kein Grund zur Resignation! Sie brauchen nur die Dim- (oder auch Private-)Anwei-
sung auf Modulebene mit leeren Klammern auszuführen, und schon haben Sie ein dynamisches Array.
Durch ReDim, welches allerdings nur auf Prozedurebene einsetzbar ist, erfolgt die Festlegung bzw. Ände-
rung der Dimensionen.
Um das fehlgeschlagene Vorgängerbeispiel doch noch zum Laufen zu bringen, ist zunächst auf Modulebene
Folgendes zu deklarieren:
Private a() As Double
Private x As Integer
Private y As Integer
Auf Prozedurebene werden die Dimensionen festgelegt:
x = 10
y = 17
ReDim a(1 To x, 10 To y)
85
Datenfelder (Arrays)
BEISPIEL
BEISPIEL
BEISPIEL
Kapitel 2: Programmieren mit VBA
Preserve-Option
Mit Hilfe der Preserve-Option kann man dafür sorgen, dass trotz mehrmaligem Umdimensionieren der alte
Feldinhalt erhalten bleibt.
Die Anweisung:
ReDim Preserve a(1 To x+1, 10 To y)
fügt eine weitere Zeile zum oben deklarierten Array hinzu, ohne den alten Inhalt zu zerstören.
Beachten Sie:
Sie können mit Preserve nur die obere Grenze ändern.
Die Anzahl der Dimensionen kann mit Preserve nicht geändert werden.
Abfrage der Dimensionen mit LBound und UBound
Falls durch häufiges Umdimensionieren die aktuellen Abmessungen eines dynamischen Arrays nicht mehr
bekannt sind, können diese mit den Funktionen LBound und UBound ermittelt werden. Außer dem Feld-
namen muss diesen Funktionen der Index der abzufragenden Dimension übergeben werden.
Der Befehl:
UBound(a,2)
liefert für das Vorgängerbeispiel den Wert 17 (obere Grenze der zweiten Dimension).
Löschen von Arrays mit Erase
Wenden Sie die Erase-Anweisung auf ein dynamisches Datenfeld an, so wird das gesamte Array gelöscht
und der belegte Speicher wieder freigegeben. Eine Neudimensionierung ist mit ReDim möglich.
Die Anweisungsfolge:
Erase a
ReDim a(10,10)
löscht das Array
a
und legt danach die Abmessungen neu fest.
Wird Erase auf ein statisches Array angewendet, so werden alle Elemente auf null (0) gesetzt. In String-
Arrays werden Nullstrings ("") zugewiesen.
86

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.