Ereignisgesteuerte
Programmierung mit VBA
User Forms
Ereignissteuerung
Übungen
Christoph Oberweis 2007
Ereignisgesteuerte Programmierung
Agenda
C.O.
In dieser Einheit werden die grundlegenden Elemente
von Dialogfeldern und die Möglichkeiten einer
ereignisgesteuerten Programmierung unter VBA
vorgestellt.
Die praktische Übungen orientieren sich thematisch
größtenteils an Aufgabenstellungen der kaufmännischen
Informationsverarbeitung.
2
Ereignisgesteuerte Programmierung
Einführungsbeispiel
C.O.
Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Berechnung des Bruttopreises.
Anforderung an die Problemlösung: Es wird eine Maske mit den üblichen Windows – Eigenschaften (Dialogfelder, Buttons usw.) erwartet.
3
Ereignisgesteuerte Programmierung
Einführungsbeispiel
C.O.
Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Berechnung des Bruttopreises.
Anforderung an die Problemlösung: Es wird eine Maske mit den üblichen Windows – Eigenschaften (Dialogfelder, Buttons usw.) erwartet.
Bezeichnungsfelder
(Label)
Textfelder (Ein - und
Ausgabefelder)
Schaltflächen
(Button)
4
Ereignisgesteuerte Programmierung
Hier zunächst die Praxis
C.O.
„Normalerweise“ sollte nun die Benutzeroberfläche
und das Fachkonzept modelliert werden.
Zunächst erfolgt hier aber nun eine Einführung in die
Technik der Erstellung von User Forms.
Es wird ein neutrales Beispiel gewählt, welches sich
durch wenige Mausklicks und Eintragungen auf
Standard - Aufgabenstellungen anpassen lässt.
5
Ereignisgesteuerte Programmierung
Praktische Übung:
Allgemeine Dialobox
C.O.
Hier wurden zwei Eingabefelder und ein Ausgabefeld (Ergebnis der
Verarbeitung) festgelegt. Zwei unterschiedliche Ereignisse können
ausgelöst werden: Klick auf Button „Aktion 1“ bzw. „Aktion 2“.
6
Ereignisgesteuerte Programmierung
Funktionalitäten
C.O.
In die Eingabefelder 1 und 2 können
kleine Texte (z. B. Vor- und Zuname)
eingegeben werden. Ein Klick auf
„Aktion 1“ löst eine Ereignisprozedur
aus, welche diese beiden Texte
aneinanderfügt und das Ergebnis im
Ausgabefeld anzeigt. Ein Klick auf
Aktion 2 bewirkt, dass alle drei Felder
wieder gelöscht werden. Beendet wird
das Programm, wie alle WindowsProgramme beendet werden können:
Klick auf X.
7
Ereignisgesteuerte Programmierung
User Form anlegen
C.O.
8
Ereignisgesteuerte Programmierung
Label
C.O.
9
Ereignisgesteuerte Programmierung
Textfelder
C.O.
10
Ereignisgesteuerte Programmierung
Schaltfläche
C.O.
11
Ereignisgesteuerte Programmierung
Quellcode hinterlegen
C.O.
12
Ereignisgesteuerte Programmierung
Quellcode hinterlegen
C.O.
13
Ereignisgesteuerte Programmierung
Quellcode hinterlegen
C.O.
14
Ereignisgesteuerte Programmierung
Quellcode hinterlegen
C.O.
15
Ereignisgesteuerte Programmierung
Botschaften und Ereignisse
C.O.
„Botschaften senden“ ist eine zentrale Sichtweise der objektorientierten
Programmierung. Es handelt sich dabei um eine Aufforderung eines
„Senders“ (der ein Objekt sein kann) an ein Objekt, eine seiner (public)
Methoden auszuführen.
16
Ereignisgesteuerte Programmierung
Modellierung der
Botschaften und Ereignisse
C.O.
Während der Ablauf in einer Methode (wie oben, z. B. MWST berechnen) nach einem
festgelegten Plan (Struktogramm) abläuft, ist dies für die gesamte Programmsteuerung
nicht so. Das Laufzeitsystem reagiert bei einem ereignisgesteuerten Programm permanent auf Benutzereingaben – ein Struktogramm kann dies nicht visualisieren. UML bietet
hierzu professionelle Möglichkeiten an, die allerdings an dieser Stelle etwas zu komplex
wären. Eine einfache Möglichkeit, welche die Modellierung kleinerer Problemstellungen
gestattet, ist die Ereignistabelle:
17
Ereignisgesteuerte Programmierung
Modellierung der GUI
C.O.
18
Ereignisgesteuerte Programmierung
Modellierung der GUI
C.O.
19
Ereignisgesteuerte Programmierung
Modellierung der Assoziation
C.O.
20
Ereignisgesteuerte Programmierung
Einführungsbeispiel: Klasse
C.O.
Option Explicit
Private mNetto_Preis As Double
Public Property Let Nettopreis(NPr As Double)
mNetto_Preis = NPr
End Property
Public Function Ermitteln_Brutto()
Dim Mwst_Betrag
Mwst_Betrag = (mNetto_Preis * 19 / 100)
Ermitteln_Brutto = mNetto_Preis + Mwst_Betrag
End Function
Public Function Ermitteln_Mwst()
Ermitteln_Mwst = (mNetto_Preis * 19 / 100)
End Function
21
Ereignisgesteuerte Programmierung
Einführungsbeispiel: Form
C.O.
Option Explicit
Dim oBrutto As clsBrutto
Dim net
As Double
Private Sub CommandButton1_Click()
Set oBrutto = New clsBrutto
net = TextBox1
oBrutto.Nettopreis = net
TextBox2 = oBrutto.Ermitteln_Brutto
TextBox3 = oBrutto.Ermitteln_Mwst
Set oBrutto = Nothing
End Sub
Private Sub CommandButton2_Click()
TextBox1.text = " "
TextBox2.text = " "
TextBox3.text = " "
End Sub
22
Ereignisgesteuerte Programmierung
Aufgaben: Sequenz
C.O.
Aufgabe 1:
Erstellen Sie bitte ein Programm zur Zinsberechnung! Benutzen Sie
folgende Formel:
Zinsen = Kapital * Zinssatz * Tage / 100 * 360
Aufgabe 2:
Ermitteln Sie mit Hilfe eines Programms den durchschnittlichen
Benzinverbrauch eines Wagens!
Aufgabe 3:
Eine Pizzeria bietet zusätzlich zu den „normalen“ Pizza-Angebot für jede
Pizzasorte eine Riesenpizza für sieben Personen an. Einzugeben ist der
Preis für eine kleine Pizza der gewünschten Pizzasorte; ausgegeben
wird der Preis der Riesenpizza. Dieser Preis berechnet sich aus dem
Preis der kleinen Pizza multipliziert mit 7 minus einem Preisnachlass von
5,00 Euro.
23
Ereignisgesteuerte Programmierung
Aufgaben: Abfragen
C.O.
Aufgabe 4:
Eine Versicherung erstattet ihren Mitgliedern einen Teil des
Jahresbeitrags zurück: bei mehr als 5-jähriger Mitgliedschaft 9%,
andernfalls 4%.
Aufgabe 5:
Ein Weingut liefert an seine Kunden Wein frei Haus. Eine bestimmte
Sorte kostet in einem Sonderangebot 4,00 Euro. Wenn ein Auftrag unter
100 Euro liegt, werden noch 8 Euro für die Verpackung verlangt. Ein
Programm soll für eine einzugebene Anzahl Flaschen (Sonderangebot)
den Nettopreis berechnen.
Aufgabe 6:
Ein Programm soll die Lösungen einer quadratischen Gleichung
berechnen bzw. angeben, ob und wie viele Lösungen existieren.
Einzugeben sind die Koeffizienten.
24
Ereignisgesteuerte Programmierung
Aufgaben: Schleifen
C.O.
Aufgabe 7:
Die Organisationsleitung einer Messe „Informationstechnologie für das Büro“
möchte wissen, wie viele Personen diese Messe pro Tag durchschnittlich
besuchten. Nach der Eingabe der Messedauer (Tage) werden die absoluten Werte
(Anzahl der Besucher) pro Tag eingegeben, der Durchschnitt berechnet und das
Ergebnis ausgegeben.
Aufgabe 8 (ist schon bekannt, hier mit neuem Gesicht, s. nächste Folie):
Es ist ein Programm zu erstellen, welchen den Tilgungsplan eines Kredits ausgibt
(Annuitätentilgung). Nach der Eingabe der Kredithöhe, des Zinssatzes, der
jährlichen Rückzahlung und der Laufzeit soll eine Tabelle mit folgenden Angaben
ausgegeben werden:
Jahr
Zins (in Euro)
Tilgung
Restkredit
Wird eine Laufzeit < 1 oder größer 15 eingegeben, wird standardmäßig eine
Laufzeit von 15 Jahren angenommen.
25
Ereignisgesteuerte Programmierung
GUI zur Aufgabe 8
C.O.
26
Tipp: Arbeiten mit einem Listfeld
Ereignisgesteuerte Programmierung
Tilgungsplan.ListBox1.Clear
C.O.
………………
While
z
t
k
> r
Gehört in das
(k * p) / 100
Fachkonzept
r - z
k – t
…………
If z < 100 Then
a2 = "
00.00 "
Else
If z < 1000 Then
a2 = "
000.00 "
Else
If z < 10000 Then
a2 = "
0000.00 "
Formatierung
Else
If z < 100000 Then
a2 = " 00000.00 "
Else
a2 = "0000000.00 "
End If
End If
End If
End If
…………
Tilgungsplan.ListBox1.AddItem Format(j, a1) &
Format(z, a2) & Format(t, a3) & Format(k, a4)
j = j + 1
Wend
k
=
=
=
27
Ereignisgesteuerte Programmierung
Dateiverarbeitung
C.O.
Programm: Es werden Daten zu verschiedenen Artikeln erfasst, alle Daten können auf
die Festplatte als Datei abgespeichert werden. Es soll möglich sein, die Datei wieder zu
laden und die Artikeldaten in einem Blättern - Modus anzuzeigen. Die Datensatzstruktur
hat folgenden Aufbau:
Artikelnummer:
8 Zeichen, String
Artikelbezeichnung: 20 Zeichen, String
Artikelpreis:
10 Zeichen, Double
28
Ereignisgesteuerte Programmierung
Dateiverarbeitung
C.O.
Hinweise zur Problemlösung:
Bei der hier formulierten Artikelverwaltung handelt es sich um die
erste vereinfachte Version eines Programms, welches später
hinsichtlich der Daten und der Funktionen ausgebaut werden sollte.
Für die Erfassung der Artikel ist ein Array zu vereinbaren; die
einzelnen Array-Elemente bestehen aus Datensätzen
(Datenstruktur RECORD). Maximal können (zunächst) 500
Datensätze erfasst und gespeichert werden. Die Datensätze
werden durch Mausklick alle abgespeichert oder geladen.
Die GUI-Klasse „weiß“ nichts über dieses Datenmodell bzw.
darüber, wie die Daten abgespeichert werden. Dies ist Aufgabe
einer separaten Klasse. (Ausblick: 3 – Schichten – Modell)
29
Ereignisgesteuerte Programmierung
Dateiverarbeitung
C.O.
Hinweise zur Codierung:
Public Sub Dat_oeffnen()
Open "h:\Artikeldatei" For Input As #1
For mI = 1 To max
Input #1, Artikeltabelle(mI).mA_nummer,
Artikeltabelle(mI).mA_bezeichnung, Artikeltabelle(mI).mA_preis
Next mI
Close #1
mI = 1
umspeichern_neu
End Sub
Public Sub Dat_speichern()
umspeichern_alt
Open "h:\Artikeldatei" For Output As #1
For mI = 1 To max
Write #1, Artikeltabelle(mI).mA_nummer,
Artikeltabelle(mI).mA_bezeichnung, Artikeltabelle(mI).mA_preis
Next mI
End Sub
30
Ereignisgesteuerte Programmierung
Quellen
C.O.
HELD, B. (2000): EXCEL-VBA-Programmierung. - München,
Mark und Technik-Verlag
JANKA, A. (2005): VBA mit Word. – Bonn, Galileo
Computing – Verlag
MARTIN, R. (1999): VBA mit Office 2000 lernen. – Bonn,
Addison-Wesley – Verlag
31

Ereignisgesteuerte Programmierung mit VBA - Informatik