Download - Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

Transcript
Page 1: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

Ereignisgesteuerte Programmierung mit VBA

User Forms

Ereignissteuerung

Übungen

Christoph Oberweis 2007

Page 2: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

2

Agenda

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.

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 3: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

3

Einführungsbeispiel

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Be- rechnung des Bruttopreises.

Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Be- rechnung des Bruttopreises.

Anforderung an die Problemlösung: Es wird eine Maske mit den üb-lichen Windows – Eigenschaften (Dialogfelder, Buttons usw.) erwartet.

Anforderung an die Problemlösung: Es wird eine Maske mit den üb-lichen Windows – Eigenschaften (Dialogfelder, Buttons usw.) erwartet.

Page 4: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

4

Einführungsbeispiel

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Be- rechnung des Bruttopreises.

Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Be- rechnung des Bruttopreises.

Anforderung an die Problemlösung: Es wird eine Maske mit den üb-lichen Windows – Eigenschaften (Dialogfelder, Buttons usw.) erwartet.

Anforderung an die Problemlösung: Es wird eine Maske mit den üb-lichen Windows – Eigenschaften (Dialogfelder, Buttons usw.) erwartet.

Bezeichnungsfelder (Label)

Schaltflächen (Button)

Textfelder (Ein - und Ausgabefelder)

Page 5: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

5

Hier zunächst die Praxis

„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.

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 6: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

6

Praktische Übung: Allgemeine Dialobox

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“.

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 7: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

7

Funktionalitäten

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

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 Windows-Programme beendet werden können: Klick auf X.

Page 8: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

8

User Form anlegen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 9: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

9

Label

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 10: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

10

Textfelder

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 11: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

11

Schaltfläche

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 12: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

12

Quellcode hinterlegen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 13: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

13

Quellcode hinterlegen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 14: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

14

Quellcode hinterlegen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 15: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

15

Quellcode hinterlegen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 16: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

16

Botschaften und Ereignisse

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

„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.

„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.

Page 17: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

17

Modellierung der Botschaften und

Ereignisse

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

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 perma-nent 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:

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 perma-nent 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:

Page 18: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

18

Modellierung der GUI

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 19: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

19

Modellierung der GUI

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 20: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

20

Modellierung der Assoziation

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 21: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

21

Einführungsbeispiel: Klasse

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung Option Explicit

Private mNetto_Preis As Double

Public Property Let Nettopreis(NPr As Double) mNetto_Preis = NPrEnd Property

Public Function Ermitteln_Brutto() Dim Mwst_Betrag Mwst_Betrag = (mNetto_Preis * 19 / 100) Ermitteln_Brutto = mNetto_Preis + Mwst_BetragEnd Function

Public Function Ermitteln_Mwst() Ermitteln_Mwst = (mNetto_Preis * 19 / 100)End Function

Option Explicit

Private mNetto_Preis As Double

Public Property Let Nettopreis(NPr As Double) mNetto_Preis = NPrEnd Property

Public Function Ermitteln_Brutto() Dim Mwst_Betrag Mwst_Betrag = (mNetto_Preis * 19 / 100) Ermitteln_Brutto = mNetto_Preis + Mwst_BetragEnd Function

Public Function Ermitteln_Mwst() Ermitteln_Mwst = (mNetto_Preis * 19 / 100)End Function

Page 22: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

22

Einführungsbeispiel: Form

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung 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 = NothingEnd Sub

Private Sub CommandButton2_Click() TextBox1.text = " " TextBox2.text = " " TextBox3.text = " "End Sub

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 = NothingEnd Sub

Private Sub CommandButton2_Click() TextBox1.text = " " TextBox2.text = " " TextBox3.text = " "End Sub

Page 23: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

23

Aufgaben: Sequenz

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

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.

Page 24: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

24

Aufgaben: Abfragen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

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.

Page 25: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

25

Aufgaben: Schleifen

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung 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.

Page 26: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

26

GUI zur Aufgabe 8

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Page 27: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

27

Tipp: Arbeiten mit einem Listfeld

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

Tilgungsplan.ListBox1.Clear ……………… While k > r z = (k * p) / 100 t = r - z k = 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 " 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

Tilgungsplan.ListBox1.Clear ……………… While k > r z = (k * p) / 100 t = r - z k = 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 " 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

Gehört in das Fachkonzept

Formatierung

Page 28: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

28

Dateiverarbeitung

C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

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, StringArtikelbezeichnung: 20 Zeichen, StringArtikelpreis: 10 Zeichen, Double

Page 29: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

29C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung 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)

Dateiverarbeitung

Page 30: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

30C.O.

Ere

igni

sges

teue

rte

Pro

gram

mie

rung

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_neuEnd SubPublic 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 mIEnd Sub

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_neuEnd SubPublic 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 mIEnd Sub

Dateiverarbeitung

Hinweise zur Codierung:

Page 31: Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis 2007.

31

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

Ere

igni

sges

teue

rte

Pro

gram

mie

rung