Post on 12-Oct-2019
2
Zusammenfassung der 3. Vorlesung
Einführung in Excel/VBA
• Einführung in die Tabellenkalkulation
• Erste Schritte mit VBA
– Integrierte Entwicklungsumgebung– Makros– Programm “Hello World!”
3
1. Informationsdarstellung & -verarbeitung Grundlagen2. Betriebssysteme, Programmiersprachen *3. Einführung in Excel/VBA VBA4. Struktur von (VBA) Programmen *5. Logische Elemente I (Schleifen) * 6. Logische Elemente II (Entscheidungen) *7. Beispielprogramm (Dynamik starrer Körper) *8. Datentypen, Eingabe/Ausgabe *9. Datenfelder *10. Benutzerdefinierte Datentypen *11. Objektorientierte Programmiertechniken I *12. Objektorientierte Programmiertechniken II *13. Matlab I Matlab14. Matlab II *
Inhalt / Planung der Vorlesung
4
Inhalt der heutigen Vorlesung
Struktur von (VBA) Programmen
• Objekte in VBA• Module• Variablen• Prozeduren/Funktionen
5
Einführung in die Programmierung
• VBA unterstützt prozedurales/strukturiertes
Programmieren
• VBA hat zwei wesentliche Eigenschaften einer modernen
Programmiersprache
– ereignisorientiert
– objektorientiert
Ermöglicht Realisierung von komplexen Programmen, interaktive Projekte
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
6
Ereignisorientierte Programmierung
• Beispiel: „Programm wartet auf Mausklick…“
• Keine vorgeschriebene Reihenfolge
• Programm ist eine ungeordnete Sammlung von Prozeduren und Funktionen
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
7
Was ist ein Objekt?
• Objekte sind logische, programmier- und steuerbare Einheiten
• Im Alltag: Objekt ~ Gegenstand
• Beispiel: Objekt „Auto“
Eigenschaften: Tankfüllstand, SchnelligkeitMethoden: Beschleunigen,Tanken
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
8
Objekte in VBA
• Es gibt etwa 150 Objekttypen (Klassen) in Excel, plus weitere Bibliotheken
• Alle Objekte sind hierarchisch gegliedert
• Objekte müssen gezielt angesprochen werden
• Sog. Container-Objekte beinhalten weitere Objekte
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
9
Objekt-Hierarchie
• Hierarchie der wichtigsten Objekte in Excel
• Containerobjekte
• Beispiel ObjektzugriffExcel.Workbooks(1).Worksheets(1).Range("A1")
Excel
Arbeitsmappen
Tabellenblätter
Zellen
Bereiche
Diagramme
Excelfunktionen
Application
Workbooks
Worksheets
Cells
Worksheet-Functions
Chart Objects
Range
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
10
Methoden: Manipulieren von Objekten
• Mit Hilfe von Methoden lassen sich Eigenschaften von Objekten bestimmen oder verändern:
Bsp.:• Methode ClearContents() löscht Formeln oder Daten
aus Zellbereichen, jedoch nicht die Formatierung
• Methode Clear() entfernt alle Objekte (Rahmen, Füllfarbe, Werte,…) aus Zellbereichen
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
11
Beispiel: Containerobjekte, Methoden
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
12
Programmieren mit Modulen
• Modul = Sammlung von Prozeduren
• sinnvoll: Gruppierung ähnlicher Prozeduren
• Erzeugen von Modulen mit
Menü → Einfügen → Modul
• Ändern von Modul-Namen im Eigenschaftenfenster
Menü → Ansicht → Eigenschaftenfenster
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
13
Aufbau eines strukturierten Moduls
• Übersichtlicher Aufbau
Kommentare zum ModulDeklarationsteilProzedurenKommentare zur ProzedurDeklarationsteilAnweisungen, Kontrollstrukturen, …
FunktionenKommentare zur FunktionDeklarationsteilAnweisungen, Kontrollstrukturen, …
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
14
Module im VBA Projekt
• Beispiel:
Deklarationsteil
Deklarationsteil
Anweisungen
Kommentar
Prozedur
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
15
Dokumentation
• Dokumentation macht Programm nachvollziehbar
• Kommentare können überall im Programm stehen
• Kommentarzeichen: Hochkomma „ ‘ “
• Beispiel:'dieser Text dient der Dokumentation
Text bis Zeilenende wird vom Interpreter ignoriert
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
16
(Explizite) Deklaration
• Explizite Vereinbarung von Variablen, Arrays, Typen, Konstanten
• Beispiele:
Dim Ergebnis1 As Double
Dim Ausgabetext2 As String
• Die Namen der Variablen sollen eindeutig und aussagekräftig sein!
Gleitkommazahl mit hoher Genauigkeit
Zeichenkette
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
17
Implizite Deklaration ...
• Ist eine Variable nicht vereinbart, so nimmt diese den Typ des ersten Übergabewerts an!
• Beispiel:Übergibt man der nicht deklarierten Variablen als erstes eine Zeichenkette, so wird die Variable implizit als „String“ vereinbart.
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
18
Implizite Deklaration vermeiden
• Implizite Vereinbarung ist fehleranfällig, deswegen:Anweisung Option Explicit als erste Anweisung im Modul
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
• Variablendeklaration erzwingen: (in VBE) Extras->Optionen->Editor->
Variablendeklaration erforderlich
19
Variablendeklaration: Syntax
• Möglichkeiten:
Dim Name [As Type]Public Name [As Type]Private Name [As Type] Static Name [As Type]
• Beispiel:
Public i as Long
deklariert “i” als Ganzzahl
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
20
Konstantendeklaration
• Syntax:
[Private|Public] Const Name [As Type] = Value
• Beispiel:
Private Const Pi as Double=3.1415927
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
21
Gültigkeitsbereiche von Variablen
• Dim Standarddeklaration
(Modulebene oder Prozedurebene)
• Public Modulebene
Variable im gesamten Projekt bekannt
• Private ModulebeneVariable nur im Modul bekannt
(Standardeinstellung)
• Static Nur in ProzedurVariable behält Wert während der gesamten Laufzeit
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
22
Wichtige Datentypen
• Boolean (Boolescher Wert) (2 Bytes)• True oder False
Integer (Ganzzahl) (2 Bytes)• -32.768 bis 32.767
Long (lange Ganzzahl) (4 Bytes)• -2.147.483.648 bis 2.147.483.647
.Single (Gleitkommazahl mit einfacher Genauigkeit) (4 Bytes)• -3,402823E38 bis -1,401298E-45 für negative Werte• 1,401298E-45 bis 3,402823E38 für positive Werte
Double (Gleitkommazahl mit doppelter Genauigkeit) (8 Bytes)• 1,79769313486231E308 bis -4,94065645841247E-324 für negative Werte • 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte
Date (8 Bytes)• 1. Januar 100 bis 31. Dezember 9999
String (Länge der Zeichenkette*Byte)• Zeichenfolgenlänge 1 bis ca. 65.400
Variant (16 Bytes)• Standardtyp für nicht-deklarierte Variablen
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
SpeicherbedarfWertebereich
23
Prozeduren und Funktionen
• Mittel zur Strukturierung
• Einsatz z.B. bei wiederholt auftretenden Aufgaben
• Unterschied in der Art der Werteübergabe:
Prozedur – Übergabe/Rückgabe NUR durch Parameter
Funktion – Rückgabe durch Funktionsnamen
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
24
Prozeduren
• Syntax:
Sub Name(Parameterliste)…
End Sub
Parameterliste: [variable1,variable2,...]
Variablen in Parameterliste können Eingangs- und/ oder Rückgabewerte der Prozedur sein
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
25
Beispiel „Werteübergabe“
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
26
Beispiel “Werteübergabe”
• Erläuterungen zum Beispiel „Werteübergabe“
– Aufruf der Subroutine mittels Call ist optional, dient aber der Übersichtlichkeit.
– In der aufgerufenen Subroutine können andere Namen in der Parameterliste stehen, entscheidend ist die Reihenfolge.
wert1 wird a, wert2 wird b und damit Typ Single.
– Mehrfachdeklaration nicht möglich, d.h. a und b können inSub rout2(a,b) nicht nochmals deklariert werden.
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
27
Modus der Werteübergabe
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
• VBA unterstützt zwei Modi der Werteübergabe:
• “call by reference”: (wie in FORTRAN)
Speicheradresse der Parameter wird übergebenÄnderung in Unterprogramm ändert Wert im übergeordneten
Programm
• “call by value”: (wie in C)
Wert der Parameter wird übergebenUnterprogramm legt getrennte Kopie der Variable an Änderung im
Unterprogramm hat keinen Einfluß auf Wert im übergeordneten Programm
• VBA Standardmodus ist “call by reference”
28
Beispiel zu Modus Werteübergabe
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
29
Funktionen / Functions
• Rechenvorgänge, die immer wieder benötigt werden, können als Funktionen programmiert werden.
• Das Ergebnis wird dem Funktionsnamen zugewiesen.
• Übersichtlichkeit, Modularisierung
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
30
Beispiel „Lineare Interpolation“
)( x1xx1x2y1y2+y1=y −⋅
−−m= y2− y1
x2− x1 = y− y1x− x1
x
y
x1,y1
x2,y2
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
31
Beispiel „Lineare Interpolation“
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
32
Beispiel „Lineare Interpolation“
• Bemerkungen:
– Die programmierte Funktion kann direkt unter Excel benutzt werden
– Zeilenumbruch möglich mit „ _“
– Das Ergebnis wird dem Funktionsnamen zugewiesenEs findet keine Übergabe in der Parameterliste statt!!
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
33
Können Parameter von Funktionen geändertwerden?
• In VBA Programmen kommunizieren Funktionen per Rückgabewert und möglicherweise durch Modifikation derParameter
• Aber: bei Nutzung als “benutzerdefinierte Funktion” in Excel ist nur Rückgabe über Funktionswert zulässig!
• Beispiel:
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen
34
Beispiel „Winkelfunktionen“
• Die Excel-Funktionen benötigen das Argument, also den Winkel im Bogenmaß:
• Definition der Funktion SinGrad(α°)
α= α°180⋅π
VBA-Eigenschaften
Ereignisorient.Programmierung
Objektorient.Programmierung
Programmierenmit Modulen
DeklarationVariablen/Konst.
Prozeduren
Funktionen