![]() |
![]() |
|||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| home | |
© 2005 by Friedel Schmidt E-Mail |
|||||||||||||||||||||
| impressum | feedback | home | | ||||||||||||||||||||||
Inhaltsverzeichnis Suchen Links |
Variablen in Makros Versionen: Alle
Sinnvollerweise sollte man dem Namen der Variablen ein Kürzel vorne anstellen, aus dem der Variablentyp hervorgeht, das erleichtert einiges beim Lesen des Codes:
Wie werden Variablen erzeugt? Die einfachste Art eine Variable zu erzeugen ist das Verwenden derselben in einem Code. Allein schon durch die Verwendung einer Variablen in einer Anweisung wird VBA mitgeteilt dass eine Variable erzeugt werden soll. Das nennt man indirekte oder implizite Variablendeklaration. Diese Vorgehensweise ist zwar auf den ersten Blick Benutzerfreundlich, kann jedoch diverse Probleme bereiten (und tut es in der Regel auch). Hat man zum Beispiel die Variable Irgendwas erzeugt und schreibt sie bei der weiteren Verwendung falsch, z.B. Irgenwas, kommt es, abhängig davon an welcher Stelle im Code die falsche Schreibweise verwendet wird, zu einem Laufzeitfehler oder VBA erzeugt eine neue Variable mit diesem (falschen) Namen. Die implizite Variablendeklaration ist auch und besonders in komplexen Makros problematisch, wenn man davon ausgeht gerade eine (implizite) Variable zu erzeugen aber in Wirklichkeit den Namen einer bereits verwendeten Variablen verwendet - in diesem Fall wird der vorher gespeicherte Wert unbeabsichtigt überschrieben! Das erzeugt zwar keinen Laufzeitfehler, kann aber das gewünschte Resultat auf den Kopf stellen und die Ursache des Problems ist kaum zu lokalisieren. Aus diesen und anderen Gründen gibt es die Möglichkeit, explizite Variablendeklarationen vorzunehmen. Variablen explizit zu deklarieren, hat folgende Vorteile:
Zur expliziten Deklaration einer Variablen benutzt man die DIM-Anweisung mit folgender Syntax: Dim datBeginn Diese Anweisung signalisiert VBA, eine Variable mit dem Namen "datBeginn" zu erzeugen. (Das Schlüsselwort Dim ist übrigens die Abkürzung für das Wort Dimension). Da alle Variablen, die nur mit dem Schlüsselwort Dim erzeugt werden, den Datentyp Variant erhalten und im Beispiel der Inhalt der Variante ein Datum sein soll ist das allerdings noch nicht alles. Es muss noch der korrekte Variablentyp (oder Datentyp) zugewiesen werden. Dies geschieht durch folgende Syntax: Dim datBeginn As Date Erst durch diese Anweisung weiß VBA das eine Variable vom Typ Datum erzeugt werden soll. Der Übersichtlichkeit halber sollte man die Variablendeklaration nach einem eigenen System anordnen. Zuerst die Objekttypen, dann nach ihrem Speicherbedarf absteigend die übrigen Variablen. Variablen eines Typs sollte man möglichst in einer Zeile deklarieren: Dim wksQuelle As Worksheet, wksZiel As Worksheet Dim arrWoche(1 to 20) As Integer Dim dblZeile As Double Dim intCounter As Integer, intSpalte As Integer Dim strMsg As String Diese Schreibweise ist falsch: Dim intCounter, intZeile, intSpalte As Integer Eine weit verbreitete Fehlinformation lautet, Variablen könne mit der vorgenannten Deklaration der Integer-Typ zugewiesen werden. Hier haben aber zum Programmstart die Variablen intCounter und intZeile den Variant-Typ, ausschließlich die Variable intSpalte hat den Integer-Typ. Wo sind die Variablen verfügbar? Variablen auf Prozedurebene Eine Variable, die innerhalb einer Prozedur deklariert wurde, steht auch nur innerhalb dieser Prozedur zur Verfügung. In der Praxis sieht das so aus, dass die Variable nur so lange existiert, wie VBA die entsprechende Prozedur ausführt. Variablen auf Modulebene Manchmal ist es jedoch nützlich, dass mehrere Prozeduren auf eine Variable zugreifen können. Wird ein Wert häufig benötigt, ist es effizienter, diesen Wert einmal zu berechnen, ihn in einer Variablen zu speichern und diese Variable in unterschiedlichen Prozeduren zu verwenden, als diesen Wert immer wieder neu zu berechnen. Mit VBA kann man Variablen deklarieren, auf deren Inhalt mehrere Prozeduren gleichzeitig zurückgreifen können. Steht eine Variable allen Prozeduren in einem Modul zur Verfügung, befindet sich diese Variable auf Modulebene. Eine Variable auf Modulebene ist nur gültig für das Modul, in dem die Variable deklariert wurde. Variablen mit demselben Namen, aber unterschiedlichen Gültigkeitsbereichen Innerhalb eines Gültigkeitsbereichs der Variablen muss der Variablenname eindeutig sein. Genauso wie in einer Prozedur keine zwei Variablen mit dem gleichen Namen deklariert werden dürfen, so dürfen aus den gleichen Gründen in einem Modul auch keine zwei Variablen mit dem gleichen Namen deklariert werden, die beide auf Modulebene Gültigkeit haben. Befinden sich jedoch zwei Variablen mit identischen Namen in unterschiedlichen Gültigkeitsbereichen, werden dadurch keine Probleme verursacht. Wenn Variablen mit den gleichen Namen sich in unterschiedlichen Gültigkeitsbereichen befinden, benutzt VBA die Variable mit dem lokalsten Gültigkeitsbereich. "Werthaltigkeit" - die Lebensdauer von Variablen Mit der Lebensdauer wird die Länge der Zeit bezeichnet, die eine bestimmte Variable ihren zugewiesenen Wert behält. Zugewiesene Werte in Variablen existieren nur so lange, wie die Variable in ihrem Gültigkeitsbereich aktiv ist. Variablen auf Prozedurebene werden jedes Mal neu erzeugt, wenn die Ausführung einer Prozedur beginnt. Sobald die Ausführung beendet ist, werden diese Variablen gelöscht. Oder genauer gesagt, lokale Variablen sind solange undefiniert, das heißt ohne Kontext, bis die Ausführung der Prozedur beginnt, in der die Deklaration der Variablen stattfindet. Sobald das Ende der Prozedur, in der die Variablen deklariert wurden, erreicht ist, befindet sich die Variable wieder in ihrem undefinierten Zustand. Variablen, die auf Modulebene deklariert werden, existieren so lange wie VBA eine Prozedur in diesem Modul ausführt. Wenn VBA eine Prozedur ausführt, wird zunächst das gesamte Modul durchsucht, in dem sich die Prozedur befindet, und es werden alle Variablen auf Modulebene erzeugt. Solange VBA eine Prozedur in diesem Modul ausführt, bleiben die Werte der Variablen auf Modulebene erhalten. Variablendeklaration erzwingen Variablentypen |