Datenfelder - Array

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.

Deklarationen von Array

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:

               
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Sub Deklarationen_Array() 

     'eindimensionales Array
    Dim MyArray(1 To 10) As Variant 
     
    Dim MyArray(10) As Variant 
     
    ReDim MyArr(10) As Variant 
     
    ReDim Preserve MyArr(15) As Variant 
     
     'mehrdimensionales Array
    Dim MyArray(0 To 5, 1 To 10) As Variant 
     
    Dim MyArray(5, 10) As Variant 
     
    ReDim MyArr(5, 10) As Variant 
     
     'Besonderheiten bei ReDim Preserve
    ReDim Preserve MyArr(5, 15) As Variant 
     
     
     'Dimensionierung mit Variablen
    Dim x As Long 
    x = 5 
     
    ReDim MyArr(5, x) As Variant 
     
    ReDim MyArr(x, 5) As Variant 
     
End Sub 


  • In Zeile 4 wird das Array MyArray für insgesamt zehn Elemente dimensioniert. Der Index beginnt dabei mit 1. Das erste Element wird also mit MyArray(1) angesprochen.
  • In Zeile 6 wird dagegen das Array für elf Elemente dimensioniert, da der erste Index bereits 0 ist.
  • In Zeile 10 wird ein vorher dimensioniertes Array neu dimensioniert, ohne dass die bisher im Array gespeicherten Daten verloren gehen. Bei den mehrdimensionalen Arrays gibt es da Abweichungen. Jede Dimension des Array wird durch ein Komma getrennt als Index angesprochen. Die Deklarationen finden Sie in den Zeilen 13 bis 17.
  • In Zeile 20 soll das Array neu dimensioniert werden, ohne dass die gespeicherten Daten verloren gehen. Der Zusatz Preserve wirkt sich dabei immer nur auf die letzte Dimension des Array aus.
  • In den Zeilen 24 bis 29 wird ein mehrdimensionales Array mit Variablen dimensioniert.

 

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:

               
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
Sub ArrayDeklaration() 

    Dim i           As Long 
    ReDim strArr(5) As Variant 
     
    For i = 0 To 5 
        strArr(i) = i 
    Next i 
     
     'ListBox auf Userform: ListBox1
    ListBox1.List = strArr() 
     
     'ComboBox auf Userform: ComboBox1
    ComboBox1.List = strArr() 

End Sub 


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:

               
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
Sub Grenzen_Array() 
     'Funktion der Ober- und Untergrenzen
     'Ubound / Lbound
    Dim Obergrenze As Long 
    Dim Feld(1 To 10, 5 To 15, 10 To 25)     ' Datenfeldvariablen
         ' deklarieren.
    Dim EinFeld(10) 
    Obergrenze = UBound(Feld, 1)     ' Liefert 10.
    Obergrenze = UBound(Feld, 3)     ' Liefert 25.
    Obergrenze = UBound(EinFeld)      ' Liefert 10.
     
    Dim Untergrenze As Long 
    Untergrenze = LBound(Feld, 1)    ' Liefert 1.
    Untergrenze = LBound(Feld, 3)    ' Liefert 10.
    Untergrenze = LBound(EinFeld)     ' Liefert 0 oder 1, je nach
                                      ' Einstellung von Option Base.
End Sub 

 

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. 

 



Diese Seite zu Mister Wong hinzufügen
Diese Seite zu ecure.del.icio.us hinzufügen
Diese Seite zu webnews hinzufügen
Diese Seite zu Google Bookmarks hinzufügen
Diese Seite zu linkarena hinzufügen
Diese Seite zu Yahoo hinzufügen






Interessante Links

Microsoft: Informationen zu Array mit VBA Microsoft: Informationen zu Array mit VBA






Für weitere Infos bitte auf den Text klicken

http://www.prawi-officewelt.de
 .::. nach oben .::.
 
 
©2008 - 2024 www.VBA-Wordwelt.de - alle Rechte vorbehalten
 
Kontakt | Impressum
los Suche

Cookies speichern Informationen lokal auf Ihrem Rechner, ohne die Verwendung kann der Funktionsumfang beeinträchtigt werden. Weitere Informationen


Annehmen