Einführung in Variablen, Konstanten und Datentypen

Sie müssen Werte häufig temporär speichern, wenn Sie mit Visual Basic Berechnungen ausführen. Es kann z.B. vorkommen, dass Sie mehrere Werte berechnen, vergleichen und, abhängig vom Resultat des Vergleichs, unter­schiedliche Operationen auf ihnen ausführen wollen. Sie müssen die Werte speichern, um sie vergleichen zu können, aber Sie brauchen sie nicht in einer Eigenschaft zu speichern.

Variablen

In Visual Basic können Sie Variablen verwenden, um Werte während der Ausführung einer Anwendung zeitweilig zu speichern. Variablen haben einen Namen (das Wort, das Sie zum Verweisen auf den Wert verwenden, den die Variable enthält) und einen Datentyp (dadurch wird festgelegt, welche Art von Daten die Variable speichern kann).

Sie können sich eine Variable wie einen Platzhalter im Speicher für einen unbekannten Wert vorstellen. Nehmen wir z.B. an, Sie entwickeln ein Programm für einen Obststand, das den Verkauf von Äpfeln registrieren soll. Sie kennen weder den Preis eines Apfels noch die verkaufte Menge, bis der Verkauf tatsächlich stattfindet. Sie können zwei Variablen als Platzhalter für die unbekannten Werte verwenden, beispielsweise ApfelPreis und ApfelVerkaufsmenge. Jedes Mal, wenn das Programm ausgeführt wird, gibt der Benutzer die Werte für die beiden Variablen ein. Der Code zur Berechnung des Gesamtumsatzes an Äpfeln und zur Anzeige in einem Textfeld txtSales würde wie folgt lauten:

txtSales.txt = ApfelPreis * ApfelVerkaufsmenge

Der Ausdruck gibt jedes Mal eine unterschiedliche Gesamtsumme zurück, die von den vom Benutzer eingegebenen Werten abhängig ist. Mit Hilfe der Variablen können Sie eine Berechnung ausführen, ohne die tatsächlichen Werte im voraus kennen zu müssen.

In diesem Beispiel weist ApfelPreis den Datentyp Currency (Währung) auf und ApfelVerkaufsmenge den Datentyp Integer (Ganzzahl). Variablen können auch für viele andere Werte stehen: Textwerte, Datumsangaben, verschiedene Arten von numerischen Werten und sogar Objekte (siehe "Datentypen").

Speichern und Abrufen von Daten in Variablen

Man verwendet Zuweisungen zum Ausführen von Berechnungen und zum Zuweisen des Ergebnisses an eine Variable:

ApfelVerkaufsmenge = 10                    ' Der Wert 10 wird an die Variable übergeben.

ApfelVerkaufsmenge = ApfelVerkaufsmenge + 1    ' Die Variable wird um 1 erhöht.

Beachten Sie, dass das Gleichheitszeichen in diesem Beispiel ein Zuweisungsoperator und kein Gleichheitsoperator ist; der Wert (10) wird der Variablen (ApfelVerkaufsmenge) zugewiesen.

Deklarieren von Variablen

Durch die Deklaration einer Variablen wird das Programm im voraus darüber informiert. Sie deklarieren eine Variable mit der Dim-Anweisung und geben dabei einen Namen für die Variable an:

Dim Variable [As Typ]

Variablen, die innerhalb einer Prozedur mit der Dim-Anweisung deklariert wurden, bleiben nur so lange bestehen, bis die Prozedur beendet ist. Der Wert der Variablen existiert also nach Beendigung der Prozedur nicht mehr. Außerdem ist eine Variable in einer Prozedur eine lokale Variable, d.h. Sie können nicht von einer anderen Prozedur aus auf diese Variable zugreifen. Dadurch können Sie die gleichen Variablennamen in unterschiedlichen Prozeduren verwenden, ohne sich über Konflikte oder unabsichtliche Änderungen Gedanken machen zu müssen.

Für Variablennamen gilt:

·     Ein Variablenname muß mit einem Buchstaben beginnen.

·     Er darf keinen Punkt und keine Typkennzeichen enthalten.

·     Er darf nicht länger als 255 Zeichen sein.

·     Er darf nur einmal in einem Gültigkeitsbereich vorkommen (das ist der Bereich, innerhalb dessen auf die Variable verwiesen werden kann, also eine Prozedur, ein Formular usw.). 

·     Er darf nicht den gleichen Namen wie ein Steuerelement haben.

Mit Hilfe des optionalen Abschnitts As Typ in der Dim-Anweisung können Sie den Datentyp oder den Objekttyp der deklarierten Variablen definieren. Durch Datentypen wird die Art von Informationen festgelegt, die von einer Variablen gespeichert werden können. Beispiele hierfür sind String, Integer und Currency.

Variablen können noch auf drei weitere Weisen deklariert werden:

·     Wenn Sie eine Variable nicht innerhalb einer Prozedur, sondern im Deklarationsabschnitt eines Formular-, Standard- oder Klassenmoduls deklarieren, ist sie für alle Prozeduren im Modul verfügbar.

·     Wenn Sie eine Variable mit dem Schlüsselwort Public deklarieren, ist sie in der ganzen Anwendung verfügbar.

·     Wenn Sie eine lokale Variable mit dem Schlüsselwort Static deklarieren, bleibt ihr Wert auch nach Beendigung einer Prozedur erhalten.

Fehlende Variablendeklaration (Implizite Deklaration)

Sie müssen eine Variable nicht deklarieren, bevor Sie sie verwenden. Sie könnten z.B. die folgende Funktion schreiben, ohne TempVal zu deklarieren, bevor Sie diese Variable verwenden:

Function SafeSqr(num)

   TempVal = Abs(num)

   SafeSqr = Sqr(TempVal)

End Function

Visual Basic erstellt automatisch eine Variable mit diesem Namen, die Sie dann genauso verwenden können wie eine explizit deklarierte Variable. Diese Vorgehensweise ist zwar bequem, kann aber zu schwer auffindbaren Fehlern führen, wenn Sie einen Variablennamen falsch schreiben.

Explizite Deklaration

Sie können Probleme mit falsch geschriebenen Variablennamen vermeiden, indem Sie dafür sorgen, daß Visual Basic eine Fehlermeldung ausgibt, wenn ein Name gefunden wird, der nicht explizit als Variable deklariert wurde.

So deklarieren Sie Variablen explizit

·     Schreiben Sie die folgende Anweisung in den Deklarationsabschnitt eines Klassen-, Formular-, oder Standardmoduls:

Option Explicit

Hätten Sie TempVal im obigen Beispiel explizit deklariert und folgenden Tippfehler gemacht, würden Sie durch eine Fehlermeldung gewarnt:

Function SafeSqr(num)

   Dim TempVal

   TempVal = Abs(num)

   SafeSqr = Sqr(TemVal)

End Function

Durch die explizite Deklaration von TempVal wird das Problem mit der falsch geschriebenen Variablen TemVal sofort deutlich, denn Visual Basic zeigt eine Fehlermeldung für TemVal an. Da sich solche Fehler mit Hilfe Option Explicit-Anweisung schnell finden lassen, sollten Sie sie immer im Code verwenden.

Anmerkung   Die Option Explicit-Anweisung bezieht sich auf jeweils ein Modul, d.h. sie muß im Deklarationsabschnitt jedes Formular-, Standard- oder Klassenmoduls angegeben werden, wenn Visual Basic die explizite Deklaration von Variablen erzwingen soll. 

Anmerkung    Wenn man auf das Schreiben dieser Codezeile verzichten möchte, kann man VisualBasic so einstellen, dass die Option Explicit-Anweisung automatisch in jedes neue Modul eingefügt wird. Klicken Sie dazu im Menü Extras auf Optionen und dann auf die Registerkarte Editor. Aktivieren Sie dort das Kontrollkästchen "Variablendeklaration erforderlich". 

Gültigkeitsbereich von Variablen

Durch den Gültigkeitsbereich einer Variablen wird definiert, welche Teile Ihres Codes von ihrer Existenz "wissen". Wenn Sie eine Variable innerhalb einer Prozedur deklarieren, kann nur Code innerhalb dieser Prozedur auf diese Variable zugreifen oder ihren Wert ändern; ihr Gültigkeitsbereich ist also nur auf die Prozedur beschränkt (man bezeichnet sie deshalb auch als lokale Variable). Manchmal ist es jedoch not­wendig, Variablen mit einem größeren Gültigkeitsbereich zu verwenden, z.B. solche, die für alle Prozeduren in einem Modul oder sogar in der gesamten Anwendung verfügbar sind. In Visual Basic können Sie bei der Deklaration einer Variablen auch ihren Gültigkeitsbereich definieren.

Variablen innerhalb einer Prozedur

Variablen auf Prozedurebene werden nur in der Prozedur erkannt, in der sie deklariert wurden. Sie werden daher auch als lokale Variablen bezeichnet. Sie können die Variablen deklarieren, indem Sie die Schlüsselwörter Dim oder Static verwenden. Beispiel:

Dim intTemp As Integer

- Oder -

Static intPermanent As Integer

Lokale Variablen, die mit Static deklariert sind, bleiben während der gesamten Laufzeit Ihrer Anwendung be­stehen. Lokale Variablen, die mit Dim deklariert sind, bleiben dagegen nur bestehen, bis die Prozedur beendet ist.

Lokale Variablen bieten sich für alle Arten von Zwischenrechnungen an. Sie können z.B. mehrere Prozeduren erstellen, die die Variable intTemp enthalten. Solange jede Variable mit dem Namen intTemp als lokale Variable deklariert ist, erkennt jede Prozedur nur ihre eigene Version von intTemp. Jede einzelne Prozedur kann den Wert ihrer lokalen Variablen intTemp ändern, ohne daß die Variablen intTemp in anderen Prozeduren davon beeinflußt werden.

Variablen auf Modulebene

Standardmäßig stehen alle Variablen auf Modulebene in allen Prozeduren des Moduls, in dem sie enthalten sind, zur Verfügung, aber nicht im Code anderer Module. Sie können Variablen auf Modulebene erstellen, indem Sie sie im Deklarationsabschnitt am Anfang des Moduls mit Public oder Private deklarieren. Beispiel:

Private intTemp As Integer

Auf Modulebene besteht kein Unterschied zwischen Private und Dim, aber es ist ratsam, das Schlüsselwort Private zu verwenden, da es sich deutlicher von Public abgrenzt und der Code so lesbarer wird.

Variablen für alle Module

Um eine Variable auf Modulebene anderen Modulen zur Verfügung zu stellen, müssen Sie die Variable mit dem Schlüsselwort Public deklarieren. Die Werte in öffentlichen Variablen sind für alle Prozeduren in Ihrer Anwendung verfügbar. Wie alle Variablen auf Modulebene müssen auch öffentliche Variablen im Deklarationsabschnitt am Anfang des Moduls deklariert werden. Beispiel:

Public intTemp As Integer

Anmerkung   Innerhalb einer Prozedur können Sie keine öffentlichen Variablen deklarieren. Das ist nur im Deklarations­abschnitt eines Moduls möglich.

Lebensdauer von Variablen (Statische Variablen)

Variablen haben neben dem Gültigkeitsbereich auch eine Lebensdauer - die Zeit, in der ihr Wert erhalten bleibt. Die Werte von Variablen auf Modulebene und öffent­lichen Variablen bleiben während der gesamten Laufzeit Ihrer Anwendung erhalten. Lokale Variablen, die mit Dim deklariert werden, bleiben nur erhalten, bis die Prozedur, in der sie deklariert wurden, beendet ist. Normalerweise gehen die Werte von lokalen Variablen verloren (und der von ihnen belegte Arbeitsspeicher wird freigegeben), wenn eine Prozedur beendet wird. Beim nächsten Aufrufen der Prozedur werden alle lokalen Variablen neu initialisiert.

In Visual Basic können Sie jedoch auch definieren, dass die Werte lokaler Variablen erhalten bleiben sollen, indem Sie sie zu statischen Variablen machen. Verwenden Sie das Schlüsselwort Static, um eine oder mehrere Variablen innerhalb der Prozedur wie mit der Dim-Anweisung zu deklarieren:

Static Depth

Die folgende Funktion berechnet beispielsweise eine Zwischensumme, indem in der statischen Variablen ApfelVerkaufsmenge immer ein neuer Wert zur vorherigen Summe hinzuaddiert wird:

Function RunningTotal(num)

   Static ApfelVerkaufsmenge

   ApfelVerkaufsmenge = ApfelVerkaufsmenge + num

   RunningTotal = ApfelVerkaufsmenge

End Function

Wenn ApfelVerkaufsmenge mit Dim statt mit Static deklariert wäre, würden die bereits berechneten Werte zwischen den Funktionsaufrufen verlorengehen. Die Funktion würde einfach den Wert zurückgeben, mit dem sie aufgerufen wurde.

Sie könnten die gleiche Wirkung erzielen, indem Sie ApfelVerkaufsmenge im Deklarationsabschnitt des Moduls deklarieren und so eine Variable auf Modulebene erstellen. Wenn Sie den Gültigkeitsbereich der Variablen allerdings auf diese Weise ändern, hat die Prozedur nicht mehr den exklusiven Zugriff auf die Variable. Da andere Prozeduren ebenfalls auf die Variable zugreifen und ihren Wert ändern können, könnte die Zwischensumme unbeabsichtigt verändert werden, und die Wartung des Codes würde schwieriger.

Deklarieren aller lokalen Variablen als statische Variablen

Wenn Sie alle lokalen Variablen einer Prozedur standardmäßig zu statischen Variablen machen möchten, müssen Sie am Anfang des Prozedurkopfs das Schlüsselwort Static einfügen. Beispiel:

Static Function RunningTotal(num)

Dadurch werden alle lokalen Variablen in der Prozedur als statische Variablen behandelt, unabhängig davon, ob sie mit Static, Dim, Private oder implizit deklariert sind. Sie können das Schlüsselwort Static bei allen Sub- oder Function-Prozeduren und auch bei Ereignisprozeduren und mit Private deklarierten Prozeduren verwenden.

Konstanten

Sie werden oft feststellen, dass Ihr Code konstante Werte enthält, die immer wieder erscheinen, oder dass er bestimmte Zahlen enthält, die schwierig zu merken sind, und deren aktuelle Bedeutung nicht immer offensichtlich ist.

In diesen Fällen können Sie die Lesbarkeit des Codes (und die Möglichkeit zur Wartung des Codes) erheblich verbessern, indem Sie Konstanten verwenden. Eine Konstante ist ein sinnvoller Name, mit dem Sie eine Zahl oder Zeichenfolge bezeich­nen, die sich nicht ändert. Eine Konstante ähnelt zwar einer Variablen, aber Sie können eine Konstante nicht ändern oder ihr einen neuen Wert zuweisen. Es gibt zwei Quellen für Konstanten:

·     Integrierte oder systemdefinierte Konstanten werden von Anwendungen und Steuerelementen bereitgestellt. Visual Basic-Konstanten sind in den Objekt­bibliotheken Visual Basic (VB), Visual Basic für Applikationen (VBA) und Datenzugriff (DAO) im Objektkatalog aufgeführt. 

·     Symbolische oder benutzerdefinierte Konstanten müssen mit der Const-Anweisung deklariert werden.

In Visual Basic werden Konstanten mit Groß- und Kleinbuchstaben geschrieben, und sie haben ein Präfix, das für die Objektbibliothek steht, aus der die Konstanten stammen.

Die Präfixe sollen zufälligen Konflikten vorbeugen, bei denen Konstanten gleiche Namen, aber unterschiedliche Werte haben.

Erstellen eigener Konstanten

Die Syntax für eine Const-Anweisung lautet folgendermaßen:

[Public|Private] Const Konstantenname[As Typ] = Ausdruck

Das Argument Konstantenname ist ein zulässiger symbolischer Name, für den die gleichen Regeln wie für Variablennamen gelten. Ausdruck setzt sich aus numerischen Konstanten oder Zeichenfolgenkonstanten und Operatoren zusammen, aber Sie können keine Funktionsaufrufe in Ausdruck verwenden.

Eine Const-Anweisung kann einen mathematischen Ausdruck oder eine Datums‑/Zeitangabe darstellen:

Const conPi = 3.14159265358979

Public Const conMaxPlaneten As Integer = 9

Const conAuslieferungstermin = #1/1/95#

Die Const-Anweisung kann auch verwendet werden, um Zeichenfolgenkonstanten zu definieren:

Public Const conVersion = "07.10.A"

Const conCodeName = "Enigma"

Sie können mehrere Konstantendeklarationen in eine Zeile schreiben, wenn Sie sie mit Kommas voneinander trennen:

Public Const conPi = 3.14, conMaxPlaneten = 9, conWeltbev = 6E+09

Der Ausdruck auf der rechten Seite des Gleichheitszeichens ( = ) ist häufig eine Zahl oder eine Zeichenfolgen­konstante, kann aber auch ein Ausdruck sein, der eine Zahl oder eine Zeichenfolge ergibt. Der Ausdruck kann allerdings keine Funktionsaufrufe enthalten. Sie können sogar Konstanten aus zuvor definierten Konstanten definieren:

Const conPi2 = conPi * 2

Wenn Sie einmal Konstanten definiert haben, können Sie sie in Ihrem Code verwenden, um die Lesbarkeit des Codes zu verbessern. Beispiel:

Static SolarSystem(1 To conMaxPlaneten)

If AnzMenschen > conWeltbev Then Exit Sub

Definieren des Gültigkeitsbereichs für benutzerdefinierte Konstanten

Für eine Const-Anweisung gelten der gleiche Gültigkeitsbereich und die gleichen Regeln wie für eine Variable.

Vermeiden von Zirkelbezügen

Da Konstanten aus anderen Konstanten definiert werden können, müssen Sie darauf achten, dass Sie keinen Zirkelbezug erstellen, d.h. Konstanten einander zuweisen. Ein Zirkelbezug entsteht, wenn zwei oder mehr öffentliche Konstanten jeweils durch die andere Konstante definiert werden.

Beispiel:

In Modul 1:

Public Const conA = conB * 2      ' Verfügbar in der ganzen Anwendung

In Modul 2:

Public Const conB = conA / 2      ' Verfügbar in der ganzen Anwendung

Wenn ein Zirkelbezug auftritt, zeigt Visual Basic eine Fehlermeldung an, sobald Sie versuchen, die Anwendung zu starten. Sie können Ihren Code erst starten, wenn Sie den Zirkelbezug beseitigt haben. Sie können Zirkelbezüge vermeiden, indem Sie Ihre öffentlichen Konstanten auf ein einzelnes Modul oder auf einige wenige Module beschränken.