Arrays gehören zu den sinnvollen und praktischen Werkzeugen bei der Programmierung in VBA. Es handelt sich um Datenfelder, die Daten je nach der Dimensionierung aufnehmen können. Man kann sich ein Array wie eine Tabelle vorstellen. der Index des Array entspricht dabei einer Tabellenspalte. Es handelt sich aber immer um eine Variable, die nur verschiedene Daten - getrennt voneinander - aufnimmt. Somit haben alle Datenelemente den Datentyp, der für das Array selbst deklariert wurde. Folgende Tabellen sollen den Aufbau eines Array verdeutlichen:
Tabelle 1:
Array mit Index |
Beispielwerte |
Beschreibung |
MyArray(0) |
Hose |
hier eindimensional - für jede Zeile wird der Index hochgezählt. |
MyArray(1) |
Jacke |
|
MyArray(2) |
Hemd |
|
MyArray(3) |
Rock |
Tabelle 2:
Array mit Index |
Beispielwerte |
Beschreibung |
||
MyArray(0,0) |
MyArray(0,1) |
rot |
zweidimensional, jede Zelle entspricht praktisch einer Kombination des Array. So kann jede Zelle direkt angesprochen werden. |
|
MyArray(1,0) |
MyArray(1,1) |
blau |
||
MyArray(2,0) |
MyArray(2,1) |
grün |
||
MyArray(3,0) |
MyArray(3,1) |
braun |
||
MyArray(4,0) |
MyArray(4,1) |
gelb |
In Tabelle 1 ist z.B. dem Array(0) der Wert Hose zugewiesen, dem MyArray(1) der Wert Jacke und so weiter.
In Tabelle 2 sehen Sie im linken Teil die Datenfelder, mit denen die jeweiligen Tabellenzellen angesprochen werden können, im rechten Teil sind dazu ein paar Beispielwerte eingesetzt. So hat z.B. MyArray(1,1) den Wert blau, MyArray(1,0) ist leer, MyArray(3,0) hat den Wert braun und MyArray(3,1) ist wieder leer.
Das ist aber nur ein Beispielmodell zur Veranschaulichung eines Arrays. Durch die weiteren Dimensionen können praktisch Werte weiter gruppiert werden.
Arrays werden sowohl in Funktionen, Klassenmodulen, aber auch in einfachen Prozeduren eingesetzt. Jedes Datenelement kann also direkt als Element des Array mit dem Index angesprochen werden. Es wird grundsätzlich zwischen ein- und mehrdimensionalem Array unterschieden.
Das einfache Array ist das eindimensionale Array. Dabei werden die Daten ähnlich einer Tabelle mit einer Spalte hintereinander als Element des Array gespeichert. Der Index des Array beginnt ohne besondere Deklaration mit dem Element 0. Dies kann man auch über eine entsprechende Deklaration verschieben. Ob das wirklich sinnvoll ist, muss jeder nach seinen eigenen Aufgabenstellungen entscheiden. Auf jeden Fall kann es zu einer besseren Lesbarkeit des Codes und ggf. zu einer Vereinfachung bei Einsatz von Variablen führen. Mit der Open Base Anweisung, die vor allen Deklarationen in einem Modul stehen muss, können für alle Datenfelder der erste Index festgelegt werden. Im folgenden Code werden ein paar Beispiele für Deklarationen von Arrays dargestellt:
Für Arrays stehen - teilweise erst ab der Wordversion Word 2000 - besondere Funktionen in VBA zur Verfügung:
Funktion |
Beschreibung |
Beispiel |
LBound |
gibt die untere Grenze eines Array zurück |
Untergrenze = LBound(MyArray) |
UBound |
gibt die obere Grenze eines Array zurück. |
Obergrenze = UBound(MyArray) |
IsArray |
prüft, ob es sich bei einer Variablen um ein Datenfeld handelt. |
If IsArray(MyArray) Then …. |
ReDim |
Deklaration und Dimensionierung eines Array |
ReDim MyArray(1 To 15) |
ReDim Preserve |
Neudimensionierung eines Array, bisher eingelesen Daten bleiben erhalten |
ReDim Preserve MyArray(35) |
WordBasic.SortArray |
Befehl aus WordBasic (bis Word 6.0), der aber auch ggf. noch in VBA funktioniert. Sortiert ein Array. Bitte vor dem Einsatz unbedingt die Ergebnisse testen! |
Word.Application.WordBasic _
SortArray MyArray() |
Split |
teilt ein String auf und gibt es ggf. in ein Datenfeld zurück (ab Word 2000) |
MyArray = Split(MyText) |
Join |
fügt ein Datenfeld wieder zu einem String zusammen (ab Word 2000) |
MyText = Join(MyArray) |
Eine weitere praktische Anwendung eines Array ist die
Übergabe an Steuerelemente einer Userform, bei dem mit einer entsprechenden
Eigenschaft einzelne Elemente angesprochen werden können. Dies sind standardmäßig
die Listbox und die Combobox. Bei einem eindimensionalen Array kann dies
entsprechend der Übergabe an die Eigenschaft des Steuerelements übergeben
werden. Ein
Array kann auch an die Eigenschaft Column
des jeweiligen Steuerelements übergeben werden. Dann muss sichergestellt
sein, dass die Eigenschaft Columncount
vorher entsprechend angepasst wurde. Im folgenden Beispiel wird ein eindimensionales Array direkt an die Steuerelemente übergeben:
In den Zeilen 6 bis 8 wird das Array durch eine Schleife mit Zahlen gefüllt. Im folgenden Beispiel sehen Sie die Auswirkungen der Funktionen LBound und UBound bei ein- oder mehrdimensionalem Array:
Eine besonders angenehme Anwendung für Arrays bietet die Trennung von Strings oder anderen Daten und das Einlesen der einzelnen Elemente in ein Array, die dann wieder einzeln ausgegeben werden können. Die Teilung des Strings wird ab Word 2000 mit Hilfe des Befehls Split erfüllt. Diese Funktion steht leider in Word 97 nicht zur Verfügung.
Wird versucht, im Code ein Array mit einem Index anzusprechen, der nicht definiert ist, so wird ein Laufzeitfehler ausgelöst.