Variablen und Konstanten Variablen und Konstanten werden benötigt, um sich in Prozeduren Werte zu merken oder zu übergeben. Es gibt numerische Werte (1 / 10,9) und es gibt alphanumerische Zeichenfolgen (Müllerstr. 6). In VBA gibt es auch noch Objektvariablen, die gesamte Anwendungen beinhalten können oder Objekte aus Anwendungen. Bezeichner (Identifier) Variablen und Konstanten bekommen einen Namen. Anhand dieses Namens können auf die Werte zugegriffen werden. Die Namen sind frei wählbar, solange sie nicht Schlüsselwörtern das sind reservierte Wörter, die von VBA selbst bereits belegt sind entsprechen. Die Bezeichnung bzw. der Namen einer Variablen oder einer Konstante sollten darauf hinweisen, für was die Werte darin benötigt werden. Die Namen müssen folgenden Regeln entsprechen: Der Name muss mit einem Buchstaben beginnen. Der Name kann Buchstaben, Zahlen oder Unterstriche enthalten, aber keine Punkte, Leerzeichen oder andere Sonderzeichen. Der Name kann groß- oder kleingeschrieben sein. Hinweis: Groß- und Kleinschreibung wird nicht unterschieden (VBA ist nicht "case sensitive")! Der Name darf bis zu 255 Zeichen lang sein, muss aber aus einer zusammenhängenden Zeichenfolge bestehen. Variablen Variablen bekommen Werte zugewiesen, die jederzeit wieder geändert werden können. Deklaration Durch die Deklaration einer Variablen wird diese in VBA eingetragen und kann genutzt werden. Die Deklaration muss in VBA nicht ausdrücklich geschehen (Der Zwang dazu ist normalerweise ausgeschaltet). So werden Variablen automatisch bei der ersten Verwendung entsprechend des Wertes, der ihnen zugewiesen wird deklariert. Folgende Deklarationsarten gibt es: Implizite Variablendeklaration Variablen müssen vor ihrer ersten Verwendung nicht extra deklariert werden. Option Explicit muss nicht im Deklarationsteil des Moduls stehen. Explizite Variablendeklaration Variablen müssen vor ihrer ersten Verwendung unbedingt deklariert werden. Option Explicit muss im Deklarationsteil des Moduls stehen. Falk Wolf Schneider Seite 1 von 5
Die zwingende explizite Variablendeklaration für alle neuen Module lässt sich in der Entwicklungsumgebung standardmäßig aktivieren unter dem Menüpunkt "Extras" > "Optionen". Im Register "Editor" des sich öffnenden Dialogfensters "Optionen" muss das Kontrollfeld "Variablendeklaration erforderlich" aktiviert werden - durch Anklicken. Hinweis: Es empfiehlt sich die Explizite Variablendeklaration, da zum Einen so selbst ausdrücklich festgelegt werden kann, welchem Datentyp eine Variable entsprechen soll, und zum Anderen weil so leichter auffällt, wenn bei der Verwendung einer Variablen ein falscher Variablennamen angegeben wurde. Variablen und Konstanten, die im Deklarationsteil des Moduls dimensioniert werden, habe in allen Prozeduren dieses Moduls Gültigkeit. Werden diese in einer Prozedur deklariert, dann gelten sie nur innerhalb dieser Prozedur. Syntax 1. Die Deklaration einer Variable wird mit dem Befehl Dim vorgenommen. 2. Nach dem Befehl folgt der Variablenname getrennt durch ein Leerzeichen. a. Mit As - getrennt durch Leerzeichen - wird dem Namen ein Datentyp zugewiesen. b. Mit dem Typkennzeichen direkt an dem Namen angefügt. 3. Optional können weitere Variablendeklarationen - durch Komma ", " getrennt - folgend in der gleichen Zeile vorgenommen werden. Dim Variablenname1 As Datentyp[, Variablenname2 As Datentyp,... ] oder Dim Variablenname1Typkennzeichen[, Variablenname2Typkennzeichen,... ] Hinweis: Sollte bei der Variablendeklaration auf die Datentypzuweisung verzichtet werden, erhält die Variable automatisch den Datentyp Variant. Dieser Datentyp kann für alle Arten von Variablen genutzt werden, verbraucht aber den meisten Speicherplatz. Die Variablen bekommen schon während der Deklaration einen Wert zugewiesen: Variablen mit numerischen Datentypen = 0 Variablen mit alphanumerischen Datentypen (String) = "" (leere Zeichenfolge) Variablen, die Variant sind = Empty (leer) Gültigkeit Es gibt verschiedene Räume für die Gültigkeit von Variablen - je nachdem, wie sie deklariert werden und ob sie, im Deklarationsteil des Moduls oder in einer Prozedur angelegt werden. So können Variablen auch innerhalb des ganzen Projekts verwendet werden. Befehl Ort Gültigkeit Private Moduldeklaration Alle Prozeduren des Moduls Public Moduldeklaration Gesamtes Projekt Dim Prozedur aktuelle Prozedur Falk Wolf Schneider Seite 2 von 5
Konstanten Konstanten bekommen feste Werte zugewiesen. Diese selbst können nicht geändert werden. Konstanten können aber in Berechnungen und Funktionen einbezogen werden. Const Konstantenname1 [As Datentyp] = Ausdruck [, Konstantenname2 [As Datentyp] = Ausdruck,... ] 1. Die Deklaration einer Konstante wird mit dem Befehl Const vorgenommen. 2. Nach dem Befehl folgt der Konstantenname getrennt durch ein Leerzeichen. 3. Optional kann mit As - getrennt durch Leerzeichen - dem Namen ein Datentyp zugewiesen werden. 4. mit dem durch Leerzeichen getrenntem Gleichheitszeichen " = " wird der Konstante ein Wert zugewiesen, der auch berechnet werden kann. 5. Optional können weitere Variablendeklarationen - durch Komma mit Leerzeichen ", " getrennt - folgend in der gleichen Zeile vorgenommen werden. Hinweis: Durch die reine Zuweisung des Wertes zu einer Konstanten, wird der datentyp der Konstante automatisch festgelegt. Eine ausdrückliche Datentypzuweisung ist also nicht notwendig. Bei der Deklaration einer Konstante im Deklarationsbereich des Moduls können mit vorangestellten Private bzw. Public die Gültigkeitsräume der Konstante festgelegt werden - entsprechend der bei Variablen. Integrierte Konstanten VBA stellt eine ganze Reihe von vordefinierten Konstanten bereit. Diese Konstanten haben meistens Zahlenwerte, die zur leichteren Identifizierung in verständlichen Konstantennamen verpackt sind. Um Konstanten verwenden zu können, müssen in dem Projekt die jeweiligen Objektbibliotheken eingebunden sein. Die zwei Anfangsbuchstaben verraten, zu welcher Anwendung die Konstanten gehören: vb VBA-Konstanten z. B. vbyesno wd Word-Konstanten z. B. wdaligntableft xl Excel-Konstanten z. B. xlfixedwidth ac Access-Konstanten z. B. accmdfindnext ad Konstanten für Datenbankzugriff (ADO) z. B. adlockoptimistic pp PowerPoint-Konstanten z. B. ppeff ectcoverright mso Office-Konstanten z. B. msopictureautomatic fm MSForms-Bibliothek für Formulare z. B. fmactionpaste Datentypen Die Zuweisung eines Datentyps zu einer Variablen oder einer Konstante legt fest, welche Werte diese Variable annehmen kann und wieviel Speicherplatz für sie reserviert wird. Falk Wolf Schneider Seite 3 von 5
Datentyp Typkennzeichezweck Verwendungs- Wertebereich Integer % Ganze Zahlen -32.768 bis 32.767 Long & Ganze Zahlen -2.147.483.648 bis 2.147.483.647 Single! Fließkommazahlen Negativer Wertebereich: -3.4E+38 bis -1.4E-45 Positiver Wertebereich: 1.4E-45 bis 3.5E38 (7 Ziffern Genauigkeit) Double # Fließkommazahlen Negativer Wertebereich: -1.8E+308 bis -4.94E-324 Positiver Wertebereich: 4.94E-324 bis 1.8E308 (15 Ziffern Genauigkeit) Currency @ Fließkommazahlen -9.22E+14 bis 9.22E+14 (Der Datentyp besitzt 15 Vor- und 4 Nachkommastellen und ist für genaue Berechnungen mit Währungen gedacht.) String $ Zeichenfolgen Eine Zeichenfolge kann 0 bis 65.535 Zeichen umfassen. Date Nicht Datum und Zeitangaben Datum: 01. Januar 100 bis 31. Dezember 9999 Zeit: 00:00:00 bis 23:59:59 Boolean Nicht Logische Werte True oder False (Wahr oder Falsch) Variant Nicht Beliebige Daten Numerischer Wert im Bereich des Datentyps Double, eine beliebige Zeichenfolge oder eine Datums- bzw. Zeitangabe Hinweis: Es ist sehr wichtig, dass einer Variablen nur der Datentyp zugewiesen wird, den sie wirklich braucht. Datenfelder (Arrays) Mit Datenfeldern können mehrere Werte des gleichen Datentyps in einer Variablen gespeichert werden. So können über Schleifen mit dem Index der Variablen auf diese zugegriffen werden, also Werte ausgelesen oder zugewiesen. Eindimensionale Arrays Eindimensionale Arrays sind eine Reihe von Werten. Es wird für die Deklaration ein Name, die maximale Anzahl der Werte und der Datentyp benötigt. 1. Die Deklaration eines Array wird mit dem Befehl Dim vorgenommen. 2. Nach dem Befehl folgt der Arrayname getrennt durch ein Leerzeichen. a. In das Klammerpaar (), das direkt an den Arraynamen geschrieben wird, wird die Obergrenze des Index geschrieben. Zum Beispiel bei 5 Werten - also der Gesamtgröße des Array - wäre der höchste Indexwert 4, da der Index mit 0 beginnt. b. Mit As - getrennt durch Leerzeichen - wird dem Namen ein Datentyp zugewiesen. c. Mit dem Typkennzeichen direkt an dem Namen angefügt. 3. Optional können weitere Arraydeklarationen - durch Komma ", " getrennt - folgend in der gleichen Zeile vorgenommen werden. Dim Arrayname(IndexObergrenze) As Datentyp Falk Wolf Schneider Seite 4 von 5
Es ist auch möglich, eine Indexuntergrenze festzulegen, womit zum Beispiel der erste Wert auch den Indexwert 1 bekommen kann: Dim Arrayname(IndexUntergrenze To IndexObergrenze) As Datentyp Hinweis: Eine weitere Möglichkeit ist, dass vor der Arraydeklaration - gerne auch in der Moduldeklaration die Anweisung Option Base 1 geschrieben wird. Diese Anweisung setzt die Indexuntergrenze auf 1. Mehrdimensionale Arrays Mehrdimensionale Arrays sind eine Reihe, die noch Unterreihen hat. Bei einem zweidimensionalen Array ist das vergleichbar mit einer Matrix aus zwei Richtungen, z.b. Spalten und Zeilen. Bei einem dreidimensionalen Array kämen zum Beispiel im Vergleich noch die Tabellenblätter hinzu. Grundsätzlich gibt es bei der Angabe der Dimension mehrdimensionaler Arrays die gleichen Möglichkeiten wie bei einem eindimensionalen Array. Dim Arrayname(Dimension1, Dimension2, ) As Datentyp Dynamische Arrays Manchmal ist zu Beginn eines Prozedurablauf noch nicht ersichtlich, welche Dimension das Array benötigt. Da bei der Deklaration mit Dim feste Werte angegeben werden müssen, ist es manchmal von Vorteil bei der Deklaration noch keine Dimensionieren anzugeben: Dim Arrayname() As Datentyp Vor der ersten Benutzung des Arrays muss dann eine Dimensionieren erfolgen, die später auch noch geändert werden kann. Hier können auch Variablen zur Dimensionierung verwendet werden. Der Datentyp wurde bereits bei der Deklaration festgelegt ReDim Arrayname(Dimension1, Dimension2, ) Hinweis: Allerdings werden bei der Verwendung von ReDim alle bereits dem Array zugewiesenen Werte gelöscht. Deshalb können mit Preserve die Werte erhalten bleiben, die noch in die neue Dimension des Arrays passen. ReDim Preserve Arrayname(Dimension1, Dimension2, ) Array löschen Um Speicherplatz freizugeben, ist es günstig ein Array zu löschen, wenn es nicht mehr gebraucht wird: Erase Arrayname Falk Wolf Schneider Seite 5 von 5