1.2 Ein – Ausgabegestaltung und Formularerstellung

Werbung
FOS 12 T
1
Informationstechnik 2
Einführung in VBA
Seite 1
Einführungsbeispiel: Click dein Glück
Mit Hilfe eines Formulars in MS-Access soll ein Glücksspiel aufgebaut werden. Nach
Drücken der Taste "Start" wird eine dreistellige Zufallszahl erzeugt. Stimmen zwei Zahlen
überein gewinnt man einen kleinen Preis, stimmen alle drei Zahlen überein, gewinnt
man den Hauptpreis. (Natürlich handelt es sich nur um virtuelle Preise!)
1.1
Funktionsweise
Das Drücken der Taste Start ("Befehlsschaltfläche") startet den hinterlegten VBA-Code,
der drei Zufallszahlen erzeugt und in die Textfelder schreibt. Die Zahlen werden auf
Gleichheit geprüft und je nach Ausgang der Prüfung erfolgt als Output eine entsprechende Rückmeldung. In unserem Fall sollen die Gewinnzahlen farbig hinterlegt werden
(zwei gleiche Zahlen: grün, drei gleiche Zahlen: rot).
1.2
Ein – Ausgabegestaltung und Formularerstellung
Es ist sehr vorteilhaft für die Ein- und Ausgabe ein Formular zu verwenden, da man hierdurch sehr schnell und einfach eine ansprechende Programmoberfläche mit ihren Objekten (in einem Access- Formular werden sie als Steuerelemente bezeichnet) zur Verfügung hat. Die Gestaltung des dem jeweiligen Programm zugehörigen Formulars soll im
folgenden anhand einiger typischer Beispiele dargestellt werden.
1.2.1 Zugehöriges Formular erstellen
Access wird geöffnet und man wechselt in das Objektfenster für Formulare. Um ein neues Formular zu erstellen wählt man die Option „neu“.
Verschiedene Möglichkeiten zur
Erstellung eines Formulars
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 2
Bei der nächsten Frage des Assistenten
wählt man die voreingestellte Option „Entwurfsansicht“. So erhält man eine leere
Seite für ein Formular. Nun geht man in
den Vollbildmodus und stellt die Breite und
Höhe des Formulars (mit Hilfe der Lineale)
auf die gewünschten Werte (z. B. Breite 15
cm, Höhe 10 cm ein. Eine genauere Einstellung kann später noch vorgenommen
werden , insbesondere mit Hilfe des Eigenschaftsfensters für das gesamte Formular.
Nun wählt man aus dem Hauptmenü die Option Ansicht und
hier den Unterpunkt Formularkopf/fuß, um den Formularkopf
und Fuß anzuzeigen. Da der Formularfuß nicht benötigt wird, stellt man dessen Höhe auf
0 cm ein; anschließend wird der Formularkopf auf eine Höhe von 1,2 cm eingestellt. Um
dies genau vornehmen zu können, benutzt man das Eigenschaftsfenster für den Formularkopf. Man öffnet dieses Fenster am besten, indem man einen Doppelklick auf die Leiste für den Formularkopf ausführt.
Nun erscheint das Eigenschaftsfenster des Formularkopfes, in dessen Kopfzeile steht
der Name des Objekts, dessen Eigenschaften angezeigt werden (in diesem Fall: Bereich
Formularkopf). Nun stellt man die Eigenschaft Höhe auf den gewünschten Wert (1,2 cm)
ein Man darf sich nicht wundern, dass bei bestimmten Werten (wie hier 1,2) eine ganz
exakte Einstellung nicht möglich ist. Es werden nur 1,199 cm angezeigt. Bei gewissen
Werten ist die Einstellung nur auf 0,001 cm möglich (dies liegt wohl am ursprünglich verwendeten amerikanischen Maßsystem). Alternativ dazu kann man auch den Detailbereich-Balken bei gedrückter linker Maustaste nach unten ziehen.
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 3
Nun werden mit Hilfe der Toolbox einige Objekte im Formularkopf konstruiert:

Als ersten erstellen wir eine Schaltfläche mit deren Hilfe man das Formular schließen kann.
Die Toolbox mit
einschalten und den Steuerelementassistenten aktivieren.
1. Befehlsschalfläche mit der Maustaste Anklicken.
2. Mit dem Mauszeiger im Formularkopf an die Position gehen, an der
die Befehlsschaltfläche gewünscht wird.
3. Mit gedrückter Maustaste die Größe der Schaltfläche erstellen.
4. Maustaste loslassen. Es meldet sich der Assistent für die Befehlsschaltfläche.
Steuerelementassistenten
eingeschaltet (Zauberstab)
Textfeld
Bezeichnungsfeld
Kombinationsfeld
Toolbox mit Anleitung für Erstellen
einer Befehlsschaltfläche
Aus dem Menü des Assistenten werden die Optionen „Formularoperationen“ und „Formular schließen“ ausgewählt.
Im nächsten Menüpunkt wird die vorgeschlagene Option (Symbol einer sich schließenden Türe) übernommen und der Button „Weiter“ gedrückt. Bei der letzten Frage des Assistenten wird die Option „Fertig stellen“ gewählt. Nun erhält man die Schaltfläche mit der
gewünschten Eigenschaft. Speichert man das Formular ab und geht aus der Entwurfsansicht in die Formularansicht, kann man die Funktion des Schalters gleich austesten.
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 4
Um die Schaltfläche optisch im Formular an die exakte Stelle zu setzen, kann man sie
bei gedrückter linker Maustaste verschieben bzw. auch in der Größe verändern.

Anschließend erstellen wir noch eine Überschrift in unserem Formular
Bezeichnungsfeld
Dies geschieht wiederum mit Hilfe der Toolbox. Diesmal wählen wir das Symbol für ein
Bezeichnungsfeld (Seite 3). Wir ziehen dieses Symbol an die gewünschte Position und
erstellen ein Rechteck in der vorgesehenen Größe. Anschließend wird der Text in dieses
Rechteck eingefügt und formatiert (z. B. Schriftart und Schriftgröße).
1.2.2 Programmobjekte in das Formular einbauen
Nun werden die für das Programm notwendigen Objekte (Steuerelemente) in das Formular eingebaut. Dies geschieht wieder mit Hilfe der Toolbox.
In der Regel sind die im
Formular verwendeten Objekte (Steuerelemente) Größen, die in irgendeiner Form
(z. B. als Variable) im Programmcode angesprochen
und als Eingabe- oder Ausgabegrößen verwendet und
häufig auch verändert werden.
Textfelder ohne Bezeichnung
(hier für die Ausgabe der Glückszahlen verwendet)
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 5
Beim Erzeugen eines Steuerelementes wird diesem vom System automatisch ein Name
zugewiesen (z. B. Text6 für ein Textfeld, Bezeichnungsfeld7 für ein Bezeichnungsfeld).
Diese Namen sind im Normalfall nicht sehr aussagekräftig und für die weitere Verwendung ungeeignet. Deshalb ist an dieser Stelle eine sinnvolle Namensvergabe angebracht. Wir vergeben für das Textfeld für die Glückszahl 1 den Namen „txt_zahl1“ und für
die weiteren Ausgabefelder txt_zahl2 und txt_zahl3.
Diese Bezeichnungen werden im Eigenschaften-Fenster eingetragen.
Nun wird die Befehlsschaltfläche mit der Beschriftung "Start" eingebaut.
Brechen Sie den Steuerelementassistenten ab und nehmen Sie alle Eintragungen direkt
im Eigenschaftenfenster vor (Beschriftung "Start" mit Schriftgrad 20, Name: butt_start,
Beim Klicken: Ereignisprzedur)
1.2.3 Erstellen des Programmcodes
Der Programmcode soll ausgeführt werden, wenn die Befehlsschaltfläche "Start" gedrückt wird. Die Befehlsschaltfläche erhält den Namen „butt_start“ und im Eigenschaftsfenster wird dieser Schaltfläche bei dem Ereignis „Beim Klicken“ der zugehörige Code
hinterlegt.
Dies geschieht folgendermaßen:
Die Schaltfläche „butt_start“ wird markiert und im zugehörigen Eigenschaftsfenster wird
der Cursor in die Zeile mit dem Ereignis „beim Klicken“ gesetzt.
Auf der rechten Seite des Eigenschaftsfensters erscheint ein Klapppfeil. Beim Öffnen
werden zwei Möglichkeiten angezeigt. Wir wählen die Option „[Ereignisprozedur]“. Anschließend drücken wir die 3 Punkte neben dem Klapppfeil und wechseln dadurch in den
VBA-Editor zur Erstellung des Programmcodes. Man befindet sich automatisch im Rumpf
der Prozedur, die durch das Ereignis (in unserem Beispiel „beim Klicken“) ausgelöst wird.
Private Sub butt_start_Click()
Prozedurrumpf
Hier wird der VBA-Code
eingegeben!
End Sub
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 6
Die Prozedur beginnt mit Sub (Abkürzung für Subroutine - Unterprogramm) und endet
mit End Sub. Dazwischen liegt der Prozedurrumpf (hier werden Deklarationen vorgenommen bzw. wird der Programmcode eingetragen).
Ist eine Prozedur / Funktion nur lokal gültig (z. B. nur für ein bestimmtes Formular oder
ein bestimmtes Modul), steht vor dem Schlüsselwort Sub das Schlüsselwort Private.
Dies hat u. a. den Vorteil, dass die gleichen Namen für verschiedene Prozeduren in unterschiedlichen Formularen / Modulen verwendet werden können.
Will man die Prozedur für mehrere Formulare oder Module verwenden, aber nur einmal
schreiben, so stellt man das Schlüsselwort Public voran.
Beachten Sie bereits hier die Umschaltmöglichkeiten zwischen Formularbereich und dem
VBA-Monitor mit Hilfe der Hot-Keys [Alt]+[F11] und [Alt]+[Q] !!
Zwischen Private.... und End wird nun der Prozedurrumpf entworfen.
1.3
Erstellung des VBA-Programmcodes
1.3.1 Lineare Sequenz
Im ersten Schritt wird eine kleine lineare Sequenz programmiert, in der drei Zufallszahlen
zwischen 0 und 9 erzeugt und in den drei Fenstern ausgegeben werden.
Private Sub butt_start_Click()
Randomize
txt_zahl1 = Int(10 * Rnd() )
txt_zahl2 = Int(10 * Rnd() )
txt_zahl3 = Int(10 * Rnd() )
End Sub
Benötigte Befehle und Anweisungen:
Randomize initialisiert den Zufallsgenerator
Rnd() liefert eine Zufallszahl mit Dezimalstellen zwischen 0 und 1
Int( ) gibt den Vorkommawert einer Zahl zurück
Testen Sie die Funktion dieses VBA-Codes!
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 7
1.3.2 Verzweigungsstruktur
Im zweiten Schritt sollen die erzeugten Zufallszahlen auf Gleichheit geprüft werden und
das Ergebnis farbig dargestellt werden (zwei gleiche Zahlen grün, drei gleiche Zahlen
rot). Da die durch die Fenster zugeordneten Variablen im Programmcode mehrfach verwendet werden, ist es sinnvoll, für diese neu definierte Kurzbezeichnungen einzuführen.
Für die Programmierung in VBA sind folgende Datentypen möglich:
(aus Bernd Held, VBA mit Access, Verlag Markt + Technik)
Programmablaufplan:
Benötigte Befehle und Anweisungen:
- Variablen für die Zufallszahlen
deklarieren
Dim ermöglicht die Deklaration von
selbst erstellten Variablen
- Farben Schwarz, Rot, Grün definieren
RGB(r,g,b) mischt die Farbe aus den
drei Komponenten rot, grün und blau.
Dabei sind für r,g,b Werte von 0 bis 255
zulässig.
- den Fenstern Farbe Schwarz zuweisen
- drei Zufallszahlen erzeugen, in Variablen speichern und in Fenstern ausgeben
- Zahlen auf Gleichheit prüfen und Farbe
zuordnen
ForeColor definiert über RGB die Farbe
des Textes.
Die Syntax für die Mehrfachverzweigung
lautet:
If Kriterium 1 Then
Anweisungen
ElseIf Kriterium 2 Then
Anweisungen
End If
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 8
Ändern Sie den in der Schaltfläche Start hinterlegten Programmcode wie folgt ab und
ergänzen Sie die fehlenden Programmteile. Kopieren Sie Ihr fertiges Programm in
WORD und drucken Sie es von dort aus.
Private Sub butt_start_Click()
Dim a As Byte
Dim b As Byte
Dim c As Byte
schwarz = RGB(0,0,0)
grün = RGB(0,255,0)
rot = RGB(255,0,0)
txt_Zahl1.ForeColor = schwarz
txt_Zahl2.ForeColor = schwarz
txt_Zahl3.ForeColor = schwarz
Randomize
a = Int(10 * Rnd() )
txt_Zahl1 =a
b = Int(10 * Rnd() )
txt_Zahl2 = b
c = Int(10 * Rnd() )
txt_Zahl3 = c
If a=b And b<>c Then
txt_Zahl1.ForeColor = grün
txt_Zahl2:ForeColor = grün
ElseIf ……..
End If
End Sub
Speichern Sie Ihr Programm ab und testen Sie die Funktion dieses VBA-Codes.
(Falls Sie keine drei gleichen Zahlen erhalten, reduzieren Sie die Erzeugung der Zufallszahlen auf 0 bis 3)
FOS 12 T
4.
Informationstechnik 2
Einführung in VBA
Seite 9
Projekt Spielautomat
In mehreren Schritten soll ein Spielautomat
mit folgender Funktion programmiert werden:
Durch Drücken der Start-Taste setzen sich
die drei Zahlenräder in Bewegung und erzeugen jeweils die Ziffern von 0 bis 9 solange, bis durch Drücken der Stop-Tasten von
links nach rechts die Räder angehalten werden.
4.1
Zählergesteuerte Schleifen
Bei zählergesteuerten Schleifen wird ein Programmcode so oft wiederholt, bis die Zählervariable den Endwert erreicht hat. Dann wird die auf die Schleife folgende Anweisung
ausgeführt.
Kopieren Sie zunächst das Formular vba-1 und geben Sie der Kopie den Titel automat-1.
Der hinter dem Schalter Start abgelegte Programmcode wird jetzt durch eine Zählschleife
so abgeändert, dass die drei Fenster als Zahlenräder die Ziffern von 0 bis 9 durchlaufen.
Dazu müssen die Fensterinhalte vor jeder Änderung durch die Anweisung Me.Repaint
zurückgesetzt werden. Durch eine zweite Schleife, die von 1 bis 10000000 zählt, kann
die Geschwindigkeit der Zahlenräder herabgesetzt werden.
Erstellen Sie zunächst folgenden VBACode:
Private Sub butt_start_Click()
Dim i As Byte
Dim k As Long
For i = 0 To 9
Me.Repaint
txt_zahl1 = i
txt_zahl2 = i
txt_zahl3 = i
For k = 1 To 10000000
k = k+1
Next
Next
Testen Sie die Funktion dieses VBACodes.
Benötigte Befehle und Anweisungen:
For zähler=Anfang To Ende
Anweisung 1
Anweisung 2
usw.
Next
Anfang legt den Startwert des Zählers
fest, Ende gibt den Endwert an. Nach
Durchlaufen der Zählschleife wird die auf
Next folgende Anweisung ausgeführt.
Das Schlüsselwort Me erlaubt den Zugriff auf alle Steuerelemente des aktiven
Formulars.
Das Steuerelement Repaint setzt die
Variablen zurück.
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 10
Erweitern Sie den Programmcode so, dass die Zahlenräder zehn mal die Werte von 0 bis
9 durchlaufen.
4.2
Sub-Prozeduren
Durch Prozeduren kann ein Programm in kleine logische Einheiten unterteilt werden. Der
Aufruf einer Sub-Prozedur aus einem Programm erfolgt durch Call prozedurname.
Beispiel:
Kopieren Sie das Formular automat-1 und nennen Sie es automat-2.
Erstellen Sie für die Pausenschleife in automat-2 folgende Prozedur:
Private Sub pause
Dim k As Long
For k = 1 To 10000000
k = k+1
Next
End Sub
Ändern Sie jetzt den Programmcode von butt_start so ab, dass die Prozedur aufgerufen
werden kann und testen Sie das Programm.
4.3
Fußgesteuerte und kopfgesteuerte Schleifen
Die fußgesteuerte Schleife wiederholt einen Block mit Anweisungen, solange eine Abbruchbedingung den Wert True erhält. Die Bedingung wird jeweils am Ende der Schleife
geprüft, d.h. der Anweisungsblock wird mindestens einmal durchlaufen.
Die kopfgesteuerte Schleife prüft die Abbruchbedingung am Anfang der Schleife, d.h. der
Anweisungsblock wird möglicherweise übersprungen.
fußgesteuerte Schleife
kopfgesteuerte Schleife
Syntax:
Syntax:
Do
Anweisung 1
Anweisung 2
usw.
Loop Until Bedingung
Do While Bedingung
Anweisung 1
Anweisung 2
usw.
Loop
Ist die Abbruchbedingung erfüllt, wird die
nach Loop folgende Anweisung ausgeführt.
Wenn die Bedingung nicht erfüllt ist,
wird die nach Loop folgende Anweisung ausgeführt.
Aufgabe:
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 11
Erzeugen Sie das Formular automat-3 und ändern Sie dort den Programmcode so
ab, dass der zehnmalige Durchlauf der Zahlenräder fußgesteuert erfolgt.
4.4 Programmstop durch Tastendruck
In einem Formular automat-4 wird nun der Programm-Code so abgeändert, dass durch
Drücken von Stopp-Tasten die Zahlenräder nacheinander gestoppt werden können.
Da das Drücken der Stopp-Tasten als neue, von außen erfolgende Aktivität innerhalb der
von der Start-Taste ausgelösten Prozedur wirkt, muss durch einen geeigneten Befehl die
Prozedur kurz angehalten und geprüft werden, ob weitere Ereignisse vorliegen.
Der dafür verantwortliche Befehl lautet: DoEvents
Um zu prüfen, ob zum Beispiel die Taste stopp1 gedrückt ist oder nicht, muss dafür eine
Variable stopp1_gedrückt festgelegt werden, die nur zwei Zustände annehmen kann:
stopp1_gedrückt = false (Taste nicht gedrückt)
stopp1_gedrückt = true
(Taste gedrückt)
Solche Variablen sind vom Typ Boolean
Aufgabe:
Erzeugen Sie zunächst drei Befehlsschaltflächen butt_stopp1, butt_stopp2 und
butt_stopp3 mit der Beschriftung Stopp wie im Bild auf Seite 10 und wählen Sie im
Register Ereignis die Einstellung beim Klicken – Ereignisprozedur .
Definieren Sie zunächst vor dem ersten VBA-Code für jeden Schalter eine Boolsche Varable wie oben beschrieben. Dadurch kann auf diese Variablen von mehreren Unterprogrammen zugegriffen werden.
Setzen Sie jetzt im VBA-Code von Start die drei Variablen auf „nicht gedrückt“ und
ersetzen Sie den Programmcode durch folgende Anweisungen:
i=0
Do
Me.Repaint
txt_zahl1 = i
txt_zahl2 = i
txt_zahl3 = i
Call pause
i=i+1
If i = 10 Then
i=0
End If
DoEvents
Loop Until stopp1_gedrückt = True
End Sub
Schreiben Sie jetzt in den VBA-Code von butt_stopp1 die Anweisung:
stopp1_gedrückt=true
Speichern Sie das gesamte Programm und testen Sie die Funktionsweise.
FOS 12 T
Informationstechnik 2
Einführung in VBA
Seite 12
Durch Ändern des Endwerts in der Sub-Prozedur pause kann die Drehgeschwindigkeit der Zahlenräder erhöht werden. Wählen Sie z.B. den Wert 5000000.
Erweitern Sie jetzt den VBA-Code so, dass nach Drücken der stopp1-Taste nur
noch die Zahlenräder 2 und 3 weiterlaufen, dann nach Drücken der stopp2-Taste
lediglich das rechte Rad sich dreht und dieses schließlich durch Drücken der
stopp3-Taste angehalten wird.
4.5 Ein- und Ausblenden von Steuerelementen
Ein Blick auf das Eigenschaftsfenster der Steuerelemente zeigt, dass das Merkmal
„sichtbar“ mit ja bzw. nein gekennzeichnet werden kann, d.h. es handelt sich hier um eine Boolsche Variable.
Der VBA-Code dazu heißt variable.Visible=true bzw. variable.Visible=false.
Aufgabe:
Setzen Sie in einem neuen Formular automat-5 beim Programmstart die Schalter
Stopp2 und Stopp3 auf „unsichtbar“ und lassen Sie den Schalter erst dann sichtbar werden, wenn er für das Stoppen des jeweiligen Zahlenrades benötigt wird.
Zusatzaufgabe:
Je nach Ausgang des Spiels soll nach Anhalten des dritten Zahlenrades eine
Auswertung des Ergebnisses mit Einblendung eines Kommentars erfolgen, z,B.
3 gleiche Ziffern
2 gleiche Ziffern
3 verschiedene Ziffern
„VOLLTREFFER“
„FAST GETROFFEN“
„SCHADE“
Erstellen Sie dazu ein Textfeld für die Ausgabe und ändern Sie den Code so, dass
je nach Ausgang des Spiels der zugehörige Text erscheint.
Herunterladen