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

Click here to load reader

  • date post

    05-Apr-2015
  • Category

    Documents

  • view

    109
  • download

    0

Embed Size (px)

Transcript of Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung Übungen Christoph Oberweis...

  • Folie 1
  • Ereignisgesteuerte Programmierung mit VBA User Forms Ereignissteuerung bungen Christoph Oberweis 2007
  • Folie 2
  • 2 Agenda In dieser Einheit werden die grundlegenden Elemente von Dialogfeldern und die Mglichkeiten einer ereignisgesteuerten Programmierung unter VBA vorgestellt. Die praktische bungen orientieren sich thematisch grtenteils an Aufgabenstellungen der kaufmnnischen Informationsverarbeitung. C.O. Ereignisgesteuerte Programmierung
  • Folie 3
  • 3 Einfhrungsbeispiel C.O. Ereignisgesteuerte Programmierung Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Be- rechnung des Bruttopreises. Anforderung an die Problemlsung: Es wird eine Maske mit den b- lichen Windows Eigenschaften (Dialogfelder, Buttons usw.) erwartet.
  • Folie 4
  • 4 Einfhrungsbeispiel C.O. Ereignisgesteuerte Programmierung Aufgabe: Im Umfeld einer Fakturierung existiert eine Methode zur Be- rechnung des Bruttopreises. Anforderung an die Problemlsung: Es wird eine Maske mit den b- lichen Windows Eigenschaften (Dialogfelder, Buttons usw.) erwartet. Bezeichnungsfelder (Label) Schaltflchen (Button) Textfelder (Ein - und Ausgabefelder)
  • Folie 5
  • 5 Hier zunchst die Praxis Normalerweise sollte nun die Benutzeroberflche und das Fachkonzept modelliert werden. Zunchst erfolgt hier aber nun eine Einfhrung in die Technik der Erstellung von User Forms. Es wird ein neutrales Beispiel gewhlt, welches sich durch wenige Mausklicks und Eintragungen auf Standard - Aufgabenstellungen anpassen lsst. C.O. Ereignisgesteuerte Programmierung
  • Folie 6
  • 6 Praktische bung: Allgemeine Dialobox Hier wurden zwei Eingabefelder und ein Ausgabefeld (Ergebnis der Verarbeitung) festgelegt. Zwei unterschiedliche Ereignisse knnen ausgelst werden: Klick auf Button Aktion 1 bzw. Aktion 2. C.O. Ereignisgesteuerte Programmierung
  • Folie 7
  • 7 Funktionalitten C.O. Ereignisgesteuerte Programmierung In die Eingabefelder 1 und 2 knnen kleine Texte (z. B. Vor- und Zuname) eingegeben werden. Ein Klick auf Aktion 1 lst eine Ereignisprozedur aus, welche diese beiden Texte aneinanderfgt und das Ergebnis im Ausgabefeld anzeigt. Ein Klick auf Aktion 2 bewirkt, dass alle drei Felder wieder gelscht werden. Beendet wird das Programm, wie alle Windows- Programme beendet werden knnen: Klick auf X.
  • Folie 8
  • 8 User Form anlegen C.O. Ereignisgesteuerte Programmierung
  • Folie 9
  • 9 Label C.O. Ereignisgesteuerte Programmierung
  • Folie 10
  • 10 Textfelder C.O. Ereignisgesteuerte Programmierung
  • Folie 11
  • 11 Schaltflche C.O. Ereignisgesteuerte Programmierung
  • Folie 12
  • 12 Quellcode hinterlegen C.O. Ereignisgesteuerte Programmierung
  • Folie 13
  • 13 Quellcode hinterlegen C.O. Ereignisgesteuerte Programmierung
  • Folie 14
  • 14 Quellcode hinterlegen C.O. Ereignisgesteuerte Programmierung
  • Folie 15
  • 15 Quellcode hinterlegen C.O. Ereignisgesteuerte Programmierung
  • Folie 16
  • 16 Botschaften und Ereignisse C.O. Ereignisgesteuerte Programmierung 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 auszufhren.
  • Folie 17
  • 17 Modellierung der Botschaften und Ereignisse C.O. Ereignisgesteuerte Programmierung Whrend der Ablauf in einer Methode (wie oben, z. B. MWST berechnen) nach einem festgelegten Plan (Struktogramm) abluft, ist dies fr 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 Mglichkeiten an, die allerdings an dieser Stelle etwas zu komplex wren. Eine einfache Mglichkeit, welche die Modellierung kleinerer Problemstellungen gestattet, ist die Ereignistabelle:
  • Folie 18
  • 18 Modellierung der GUI C.O. Ereignisgesteuerte Programmierung
  • Folie 19
  • 19 Modellierung der GUI C.O. Ereignisgesteuerte Programmierung
  • Folie 20
  • 20 Modellierung der Assoziation C.O. Ereignisgesteuerte Programmierung
  • Folie 21
  • 21 Einfhrungsbeispiel: Klasse C.O. Ereignisgesteuerte Programmierung 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 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
  • Folie 22
  • 22 Einfhrungsbeispiel: Form C.O. Ereignisgesteuerte Programmierung 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 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
  • Folie 23
  • 23 Aufgaben: Sequenz C.O. Ereignisgesteuerte Programmierung 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 zustzlich zu den normalen Pizza-Angebot fr jede Pizzasorte eine Riesenpizza fr sieben Personen an. Einzugeben ist der Preis fr eine kleine Pizza der gewnschten 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.
  • Folie 24
  • 24 Aufgaben: Abfragen C.O. Ereignisgesteuerte Programmierung Aufgabe 4: Eine Versicherung erstattet ihren Mitgliedern einen Teil des Jahresbeitrags zurck: bei mehr als 5-jhriger 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 fr die Verpackung verlangt. Ein Programm soll fr eine einzugebene Anzahl Flaschen (Sonderangebot) den Nettopreis berechnen. Aufgabe 6: Ein Programm soll die Lsungen einer quadratischen Gleichung berechnen bzw. angeben, ob und wie viele Lsungen existieren. Einzugeben sind die Koeffizienten.
  • Folie 25
  • 25 Aufgaben: Schleifen C.O. Ereignisgesteuerte Programmierung Aufgabe 7: Die Organisationsleitung einer Messe Informationstechnologie fr das Bro mchte 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. nchste Folie): Es ist ein Programm zu erstellen, welchen den Tilgungsplan eines Kredits ausgibt (Annuittentilgung). Nach der Eingabe der Kredithhe, des Zinssatzes, der jhrlichen Rckzahlung und der Laufzeit soll eine Tabelle mit folgenden Angaben ausgegeben werden: JahrZins (in Euro)Tilgung Restkredit Wird eine Laufzeit < 1 oder grer 15 eingegeben, wird standardmig eine Laufzeit von 15 Jahren angenommen.
  • Folie 26
  • 26 GUI zur Aufgabe 8 C.O. Ereignisgesteuerte Programmierung
  • Folie 27
  • 27 Tipp: Arbeiten mit einem Listfeld C.O. Ereignisgesteuerte Programmierung 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 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 Tilgungsplan.ListBox1.AddItem Format(j, a1) & Format(z, a2) & Format(t, a3) & Format(k, a4) j = j + 1 Wend Gehrt in das Fachkonzept Formatierung
  • Folie 28
  • 28 Dateiverarbeitung C.O. Ereignisgesteuerte Programmierung Programm: Es werden Daten zu verschiedenen Artikeln erfasst, alle Daten knnen auf die Festplatte als Datei abgespeichert werden. Es soll mglich sein, die Datei wieder zu laden und die Artikeldaten in einem Blttern - Modus anzuzeigen. Die Datensatzstruktur hat folgenden Aufbau: Artikelnummer: 8 Zeichen, String Artikelbezeichnung:20 Zeichen, String Artikelpreis:10 Zeichen, Double
  • Folie 29
  • 29 C.O. Ereignisgesteuerte Programmierung Hinweise zur Problemlsung: Bei der hier formulierten Artikelverwaltung handelt es sich um die erste vereinfachte Version eines Programms, welches spter hinsichtlich der Daten und der Funktionen ausgebaut werden sollte. Fr die Erfassung der Artikel ist ein Array zu vereinbaren; die einzelnen Array-Elemente bestehen aus Datenstzen (Datenstruktur RECORD). Maximal knnen (zunchst) 500 Datenstze erfasst und gespeichert werden. Die Datenstze werden durch Mausklick alle abgespeichert oder geladen. Die GUI-Klasse wei nichts ber dieses Datenmodell bzw. darber, wie die Daten abgespeichert werden. Dies ist Aufgabe einer separaten Klasse. (Ausblick: 3 Schichten Modell) Dateiverarbeitung
  • Folie 30
  • 30 C.O. Ereignisgesteuerte Programmierung 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 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 Dateiverarbeitung Hinweise zur Codierung:
  • Folie 31
  • 31 Quellen C.O. HELD, B. (2000): EXCEL-VBA-Programmierung. - Mnchen, 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 Ereignisgesteuerte Programmierung