Objektorientierung mit VBA Visual Basic for Applications Klassen und Objekte Übungen Christoph Oberweis Agenda C.O. VBA Daten in VBA Modelle und Modellbildung Klassen – Objekte - Beziehungen Übungen COM Quellen 2 Agenda VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. VBA Daten in VBA Modelle und Modellbildung Klassen – Objekte - Beziehungen Übungen COM Quellen 3 VBA … VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. … ist eine Programmiersprache … ist in die Office-Anwendungen integriert … erlaubt das Arbeiten mit Objekten … kann als Schnittstelle zu Office, aber auch zu Windows - Ressourcen insgesamt benutzt werden 4 Wo versteckt sich VBA? Wechsel mit <Alt> <F11> von der Office Anwendung in das VBA – Programmiersystem VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Zurück zur Office Anwendung: Hier klicken 5 Zunächst ein „warming up“ VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Einfache Ausgabe - Anweisung 1. Schritt: Excel/Word aufrufen 2. Schritt: Mit <Alt> <F11> in die Programmierumgebung wechseln 3. Schritt: „Diese Arbeitsmappe“ anklicken (Das wird später anders gemacht!) 4. Schritt: Falls jetzt schon Programmcode erscheint, diesen löschen 5. Schritt: Obiges Programm eingeben 6. Schritt: Mit <F5> Programm starten 7. Schritt: Programm testen, gegebenenfalls korrigieren 8. Schritt: Mit <Alt><F11> zurück zu Excel 6 Weitere Möglichkeiten VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen Auch hier kann das Programm gestartet werden: ein Klick genügt! … und wenn es mal abgestürzt ist: hier klicken. Und wer es ganz genau wissen will: F8 ist der Einzelschritt-Mode zum Debugen. C.O. 7 Deklaration von Variablen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Option Explicit Dim net As Double Dim x As Integer Deklaration ist zwingend (kann abgestellt werden) Deklaration zweier Variablen mit Typenangabe 8 Modelle und Modellierung Wirkliche Welt: Autohaus VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen Modell: Idealisierte Darstellung (Abbildung) der realen Welt zur Veranschaulichung bestimmter Sachverhalte/Eigenschaften/Prozesse, Vereinfachung der Realität C.O. 9 Diesen da ... VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 10 ... picken wir uns mal raus… VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 11 …und untersuchen ihn genauer! VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 12 „Objektive“ Tatsachen! Kfz Hersteller= „Daihatsu“ Typ= „Terios“ ……… Hubraum= 1495 ……… Farbe= „metallic silber“ ……. VKPreis= 17800,00 VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen „konkretes“ individuelles Fahrzeug „abstrakte“ Darstellung Beachte: Zu jedem Fahrzeug gehört eine Herstellerangabe eine Typenangabe usw. (Gemeinsamkeit); diese Attribute haben je nach Kfz einen unterschiedlichen Inhalt. C.O. 13 Produktion am Fließband VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Schablone, nach diesem „Bauplan“ können (fast) unendlich viele Fahrzeuge gebaut werden. Allerdings benötigt dieser Plan exakte Angaben zu den Details des Fahrzeugs. 14 Produktion am Fließband Kfz Hersteller: Text Typ: Text ……… Hubraum: Ganzzahl ……… Farbe: Text ……. VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Schablone, nach diesem „Bauplan“ können (fast) unendlich viele Fahrzeuge gebaut werden. Allerdings benötigt dieser Plan exakte Angaben zu den Details des Fahrzeugs. So könnte der Bauplan formuliert sein: Attribute: Variablen mit Typenangabe als Informationen zu den Eigenschaften des Fahrzeugs (Vorstufe einer Klasse). 15 Klasse: Fertig! Notation in UML (Unified Modeling Language) Kfz VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Hersteller: Text Typ: Text ……… Hubraum: Ganzzahl ……… Farbe: Text ……. VKPreis: Währung Klassenname Attribute Übungen COM Quellen C.O. Erfassung() Ändern() Löschen() Drucken() …………… Methoden 16 Von der Klasse … „Abstrakter“ Bauplan Kfz VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Hersteller: Text Typ: Text ……… Hubraum: Ganzzahl ……… Farbe: Text ……. VKPreis: Währung Übungen COM Quellen C.O. Erfassung() Ändern() Löschen() Drucken() …………… 17 ... zum Objekt „Konkretes“ individuelles Fahrzeug :Kfz VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Hersteller= „Daihatsu“ Typ= „Terios“ ……… Hubraum= 1495 ……… Farbe= „metallic silber“ ……. VKPreis= 17800,00 Übungen COM Quellen C.O. Erfassung() Ändern() Löschen() Drucken() …………… 18 Die erste eigene Klasse VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Die Klasse besitzt drei Attribute und zwei Methoden. Damit lässt sich in der Realität selbstverständlich kein Fahrzeug hinreichend modellieren – es geht jetzt zunächst darum, die Klasse und ein dazu passendes Testprogramm in VBA zu implementieren. 19 Klasse erfassen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Hier den Menüpunkt „Klassenmodul“ anwählen … 20 Klasse erfassen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. … und die neue Klasse anlegen. 21 Klasse erfassen VBA Daten Doppelklick auf „Klasse“... Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM ... und Name ändern (Kfz)! Quellen C.O. 22 Klasse erfassen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 23 Klasse: Erläuterungen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 24 Klasse: Erläuterungen Private Hersteller VBA Daten Modelle und Modellierung Das Attribut „Hersteller“ darf nur von „Verarbeitungsschritten“ der eigenen Klasse manipuliert werden (Kapselung). Das Gegenstück wäre „Public“, wenn die Attribute allerdings dann „von überall“ verändert werden können, ist das Einrichten einer Klasse eigentlich unsinnig. Sub erfassen(her, ty, hub) KlassenObjekteBeziehungen Sub kennzeichnet eine Methode der Klasse, in den Klammern stehen Platzhalter (Variablen) für die Daten, die von außen (vom Testprogramm) dem Objekt übermittelt werden. Die Verarbeitungsschritte stehen zwischen Sub und End Sub. Übungen Hersteller = her COM Das Attribut „Hersteller“ erhält den Wert, der in Her von außen an das Attribut übermittelt wurde. Quellen Function ErmittleTyp() Der im Objekt gespeicherte Wert für den Autotyp soll an das Testprogramm zurückgeliefert werden. C.O. 25 Das Testprogramm VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 26 Das Testprogramm VBA Daten Modelle und Modellierung Noch besser: Fachkonzept unter „Module“ codieren. KlassenObjekteBeziehungen Übungen COM Quellen C.O. 27 Erläuterungen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 28 Erläuterungen VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Das Testprogramm setzt hier die Werte der Attribute. In der Praxis wäre die Quelle dieser Daten z. B. eine Datenbank. Ein Programm, welches die Daten zunächst setzt und dann unmittelbar danach wieder abfragt, ist aus der Sicht der Praxis „unsinnig“. Es wäre eher so, dass ein Programm für die Erfassung der Daten zuständig ist und ein anders für die Weiterverarbeitung. Das wird auch später so vorgeführt – jetzt geht es zunächst einmal nur darum, den „Mechanismus“ zu begreifen. Daher wurde auch die Bezeichnung „Testprogramm“ gewählt! 29 Programmtest VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen Es klappt: C.O. 30 Beziehungen zwischen Klassen/Objekten Überlegung: Wie ist nun der Zusammenhang zwischen dem Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren? VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. 31 Beziehungen zwischen Klassen/Objekten Überlegung: Wie ist nun der Zusammenhang zwischen dem Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren? VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Assoziation zwischen Klassen 32 Beziehungen zwischen Klassen/Objekten Überlegung: Wie ist nun der Zusammenhang zwischen dem Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren? VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen Assoziation zwischen Klassen Eine Methode der Klasse nutzen: Auto1.erfassen a, b, c C.O. 33 Jetzt wird gerechnet! VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Aufgabe: Für den Autoteilezubehörshop ist eine ähnliche Klasse wie bei dem vorherigen Beispiel festzulegen. Die Verkaufspreisberechnung funktioniert folgendermaßen: Der VK Preis (netto) ergibt sich aus dem Einkaufspreis multipliziert mit dem Kalkulationsfaktor (Prozentzahl). 34 Tipp Die Klasse: VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Option Explicit Private Artikelnummer As Integer Private Bezeichnung As String Private EK_Preis As Double Private K_Faktor As Double Sub erfassen(EkP As Double) Artikelnummer = 1234 Bezeichnung = "Sitzschoner" K_Faktor = 50 EK_Preis = EkP End Sub Function Ausgeben_Bezeichnung() Ausgeben_Bezeichnung = Bezeichnung End Function Function Ermitteln_VK_Preis() Ermitteln_VK_Preis = (EK_Preis * K_Faktor / 100) + EK_Preis End Function 35 Testprogramm VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Sub Testprg() Dim Autoz As Kfz_Zubehoer Dim bez As String Dim EP As Double Dim VkP As Double Set Autoz = New Kfz_Zubehoer EP = InputBox("Bitte Einkaufspreis eingeben: ") Autoz.erfassen EP MsgBox (Autoz.Ausgeben_Bezeichnung) MsgBox (Autoz.Ermitteln_VK_Preis) Set Auto1 = Nothing End Sub 36 Und weiter geht‘s! VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Aufgabe: Welche weiteren Methoden finden Sie für dieses Beispiel? Erweitern Sie die Klasse kfz und codieren Sie Ihre Lösung(en)! Übungen COM Quellen C.O. 37 Component Object Model VBA Daten Das Component Object Model (COM) erlaubt (u. a.) den objektorientierten Zugriff auf Computerdienste mit VBS/VBA. Modelle und Modellierung COM ist damit eine spezielle API. KlassenObjekteBeziehungen In diesem Zusammenhang ist unter Komponente eine compilierte Programmdatei zu verstehen, welche i. d. R. mehrere Klassen enthält. Damit werden die entsprechenden Objekte (z. B. unter VBS, aber auch unter C++, C#, Java oder VB) erzeugt, mit denen z. B. der Zugriff auf Funktionen des Betriebssystems Windows realisiert werden kann. Übungen COM Quellen Die folgenden Beispiele orientieren sich an D. JOHLEN (s. Quellen). C.O. 38 Das Dateisystem als Komponente FileSystemObject File Drives Name DatelastModified parentFolder VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen getFile(pfad):File moveFile(quellPfad, zielPfad) …………….. moveFile(zielPfad) …………….. Stark vereinfachte Klassenmodelle der COM – Komponente, die für das Dateisystem zuständig ist. COM Quellen C.O. Beispiel eines Anwendungsfalls: Eine Datei soll von einem Verzeichnis in ein anderes verschoben werden. Konkret: Die Datei „test1.txt“ im Verzeichnis c:\vz1\ soll in das Verzeichnis c:\vz2\ verschoben werden. 39 Das Dateisystem als Komponente VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. Z1 Z2 Z3 Z4 Set FSObjekt = CreateObject("Scripting.FileSystemObject") Set Datei = FSObjekt.getFile("h:\SE\test1.txt") Datei.move "h:\SX\" MsgBox "Dateien umkopiert!„ Z1: Erzeugung des Objektes „FSObjekt“ mit der Methode CreateObject. Als Schnittstellenparameter muss die Klasse „FileSystemObject“ aus dem Paket „Scripting“ angegeben werden. Z2: Erzeugen des Objektes „Datei“ durch das Senden der Nachricht „getFile“. Z3: Senden der Nachricht „move“ (inkl. Parameter) an das Objekt „Datei“. Sowohl für das Modellieren als auch für die Erklärung eines Programms ist diese verbale Ausdrucksweise „ungeschickt“. UML kennt neben den Klassendiagrammen noch viele weitere Modellierungstechniken. Eine Möglichkeite wird nun vorgestellt. 40 Sequenzdiagramm Beispiel: Zubehörshop des Autohauses Erklärung: VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen Das Sequenzdiagramm dient (u. a.) der Darstellung, wie Objekte Nachrichten austauschen. Es werden zeitliche Aspekt berücksichtigt. C.O. 41 Unser Beispiel Sequenzdiagramm für den Anwendungsfall „Datei verschieben“ VBA (new) FileSystemObject Daten Modelle und Modellierung KlassenObjekteBeziehungen FSObjekt: getFile(…) Durch getFile wurde ein neues Objekt erzeugt! Datei: File Übungen COM Quellen move(…) Folge: Datei ist verschoben! C.O. 42 Wer hat wann zugegriffen? Nochmals zurück zur Klasse „File“: File VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Name DatelastModified parentFolder moveFile(zielPfad) …………….. Übungen COM Quellen C.O. Aufgabe: Auf das Attribut DatelastModified kann direkt (ohne Methode) zugegriffen werden. Erstellen Sie bitte ein Programm, welches das Datum der letzten Änderung einer beliebigen Datei in einem beliebigen Verzeichnis ermittelt und ausgibt (das entsprechende Sequenzdiagramm bitte nicht vergessen). 43 Lösung der Aufgabe VBA Daten Modelle und Modellierung KlassenObjekteBeziehungen Set FSObjekt = CreateObject("Scripting.FileSystemObject") Set Ordner = FSObjekt.getFolder("c:\SE\") Set Dateien = Ordner.files Set Datei = Dateien.item("test1.txt") MsgBox "Datum des letzten Zugriffs: " & Datei.dateLastModified Übungen COM Quellen C.O. 44 Quellen VBA HELD, B. (2000): EXCEL-VBA-Programmierung. - München, Mark und Technik-Verlag Daten Modelle und Modellierung KlassenObjekteBeziehungen Übungen COM Quellen C.O. JANKA, A. (2005): VBA mit Word. – Bonn, Galileo Computing – Verlag JOHLEN, D. (2004): Anwendungsentwicklung.- Holland + Josenhans-Verlag MARTIN, R. (1999): VBA mit Office 2000 lernen. – Bonn, Addison-Wesley – Verlag 45