Arrays

Arrays – auch Datenfelder genannt – bieten die Möglichkeit, mehrere gleichartige Daten in einer Art Liste zu speichern und über einen Index darauf zuzugreifen. Array können ein- oder mehrdimensional sein. Dieser Artikel zeigt, wie Sie Arrays deklarieren, diese mit Daten füllen und die gewünschten Informationen wieder abrufen. Außerdem lernen Sie eine Reihe VBA-Anweisungen kennen, mit denen der Umgang mit Arrays noch viel leichter wird.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1201_Arrays.mdb.

Array-Datentyp

Ein Array kann beliebige Datentypen annehmen. Die einzige Einschränkung ist: Jedes Element des Array muss den gleichen Datentyp besitzen. Dies ist jedoch keine große Einschränkung, denn die meisten Anwendungen von Array basieren ohnehin auf gleichartigen Daten.

Einfache Beispiele

Im einfachsten Fall ist ein Array zweidimensional. Das bedeutet, dass Sie für jeden Indexwert des Array entsprechend seiner Größe einen Wert im Array speichern können.

Wofür benötigt man solche Konstrukte Nun, Sie könnten zum Beispiel zehn gleichartige Werte benötigen, die Sie in entsprechenden Variablen speichern – etwa so:

Dim str1 As String
Dim str2 As String
Dim str3 As String
...
str1 = "Müller"
str2 = "Meier"
str3 = "Schmitz"

Mit diesen Variablen können Sie nun verschiedene Dinge im Code anstellen. Dies hat nur zwei Nachteile: Erstens müssen Sie jeden Zugriff auf einen dieser Werte separat durchführen, auch wenn Sie mal eben die Werte aller Variablen ausgeben möchten. Mal eben die Daten aus einer Tabelle in die Variablen schreiben Macht zehn Anweisungen. Die Daten im Debug-Fenster ausgeben Wieder zehn Anweisungen. Und der zweite Nachteil: Wenn ein elfter Wert hinzu kommt, müssen Sie den kompletten Code anpassen.

Für solche Fälle gibt es Array. Für ein Array benötigen Sie nur ein einzige Variable, die beliebig viele Werte aufnimmt. Sie können gleich bei der Deklaration festlegen, wieviele Werte dies sind oder die Obergrenze später anpassen.

Schauen wir uns an, wie dies funktioniert. Wenn Sie beispielsweise eine Variable mit vier Werten verwenden möchten, deklarieren Sie diese wie folgt:

Dim strZahlen(3)

Wieso lautet der Wert in Klammern 3, wenn wir doch drei Werte benötigen Ganz einfach: Der hier angegebene Wert gibt den Wert des größten Index-Eintrags an. Normalerweise beginnt die Zählung des Index bei Arrays bei 0, also können Sie die vier Indexwerte 0, 1, 2 und 3 verwenden.

In der folgenden Prozedur versuchen wir, mehr als diese vier Einträge zu füllen:

Public Sub EinfachesArray()
     Dim strZahlen(3) As String
     strZahlen(0) = "Null"
     strZahlen(1) = "Eins"
     strZahlen(2) = "Zwei"
     strZahlen(3) = "Drei"
     strZahlen(4) = "Vier"
End Sub

Dies führt zu dem Fehler aus Bild 1, und zwar in der Zeile, die versucht, einen Wert für den Index 4 zu vergeben.

Fehler beim Versuch, einen nicht vorhandenen Eintrag im Array zu referenzieren

Bild 1: Fehler beim Versuch, einen nicht vorhandenen Eintrag im Array zu referenzieren

Die Tatsache, dass der erste Indexwert 0 lautet, ist nicht unumstößlich. Wenn Sie im Kopf des betroffenen VBA-Moduls die folgende Zeile einfügen, beginnt die Zählung bei 1:

Option Base 1

Der Fehler bei der obigen Prozedur tritt nun nicht erst in der vierten, sondern direkt in der ersten Zeile auf: den Index mit dem Wert 0 gibt es nämlich nun nicht mehr. Normalerweise benötigen Sie aber keine Index-änderung – es sei denn, Sie möchten Daten zwischen einem Array und einem anderen Objekt hin- und hertransferieren, dessen Index erst bei 1 beginnt. Dann können Sie besser den kleinsten Index mit Option Base festlegen als überall 1 abzuziehen oder hinzuzuaddieren, um mit gleichen Indexwerten arbeiten zu können.

Indexbereich

Sie können sich auch komplett von den vom System oder von Option Base vorgegebenen Index-Grenzen freimachen. Dazu geben Sie einfach eigene Indexgrenzen an – die folgende Routine läuft dann ohne Fehler durch:

Public Sub EinfachesArrayMitBereich()
     Dim strZahlen(0 To 4) As String
     strZahlen(0) = "Null"
     strZahlen(1) = "Eins"
     strZahlen(2) = "Zwei"
     strZahlen(3) = "Drei"
     strZahlen(4) = "Vier"
End Sub

Eigentlich ist die Angabe des Indexbereichs ohnehin die sinnvollste Art, ein Array zu deklarieren – vorausgesetzt, Sie kennen die Dimensionen des Arrays überhaupt bereits beim Deklarieren.

Ein- und mehrdimensionale Array

Die bisher vorgestellten Beispiele basierten auf eindimensionalen Array. Ein Array kann aber durchaus mehrere Dimensionen annehmen.

Wenn Sie beispielsweise ein Array mit zwei mal zwei Elementen deklarieren und mit entsprechenden Werten füllen möchten, verwenden Sie die folgende Routine:

Public Sub ZweiMalZwei()
     Dim intZahlen(1 To 2, 1 To 2) As Integer
     intZahlen(1, 1) = 1
     intZahlen(1, 2) = 2
     intZahlen(2, 1) = 3
     intZahlen(2, 2) = 4
End Sub

Arrays durchlaufen

Wenn Sie die Indexgrenzen eines Array kennen, können Sie die im Array gespeicherten Werte problemlos mithilfe einer Schleife durchlaufen.

Dazu verwenden Sie einfach eine For…Next-Schleife mit einer Laufvariable, die Sie später als Index für den Zugriff auf die im Array gespeicherten Werte verwenden:

Public Sub EinfachesArrayMitBereich()
     Dim strZahlen(0 To 4) As String
     Dim i As Integer
     strZahlen(0) = "Null"
     ... weitere Zuweisungen
     For i = 0 To 4
         Debug.Print strZahlen(i)
     Next i
End Sub

Indexgrenzen ermitteln

Auch wenn Sie die Indexgrenzen nicht kennen, können Sie ein Array problemlos durchlaufen. Die Grenzen ermitteln Sie dabei mit den beiden Funktionen UBound und LBound, denen Sie einfach den Namen der Array-Variablen übergeben:

Public Sub IndexgrenzenErmitteln()
     Dim strZahlen(3) As String
     Dim i As Integer
     strZahlen(0) = "Null"
     ... weitere Zuweisungen
     Debug.Print "Untere Grenze: " & LBound(strZahlen)
     Debug.Print "Obere Grenze: " & UBound(strZahlen)
     For i = LBound(strZahlen) To UBound(strZahlen)
         Debug.Print strZahlen(i)
     Next i
End Sub

Indexgrenzen zur Laufzeit einstellen

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar