Wie in der letzten Lektion erwähnt, gibt es noch eine andere Möglichkeit, Variablentypen bekannt zu geben. Wir haben die Deklaration "Dim" schon benutzt, um bestimmte Variablen modulweit bekannt zu machen, das ist jedoch nicht der einzige Sinn dieses Keywords.
Üblicherweise wird "Dim" zur Deklaration von Variablentypen benutzt. Es hängt dann davon ab, wo man das tut, ob die Variable modulweit oder nur innerhalb einer Prozedur deklariert ist. Steht Dim am Anfang eines Moduls (außerhalb einer Prozedur), ist die Variable modulweit deklariert, steht es innerhalb einer Prozedur (überlicherweise am Anfang), ist die Variable nur in der Prozedur deklariert, steht Dim gar in einem .bas-Modul (allgemeiner Teil), gilt die Deklaration für das gesamte Projekt.
Wir können Dim als eine vornehmere Art des "Namensschlidchens" betrachten, die Visitienkarte. Jeder, der reinkommt, gibt seine Visitenkarte ab und braucht dafür kein Namensschildchen mit sich rumzutragen. Die verschiedenen Stufen können wir mit einem Gebäude vergleichen:
Wenn wir - wie bisher - nur Dim mit dem Variablennamen benutzen, gleicht das einer Visitenkarte, auf der nur der Name steht. Wir wollen jedoch auch den Typ bekanntgeben, damit die (Speicher-)Verwaltung auch gleich weiß, wieviel Platz reserviert werden muß. Das macht man, indem man an die Variable jeweils den Typ mit einem "As" (=als) anhängt. In unserem Beispiel sieht das dann so aus:
Dim x As Integer 'aktuelle Zufallszahl modulweit bekannt machen Dim aktiveUebung As String 'aktuelle Übungsart modulweit bekannt machen Dim MaxErgebnisWert As Integer 'aktuelles Max-Ergebnis modulweit bekanntmachen Dim MinErgebnisWert As Integer 'aktuelles Min-Ergebnis modulweit bekanntmachen
Um für alle Besucher "Benimmregeln" vorzuschreiben, können wir das erzwingen, indem wir mit dem Befehl "Option Explicit" für jedes Modul vorschreiben, daß hier Visitenkartenpflicht herrscht. Jede Variable, die das betreffende Stockwerk betritt, muß sich dann daran halten, sonst wird sie nicht "zugelassen".
Ihr könnt es einfach ausprobieren, wenn Ihr eine Variable nutzt, die mit Dim nicht deklariert wurde, meckert unser Programm. Die Sache hat noch einen nützlichen Nebeneffekt: Machen wir einen simplen Tippfehler im Programm, beispielsweise
Case 0 MaxErgebinsWert = 10 MinErgebnisWert = 2
wird das Programm diese Variable sofort als unbekannt abweisen und wir werden auf solche Tippfehler aufmerksam gemacht! Vor allem bei größeren Programmen bedeutet das ständige Deklarieren zwar Zusatzarbeit, aber erspart auch so manche zeitraubende Fehlersuche.
Wir bauen unser Programm also etwas um und führen den "Visitenkartenzwang" ein:
Deklaration Hauptform:
Option Explicit Dim x As Integer 'aktuelle Zufallszahl modulweit bekannt machen Dim aktiveUebung As String 'aktuelle Übungsart modulweit bekannt machen Dim MaxErgebnisWert As Integer 'aktuelles Max-Ergebnis modulweit bekanntmachen Dim MinErgebnisWert As Integer 'aktuelles Min-Ergebnis modulweit bekanntmachen
Formload:
Private Sub Form_Load() Dim i As Integer
Prozedur SymbAddition:
Private Sub SymbAddition() Dim summand1 As Integer, summand2 As Integer Dim i As Integer
Hier hab ich zwei verschiedene Varianten benutzt. Man kann mehrere Variablen auf einmal vorstellen (gemeinsame Visitenkarte ) und trennt sie dann nur durch Kommata (erste Dim-Zeile) oder über mehrere Zeilen. Beides ist nebeneinander möglich und es bietet sich an, Variablen, die einen logischen Zusammenhang haben, auch gemeinsam vorzustellen.
Prozedur Zaehlen:
Private Sub Zaehlen() Dim i As Integer
Prozedur Unsichtbar:
Private Sub Unsichtbar() Dim i As Integer For i = 1 To 9 'alle roten Kugeln unsichtbar machen
Prozedur Addition:
Private Sub Addition() Dim summand1 As Integer, summand2 As Integer Dim i As Integer
Auch in unserem Modul "Allgemein" werden einige Variablen benutzt:
Option Explicit Sub Verzoegerung(ByVal Dauer As Long) Dim Start As Long, Zeit As Long
Hier habe ich nicht nur die in der Prozedur benutzte Variablen deklariert, sondern ich habe auch "Dauer" einen festen Typ zugewiesen. Dies hilft Typ-Unverträglichkeiten zu vermeiden.
Anmerkung: Dadurch, daß ich Dauer hier als "lange Integer"-Variable (Long) deklariert habe, können nur noch volle Sekunden übergeben werden.
Und schließlich noch die Deklaration in unserer Zufallszahlenfunktion:
Function Zufallszahl(ByVal min As Integer, ByVal max As Integer) As Integer Dim z As Single
Durch Anhängen einer Typdeklaration an die Funktion (erste Zeile ganz rechts nach der Klammer) ist automatisch die Funktion selber typdeklariert, es werden stets ganze Zahlen als Zufallszahl erzeugt. Wollten wir auch andere Zahlen, müßten wird dies hier berücksichtigen. Im Gegenzug können wir auf die Umwandlungsfunktion "Int()" verzichten:
Zufallszahl = min + (max - min + 1) * z
Das war soweit schon alles, in unserem Modul SplashScreen werden keine Variablen benutzt.
© Copyright 1998-2000 J.Behling
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.