CO - Informatik - Christoph Oberweis

Werbung
Objektorientierung mit VBA
Visual Basic for Applications
Klassen und Objekte
Übungen
Christoph Oberweis 2007
Agenda







C.O.
VBA und Objekte
Daten- u. Grundstrukturen in VBA
Modelle und Modellbildung
Klassen – Objekte - Beziehungen
Übungen
COM
Quellen
2
Agenda

VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen






C.O.
VBA und Objekte
Daten- u. Grundstrukturen in VBA
Modelle und Modellbildung
Klassen – Objekte - Beziehungen
Übungen
COM
Quellen
3
VBA …
VBA & Objekte
Daten&Grundstrukturen
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 & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Zurück zur Office Anwendung: Hier klicken
Quellen
C.O.
5
Zunächst ein „warming up“
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
Einfache Ausgabe - Anweisung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
1. Schritt: Excel 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 & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Auch hier kann das Programm
gestartet werden: ein Klick
genügt!
… und wenn es mal
abgestürzt ist: hier klicken.
Quellen
Und wer es ganz genau wissen will: F8 ist der
Einzelschritt-Mode zum Debugen.
C.O.
7
Objekte: Intuitiver Zugang in Word
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Hier klicken!
C.O.
8
Überall Objekte!
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
9
„Application“ ist der Boss!
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Drücke F1, und das Objekt verrät seine „Geheimnisse“
C.O.
10
Was das Objekt so hat und kann
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
11
Eigenschaften und Methoden
Ausgabe - Anweisung
Punkt - Operator: Trennt den Objekt - Namen
von der Eigenschaft oder der Methode
VBA & Objekte
Daten&Grundstrukturen
Eigenschaft, hier:Benutzername
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Methode, jetzt wird gedruckt (Drucker bitte einschalten)
C.O.
12
Leichter Zugriff!
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
Objekt_bezeichner.Methode_1
Objekt_bezeichner.Eigenschaft_1
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Beachte die Ähnlichkeit hinsichtlich des Zugriff auf
Record – Komponenten!
13
EXCEL - Objekte
Mit Hilfe von VBA-Programmen können EXCEL –Tabellenblätter, Arbeitsmappen, einzelne Zellen oder Zellbereiche
verändert werden.
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Wichtige Objekte:
Wichtige Objekteigenschaften:
Application (Das gesamte EXCEL-Fenster)
Caption (Beschriftung der Objekte)
Workbook (eine Arbeitsmappe)
Name
Worksheet (das einzelne Arbeitsblatt)
Selection (das markierte Objekt)
Range (Zellenbereich oder einzelne Zelle)
Value (Wert/Inhalt, z. B. einer Zelle)
Übungen
COM
Quellen
C.O.
14
Die „Quadratur“ mit VBA
Wichtige Objektmethoden:
Select (Zelle auswählen)
Clear (löschen)
VBA & Objekte
Cells (Zugriff auf spezielle Zellen, Cells erwartet eine Zeilen- und Spaltenindex)
Daten&Grundstrukturen
Close (Applications - Objekt oder Arbeitsmappe schließen)
Modelle und
Modellierung
Schleifenprogrammierung, Füllen einer EXCEL-Tabelle:
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Option Explicit
Sub quadate()
Dim x As Integer
Dim i As Integer
x = 1
i = -5
Workbooks("Mappe1").Worksheets("Tabelle1").Select
Do While i < 6
Cells(x, 1).Select
ActiveCell.Value = i
Cells(x, 2).Select
ActiveCell.Value = i * i
x = x + 1
i = i + 1
Loop
End Sub
quadrate
x := 1, i := -5
Tabelle1 auswählen
Solange i < 6
Zelle auswählen
i in Zelle übertragen
Nachbarzelle auswählen
i * i in Zelle übertragen
Spaltenzähler (=x) und i
erhöhen
15
Deklaration von Variablen
VBA & Objekte
Daten&Grundstrukturen
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
16
Arrays
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
Sub selsort()
Dim Z(10) As Integer
Dim I As Integer
Dim K As Integer
Dim H As Integer
…………
COM
Z(I) = InputBox("Wert: ", I)
Quellen
…………
C.O.
17
Verbund - Variablen
Option Explicit
Type record_1
VBA & Objekte
Anum As Integer
Daten&Grundstrukturen
Abez As String
Modelle und
Modellierung
Apreis As Double
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
End Type
Sub datensatz()
Dim Artikelsatz As record_1
Artikelsatz.Anum = InputBox("Artikelnummer: ")
18
Files
Open "Artikeldatei" For Output As #1
VBA & Objekte
Daten&Grundstrukturen
……
Write #1, Artikeltabelle(I).A_nummer,
Artikeltabelle(I).A_bezeichnung, Artikeltabelle(I).A_preis
Modelle und
Modellierung
KlassenObjekteBeziehungen
Open "Artikeldatei" For Input As #1
Übungen
COM
Quellen
C.O.
……
Input #1, Artikeltabelle(I).A_nummer,
Artikeltabelle(I).A_bezeichnung, Artikeltabelle(I).A_preis
19
Abfragen
Option Explicit
VBA & Objekte
Sub rabatt_1()
Daten&Grundstrukturen
Dim net As Double
Modelle und
Modellierung
Const rab = 3
Dim brut As Double
Const mwst = 19
KlassenObjekteBeziehungen
net = InputBox("Nettobetrag: ")
Übungen
brut = ((net * mwst) / 100) + net
COM
MsgBox ("Rechnungsbetrag BRUTTO " & brut)
If net > 99.99 Then net = net - (net * rab / 100)
Quellen
End Sub
C.O.
20
If … Else
If jahre > 5 Then
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
rueck = beitrag_j * 0.09
Else
rueck = beitrag_j * 0.04
End If
Übungen
COM
Quellen
Hinweis: Zeilengliederung muss so sein!
Ansonsten bei Fortsetzungszeile: In der vorhergehenden Zeile
das Zeichen ´_´!
C.O.
21
Schleifen
Option Explicit
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
Sub durchschnitt_1()
Dim tage As Integer
Dim anzahl As Double
Dim summe As Double
Dim schnitt
Dim z As Integer
tage = InputBox("Anzahl Tage: ")
z = 1
summe = 0
Do While z <= tage
anzahl = InputBox("Anzahl Besucher: ", anzahl)
summe = anzahl + summe
z = z + 1
Loop
COM
Quellen
C.O.
schnitt = summe / tage
MsgBox ("Durchschnitt: " & schnitt)
End Sub
22
For - Schleife
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
For i = 1 To j
z = (k * p) / 100
t = r - z
k = k - t
aus = aus & Format(i, "00
") & Format(z, "0000000.00 ") _
& Format(t, "0000000.00 ") & Format(k, "0000000.00") & vbCrLf
Next i
Formatierung numerischer Werte
(vgl. Prg.: Tilgungsplan)
Quellen
C.O.
23
Modelle und Modellierung
Wirkliche Welt: Autohaus
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Modell: Idealisierte Darstellung (Abbildung) der realen Welt zur
Veranschaulichung bestimmter Sachverhalte/Eigenschaften/Prozesse,
Vereinfachung der Realität
24
Diesen da ...
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
25
... picken wir uns mal raus…
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
26
…und untersuchen ihn genauer!
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
27
„Objektive“ Tatsachen!
Kfz
Hersteller= „Daihatsu“
Typ= „Terios“
………
Hubraum= 1495
………
Farbe= „metallic silber“
…….
VKPreis= 17800,00
VBA & Objekte
Daten&Grundstrukturen
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.
28
Produktion am Fließband
VBA & Objekte
Daten&Grundstrukturen
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.
29
Produktion am Fließband
Kfz
Hersteller: Text
Typ: Text
………
Hubraum: Ganzzahl
………
Farbe: Text
…….
VBA & Objekte
Daten&Grundstrukturen
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).
30
Klasse: Fertig!
Notation in UML (Unified Modeling Language)
Kfz
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Hersteller: Text
Typ: Text
………
Hubraum: Ganzzahl
………
Farbe: Text
…….
VKPreis: Währung
Erfassung()
Ändern()
Löschen()
Drucken()
……………
Klassenname
Attribute
Methoden
31
Von der Klasse …
„Abstrakter“ Bauplan
Kfz
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Hersteller: Text
Typ: Text
………
Hubraum: Ganzzahl
………
Farbe: Text
…….
VKPreis: Währung
Erfassung()
Ändern()
Löschen()
Drucken()
……………
32
... zum Objekt
„Konkretes“ individuelles Fahrzeug
:Kfz
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Hersteller= „Daihatsu“
Typ= „Terios“
………
Hubraum= 1495
………
Farbe= „metallic silber“
…….
VKPreis= 17800,00
Erfassung()
Ändern()
Löschen()
Drucken()
……………
33
Die erste eigene Klasse
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
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.
Quellen
C.O.
34
Klasse erfassen
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Hier den Menüpunkt
„Klassenmodul“ anwählen …
35
Klasse erfassen
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
… und die neue Klasse
anlegen.
36
Klasse erfassen
VBA & Objekte
Daten&Grundstrukturen
Doppelklick auf „Klasse“...
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
... und Name ändern (Kfz)!
COM
Quellen
C.O.
37
Klasse erfassen
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
38
Klasse: Erläuterungen
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
39
Klasse: Erläuterungen
Private Hersteller
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
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)
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.
Hersteller = her
Das Attribut „Hersteller“ erhält den Wert, der in
Her von außen an das Attribut übermittelt wurde.
Function ErmittleTyp()
Der im Objekt gespeicherte Wert für den Autotyp
soll an das Testprogramm zurückgeliefert werden.
C.O.
40
Das Testprogramm
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
41
Das Testprogramm
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
Noch besser: Fachkonzept
unter „Module“ codieren.
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
42
Erläuterungen
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
43
Erläuterungen
VBA & Objekte
Daten&Grundstrukturen
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!
44
Programmtest
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Es klappt:
C.O.
45
Beziehungen zwischen
Klassen/Objekten
Überlegung: Wie ist nun der Zusammenhang zwischen dem
Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren?
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
46
Beziehungen zwischen
Klassen/Objekten
Überlegung: Wie ist nun der Zusammenhang zwischen dem
Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren?
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Assoziation zwischen Klassen
Quellen
C.O.
47
Beziehungen zwischen
Klassen/Objekten
Überlegung: Wie ist nun der Zusammenhang zwischen dem
Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren?
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Assoziation zwischen Klassen
Quellen
Eine Methode der Klasse nutzen:
Auto1.erfassen a, b, c
C.O.
48
Jetzt wird gerechnet!
VBA & Objekte
Daten&Grundstrukturen
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).
49
Tipp
Die Klasse:
VBA & Objekte
Daten&Grundstrukturen
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
50
Testprogramm
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
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
Quellen
C.O.
51
Eigenschaftsprozeduren
Die letzte Klassendefinition zeigt, dass es offensichtlich zwei „Sorten“ von
Methoden gibt. Die eine „Sorte“ ist letztlich nur dafür da, den Objekteigen schaften Werte zuzuweisen oder diese Werte abzurufen:
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Sub erfassen(EkP As Double)
………………
Function Ausgeben_Bezeichnung()
………………
Die zweite „Sorte“ führt kompliziertere Dinge durch, hier die Berechnung
eines neuen Wertes aus zwei Eigenschaften/Attributen der Klasse:
Übungen
COM
Quellen
C.O.
Function Ermitteln_VK_Preis()
Ermitteln_VK_Preis = (EK_Preis * K_Faktor / 100) + EK_Preis
End Function
52
Eigenschaftsprozeduren
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Es erscheint sicher sinnvoll, diesen Unterschied in der
Implementierung zu Ausdruck zu bringen. Dies erfolgt mit den
Eigenschaftsprozeduren
Property Let
Property Get
(Wert setzen)
(Wert auslesen).
Hierbei handelt es sich um eine Alternative zu den bisherigen
Möglichkeiten, Attributwerte zu setzen oder zu lesen.
Angesprochen ist also nur die erste „Sorte“ Methoden, für
„Function Ermitteln_VK_Preis()“ bleibt alles so, wie bisher.
53
Eigenschaftsprozeduren
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Option Explicit
Private mBezeichnung As String
Private mEK_Preis As Double
Private mK_Faktor As Double
Public Property Let Artikelbezeichnung(Bez As String)
mBezeichnung = Bez
End Property
Public Property Let Einkaufspreis(EkP As Double)
mEK_Preis = EkP
End Property
Public Property Let K_Faktor(KF As Double)
mK_Faktor = KF
End Property
Public Property Get Artikelbezeichnung() As String
Artikelbezeichnung = mBezeichnung
End Property
Function Ermitteln_VK_Preis()
Ermitteln_VK_Preis = (mEK_Preis * mK_Faktor / 100)+EK_Preis
End Function
54
Das Testprogramm
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
55
Rabattberechnung
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
56
Tilgungsplan
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
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.
Quellen
C.O.
57
Exkurs: API
Das Component Object Model (COM) muss im Zusammenhang mit
dem Begriff API gesehen werden.
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
API (Abk. für "application programming interface") ist eine
Schnittstelle für die Programmierung von Anwendungsprogrammen.
Beispiele:
- funktionsorientierte (z. B. Dynamic Link Library, DLL)
- dateiorientierte (z. B. Gerätedateien unter UNIX)
- objektorientierte (z. B. ActiveX-DLLs)
- protokollorientierte (z. B. FTP)
u.a.
Quellen
Viele Programmierer verwenden die allgemeine Abkürzung API zur
Bezeichnung der speziellen Windows - API (auch WinAPI) => Verwirrung!
C.O.
58
Windows - API
• Systembibliotheken von Windows
VBA & Objekte
• Bereitstellung von Windows – Funktionen in VBA
Daten&Grundstrukturen
• Bietet damit eine beträchtliche Erweiterung des Sprache
Modelle und
Modellierung
• Auf Bibliotheken verteilt
KlassenObjekteBeziehungen
Die wichtigsten Bibliotheken sind:
Übungen
COM
Quellen
Kernal32.dll (z. B. Funktion im I/O – Bereich, Dateisystem …)
User32.dll (z. B.: Mauszeiger, Menüs …)
GDI32.dll (z. B.: Grafik, Farbe …)
C.O.
59
Windows - API
VBA & Objekte
Daten&Grundstrukturen
Aufgabe:
Modelle und
Modellierung
Es ist der Ordner des Windows-Systemverzeichnisses zu
ermitteln.
KlassenObjekteBeziehungen
Hilfe: Aufruf der API – Funktion „GetWindowsDirectory“
Übungen
Hinweis: Zur Kontrolle wurde das C-Laufwerk
umbenannt.
COM
Quellen
C.O.
60
Lösung
Quellcode: Als Modul anlegen!
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Public Declare
Lib "kernel32"
ByVal lpBuffer
ByVal nSize As
Function GetWindowsDirectory _
Alias "GetWindowsDirectoryA" ( _
As String, _
Long) As Long
Option Explicit
Public Function GetWinDir() As String
Dim strWinOrdner As String * 255
Dim lngLaenge
As Long
'API-Funktion aufrufen:
lngLaenge = GetWindowsDirectory(strWinOrdner, _
Len(strWinOrdner))
GetWinDir = Left(strWinOrdner, lngLaenge)
End Function
Wie zu erkennen ist, muss
hinsichtlich der Parameter
sehr „systemnah“ gearbeitet
werden. …As string *
255: Zeichenkette mit
fester Länge, Grund: Diese
API ist in C programmiert.
Testprozedur
Sub Test_GetWinDir()
MsgBox "Windows-Ordner: " & GetWinDir
End Sub
61
Test
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Weitere Beispiele und Erklärungen, s. A. JANKA (Quellen)
Quellen
C.O.
62
Component Object Model
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Das Component Object Model (COM) erlaubt (u. a.) den
objektorientierten Zugriff auf Computerdienste mit VBS/VBA.
COM ist damit eine spezielle API.
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.
Die folgenden Beispiele orientieren sich an D. JOHLEN (s. Quellen).
C.O.
63
Das Dateisystem als Komponente
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
FileSystemObject
File
Drives
Name
DatelastModified
parentFolder
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.
64
Das Dateisystem als Komponente
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
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“.
COM
Quellen
C.O.
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.
65
Sequenzdiagramm
Beispiel: Zubehörshop des Autohauses
Erklärung:
VBA & Objekte
Daten&Grundstrukturen
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.
66
Unser Beispiel
Sequenzdiagramm für den Anwendungsfall „Datei verschieben“
VBA & Objekte
(new)
FileSystemObject
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
FSObjekt:
getFile(…)
Durch getFile wurde ein
neues Objekt erzeugt!
Datei:
File
Übungen
COM
move(…)
Quellen
Folge: Datei ist verschoben!
C.O.
67
Wer hat wann zugegriffen?
Nochmals zurück zur Klasse „File“:
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
File
Name
DatelastModified
parentFolder
moveFile(zielPfad)
……………..
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).
68
Lösung der Aufgabe
VBA & Objekte
Daten&Grundstrukturen
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.
69
Ein Tool zur Projektverwaltung
Modelle und
Modellierung
Ein Programm erstellt eine HTML – Seite, in der
alle Dateien eines Projekt-Verzeichnisses und
das Datum des letzten Zugriffs angezeigt
werden.
KlassenObjekteBeziehungen
Aufgabe: Beschreiben Sie bitte die notwendigen
Lösungsschritte verbal.
VBA & Objekte
Daten&Grundstrukturen
Übungen
COM
Quellen
C.O.
Tipp: Benötigt wird ein Dateisystem, ein Ordner mit
Container, eine HTML – Datei, eine Schleife zum
Lesen und Schreiben in die Datei…
70
Lösung: Verbal
1. Dateisystemobjekt erzeugen
VBA & Objekte
2. Auf den Ordner zugreifen
Daten&Grundstrukturen
3. Auf den Dateicontainer zugreifen
Modelle und
Modellierung
4. HTML - Datei anlegen
KlassenObjekteBeziehungen
5. Eröffnungstags in HTML – Datei schreiben
Übungen
6. Relevante Dateien im Dateicontainer suchen und
schreiben (Schleife!)
COM
Quellen
7. Endtags schreiben
8. Datei schließen
C.O.
71
Lösung: VBA - Code
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Sub htme()
'Dateisystemobjekt erzeugen.
Set projektFSO = CreateObject("Scripting.FileSystemObject")
'Auf den Quellordner zugreifen.
Set projektOrdner = projektFSO.getFolder("c:\Projekt_VBA")
'Auf den Dateicontainer des Quellordners zugreifen.
Set projektDateien = projektOrdner.Files
'Neue index.html Datei anlegen
Set projektHTML = projektFSO.CreateTextFile("c:\Projekt_VBAindex.html")
'HTML Eröffnungstags
projektHTML.writeLine
projektHTML.writeLine
projektHTML.writeLine
projektHTML.writeLine
"<HTML>"
"<h1> Projektordner " & projektOrdner.Name & "</h1>"
"<hr>"
"<BODY>"
For Each datei In projektDateien
projektHTML.writeLine "<P> <A href=" & datei.Name & ">" & datei.Name & " </A> ,
zuletzt geändert: " & datei.datelastmodified & " </P> "
projektHTML.writeLine "<hr>"
Next
' HTML Endtags
projektHTML.writeLine "</BODY>"
projektHTML.writeLine "</HTML>"
projektHTML.Close
MsgBox "HTML File erzeugt."
End Sub
72
Quellen
VBA & Objekte
Daten&Grundstrukturen
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
HELD, B. (2000): EXCEL-VBA-Programmierung. - München,
Mark und Technik-Verlag
JANKA, A. (2005): VBA mit Word. – Bonn, Galileo
Computing – Verlag
JOHLEN, D. (2004): Anwendungsentwicklung.- Holland +
Josenhans-Verlag
COM
Quellen
C.O.
MARTIN, R. (1999): VBA mit Office 2000 lernen. – Bonn,
Addison-Wesley – Verlag
73
Herunterladen