VBA für Excel VBA für Excel

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
Imperative Programmierung
Forschungszentrum caesar
Programmierung II Prof. Dr. Michael Löwe
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
VBA für Excel VBA für Excel
10. Grundlagen imperativer Programmiersprachen
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Imperative Programmierung -Entwicklungswerkzeuge
Objektorientierung mit VBA
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Konstruktoren.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Dynamische Webseiten mit PHP
Imperative Programmierung
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
VB .NET Proseminar .NET SS04.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Vortrag in DVG 3 Hans Zais Matr. Nr
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
Presenter: Daniel Walzenbach Technologieberater
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Einführung in das Programmieren mit JavaScript Mag. Andreas Starzer weloveIT – EDV Dienstleistungen.
OMRON 1 FINS Befehle schicken mit CX – Server Lite Aufgabe :
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Dynamische Datentypen
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Variablen in Programmiersprachen
EPROG Tutorium #3 Philipp Effenberger
Einführung in PHP.
Einführung in PHP 5.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
MODULA-2.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
PHP: Operatoren und Kontrollstrukturen
Beispiel 8 aus den Vorlesungsbeispielen (2) Struktogrammentwurf schrittweise.
Programmiervorkurs WS 2014 Referenzdatentypen
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Übersicht Nachtrag zu Ausdrücken
(Syntax, Strings/Zahlen, Variablen, Arrays)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs Übung Besprechung der Hausaufgabe
Variablen und Datentypen
C++ FÜR cOMPUTERSPIELENTWICKLER
Implementieren von Klassen
 Präsentation transkript:

VBA für Excel VBA für Excel 22.02.2010 eine Einführung in das Programmieren mit „Visual Basic for Applications“ speziell (aber nicht nur) für Excel unter Windows Andreas Rozek HyMeSys Software & Consulting Brunnenstraße 30/2 71032 Böblingen Telefon: (07031) 436 5784 Email: A.Rozek@gmx.de URL: www.Rozek.de Andreas Rozek HyMeSys Software & Consulting 1

Organisatorisches • Theorie: von 900 Uhr bis 1200 Uhr VBA für Excel 22.02.2010 Organisatorisches • Theorie: von 900 Uhr bis 1200 Uhr • Praxis: von 1300 Uhr bis 1700 Uhr • Anwesenheitsliste → Teilnahmebestätigung • begleitende Literatur Christian Friedrich „Einstieg in VBA mit Excel“ Galileo Computing ISBN 3-89842-647-5 ca. 2490 € Andreas Rozek HyMeSys Software & Consulting 2

Zum Einstieg... VBA für Excel 22.02.2010 Andreas Rozek HyMeSys Software & Consulting 3

Zum Einstieg... VBA für Excel 22.02.2010 Andreas Rozek HyMeSys Software & Consulting 4

Überblick über den Kurs VBA für Excel 22.02.2010 Überblick über den Kurs Montag Grundlagen (Syntax & Semantik von VBA) Dienstag Das Excel-Objektmodell Mittwoch Ereignis-gesteuerte Programmierung Formular- und ActiveX-Steuerelemente Donnerstag Eingabeformulare, Programmentwicklung (Anmeldeformular, Zahlen-Memory) Freitag weiterführende Themen (Email, Web, usw.) Verwendung externer Objekte, Sudoku Andreas Rozek HyMeSys Software & Consulting 5

Lernziele Idealerweise sollten Sie am Ende dieses (Crash-)Kurses VBA für Excel 22.02.2010 Lernziele Idealerweise sollten Sie am Ende dieses (Crash-)Kurses • wissen, daß man die Funktionalität von Excel mit VBA erheblich erweitern kann; • einen ungefähren Eindruck von den Möglichkeiten und Grenzen von VBA haben; • in der Lage sein, eigene VBA-Makros zu schreiben und auszuführen; • eigene Benutzeroberflächen (UserForms) erstellen und programmieren können. Andreas Rozek HyMeSys Software & Consulting 6

VBA für Excel 22.02.2010 Kursmaterialien • Microsoft Excel: 60-Tage Testversion http://trial.trymicrosoftoffice.com/trialgermany/default.aspx • Excel VBA Language Reference http://www.microsoft.com/technet/scriptcenter/topcis/office/vba.mspx • Windows Script 5.6 Documentation http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=01592C48-207D-4BE1-8A76-1C4099D7BBB9&displaylang=en • OpenOffice.org Version 3.x http://de.openoffice.org/product/info.html Andreas Rozek HyMeSys Software & Consulting 7

VBA für Excel Teil I: Grundlagen VBA für Excel 22.02.2010 Andreas Rozek HyMeSys Software & Consulting 8

Ein paar Worte zu Excel Grenzen VBA für Excel 22.02.2010 Ein paar Worte zu Excel • Tabellen-artige Darstellung von Zahlen und Texten(!) • Verarbeitung der Tabelleninhalte mithilfe von Formeln • Visualisierung der Tabelleninhalte mithilfe von Diagrammen Grenzen • komplexe Berechnungen, Textverarbeitung • Zugriff auf Dateien, Datenbanken, das WWW (Data Mining) • „Steuerung des Benutzers“ durch Benutzeroberflächen Andreas Rozek HyMeSys Software & Consulting 9

Grenzen sprengen durch Makro-Programmierung VBA für Excel 22.02.2010 Grenzen sprengen durch Makro-Programmierung Macros Macros Interpreter Interpreter DLLs, ActiveX Application Application System System • vorhandene Funktionalität durch (meist einfache) „Makros“ erweitern (sofern die Anwendung dies zuläßt) • durch Integration externer Komponenten (z.B. DLLs oder ActiveX Controls) zusätzliche Funktionalitäten möglich • das Gros der Funktionalitäten kommt weiterhin von der ursprgl. „Application“ (Wirtsprogramm) Andreas Rozek HyMeSys Software & Consulting 10

Was ist „VisualBasic for Applications (VBA)“? VBA für Excel 22.02.2010 Was ist „VisualBasic for Applications (VBA)“? • VisualBasic „Classic“ > VBA > VBScript • VisualBasic • für Anwendungen, Steuerelemente, Bibliotheken • Übersetzung in Maschinensprache (bis Version 6) • VBScript • interpretierte Scriptsprache, z.B. für WSH, HTTP-Server, ... • keine echten Datentypen, ActiveX-Steuerung • VisualBasic for Applications • interpretierte „Automatisierungssprache“ in Wirtsprogramm • Zugriff auf Objektmodell des Wirtsprogrammes Andreas Rozek HyMeSys Software & Consulting 11

Wo und wie wird VBA (in Excel) eingesetzt? VBA für Excel 22.02.2010 Wo und wie wird VBA (in Excel) eingesetzt? • exploratives Prototyping (Anforderungen erkennen) • experimentelles Prototyping (Lösungsmöglichkeiten suchen) • „Einmal“-Programme (Konvertierung von Datenbeständen, Analysen, Studien) • kleinere (häufig Firmen-interne) Projekte • kleinere Anwendungen Treibender Faktor ist stets: • Zeitersparnis (es ist fast schon alles vorhanden) Andreas Rozek HyMeSys Software & Consulting 12

Einmal lernen – mehrmals nutzen VBA für Excel 22.02.2010 Einmal lernen – mehrmals nutzen • (Visual)Basic-Syntax ist stets gleich • die Objekt-Modelle ähneln sich, die Konzepte ohnehin • Ereignis-orientierte Programmierung ist omnipräsent VBA ist direkt einsetzbar in • Microsoft's Office-Anwendungen unter Windows • z.T. Microsoft's Office-Anwendungen unter MacOS X • manchen Anwendungen von Drittanbietern • OpenOffice 3.0 (evtl. auch unter MacOS X und Linux) Andreas Rozek HyMeSys Software & Consulting 13

Excel als VBA-Entwicklungsumgebung (im Vergleich zu Java) VBA für Excel 22.02.2010 VBA für Excel Excel als VBA-Entwicklungsumgebung (im Vergleich zu Java) Andreas Rozek HyMeSys Software & Consulting 14

Excel als Entwicklungsumgebung VBA für Excel 22.02.2010 Excel als Entwicklungsumgebung • Entwicklerwerkzeuge einblenden • Sicherheitseinstellungen anpassen • Makro-Rekorder (wird hier nicht behandelt) • Persönliche Makroarbeitsmappe c:\Dokumente und Einstellungen\benutzer\Anwendungsdaten\ Microsoft\Excel\XLSTART\Personal.xlsb Andreas Rozek HyMeSys Software & Consulting 15

Java-Übersetzungseinheiten VBA für Excel 22.02.2010 Java-Übersetzungseinheiten • Klassen (eine Klasse pro Datei) • Pakete (packages, als Verzeichnis oder JAR-Archiv) • z.B. unter Eclipse: Projekte und zusätzliche Dateien VBA (in Excel, Projekt-Explorer) • „Projekte“ (Arbeitsmappen, persönliche Makroarbeitsmappe) • „Excel-Objekte“ (Tabellenblätter u.a.) *.cls • Formulare (UserForms) *.frm • Standardmodule *.bas • Klassenmodule *.cls Andreas Rozek HyMeSys Software & Consulting 16

Excel als Entwicklungsumgebung VBA für Excel 22.02.2010 Excel als Entwicklungsumgebung • VBA-Editor • Eigenschaftenfenster • Direktbereich • Editor-Einstellungen • Kontext-sensitive Hilfe (F1), IntelliSense • Objektkatalog (F2) • Modul-Ebene, Prozedur-Ebene, Code-Ebene Andreas Rozek HyMeSys Software & Consulting 17

Excel als Entwicklungsumgebung (Fortsetzung) VBA für Excel 22.02.2010 Excel als Entwicklungsumgebung (Fortsetzung) • Ausführen einer Prozedur (F5) • Haltepunkt setzen/löschen (F9) • Einzelschritt (F8), Prozedurschritt (Shift-F8) • Variablenwerte als Tool-Tip • Lokalfenster: Variablen-Sichtung und -Verwaltung • Überwachungsfenster: Überwachen von Ausdrücken • Debug.print expression Andreas Rozek HyMeSys Software & Consulting 18

VBA für Excel Syntax und Semantik VBA für Excel 22.02.2010 Andreas Rozek HyMeSys Software & Consulting 19

Grundlegendes zur Syntax VBA für Excel 22.02.2010 Grundlegendes zur Syntax • eine Anweisung pro Zeile (Zeilenende = Anweisungsende) • : als Trenner zwischen zwei Anweisungen • _ als (Zeilen-)Fortsetzungszeichen • Groß-/Kleinschreibung ist nicht signifikant • Code-Editor paßt Schreibweise automatisch an • ' als Kommentarzeichen (für Zeilenkommentare) • Code-Editor (vgl. Eclipse) • beherrscht „IntelliSense“, „Syntax Colorization“ • gibt häufig bereits den Rahmen für eine Prozedur vor Andreas Rozek HyMeSys Software & Consulting 20

Namen („Bezeichner“) • 1...255 Zeichen VBA für Excel 22.02.2010 Namen („Bezeichner“) • 1...255 Zeichen • erstes Zeichen muß ein Buchstabe sein • danach sind Buchstaben, Ziffern und Unterstriche erlaubt • Schlüsselworte sind zu meiden • Groß-/Kleinschreibung wird nicht unterschieden • ISO 8859-1 ist zulässig (Unicode?) Andreas Rozek HyMeSys Software & Consulting 21

Datentypen • Boolean 2 Bytes true oder false • Byte 1 Byte 0...255 VBA für Excel 22.02.2010 Datentypen • Boolean 2 Bytes true oder false • Byte 1 Byte 0...255 • Integer 2 Bytes -32768...+32767 • Long 4 Bytes -2147483648...+2147483647 • Single 4 Bytes ±3,402823e38...±1,401298e-45 • Double 8 Bytes ±1,79769313486231e308... ±4,94065645841247e-324 • Currency 8 Bytes -922337203685477,5808... +922337203685477,5807 Andreas Rozek HyMeSys Software & Consulting 22

Datentypen (Fortsetzung) VBA für Excel 22.02.2010 Datentypen (Fortsetzung) • Decimal 14 Bytes (groß, Untertyp von Variant) • Date 8 Bytes 01.01.100...31.12.9999 • Object 4 Bytes Referenz auf ein Objekt • String 10+n Bytes variable Länge < 2147483648 Zeichen • String n Bytes feste Länge 1...65535 Zeichen • Variant 16 Bytes für Zahlen • Variant 22+n Bytes für Zeichenketten Andreas Rozek HyMeSys Software & Consulting 23

Datentypen-Suffixe • Integer % • Long & • Single ! • Double # VBA für Excel 22.02.2010 Datentypen-Suffixe • Integer % • Long & • Single ! • Double # • Currency @ • String $ Suffixe sind nicht Bestandteil des Variablennamens Andreas Rozek HyMeSys Software & Consulting 24

Namenskonventionen • vor allem für Variablen und Konstanten VBA für Excel 22.02.2010 Namenskonventionen • vor allem für Variablen und Konstanten • machen (Variablen-)Eigenschaften namentlich sichtbar • allgemeine Form [prefix]kind[name] • Präfixe • s = lokale, statische Variablen • m = Modul-spezifische Variablen und Konstanten • g = globale Variablen und Konstanten Andreas Rozek HyMeSys Software & Consulting 25

Namenskonventionen (Fortsetzung) VBA für Excel 22.02.2010 Namenskonventionen (Fortsetzung) • Variablen-Arten für Excel-Blätter • wks Worksheet (Arbeitsblatt) sht • cht Chart (Diagramm) • frm Form (Dialog) • bas Basic (Standardmodul) mdl • cls Class (Klassenmodul) • xl4 Excel4 (Makroblatt) • im Falle einer Liste wird der Art ein „s“ angehängt Andreas Rozek HyMeSys Software & Consulting 26

Namenskonventionen (Fortsetzung) VBA für Excel 22.02.2010 Namenskonventionen (Fortsetzung) • Variablen-Arten für die verschiedenen Datentypen • bln Boolean • sng Single • cur Currency • str String • dat Date • typ Type (Benutzerdefiniert) • dbl Double • var Variant • int Integer • lng Long • obj Object Andreas Rozek HyMeSys Software & Consulting 27

Namenskonventionen (Fortsetzung) VBA für Excel 22.02.2010 Namenskonventionen (Fortsetzung) • Variablen-Arten für die verschiedenen Steuerelemente • lbl Label • mpg MultiPage • txt Textbox • spn SpinButton • cbo Combobox • scr Scrollbar • lst Listbox • img Image • chk Checkbox • ref RefEdit • opt OptionButton • trv TreeView • tgl ToggleButton • lsv ListView • cmd CommandButton • cal Calendar • tab TabStrip Andreas Rozek HyMeSys Software & Consulting 28

Deklaration von Variablen VBA für Excel 22.02.2010 Deklaration von Variablen • implizit (durch Verwendung in einer Zuweisung) varValue = „implizit deklarierte Variable“ strValue$ = „implizit deklarierte String-Variable“ • explizit (irgendwo, aber vor der ersten Verwendung) dim varValue dim strValue as string dim|public|static name [as type] [, name [as type]] • Verbieten impliziter Deklarationen option explicit Andreas Rozek HyMeSys Software & Consulting 29

Deklaration von Datenfeldern (Arrays) VBA für Excel 22.02.2010 Deklaration von Datenfeldern (Arrays) • stets explizit dim varArray() dim intArray(4) as Integer dim strArray(-3 to 3) as String dim|public|static name (n | n to m [,...])[as type][,...] • bis zu 60(!) Dimensionen möglich • Änderung des impliziten Start-Index option base 1 • Änderung der Feldgröße zur Laufzeit redim varArray(3) redim preserve intArray(15) Andreas Rozek HyMeSys Software & Consulting 30

Gültigkeitsbereich von Variablen und Konstanten VBA für Excel 22.02.2010 Gültigkeitsbereich von Variablen und Konstanten • Deklaration auf Modulebene (public) • innerhalb des gesamten Modules sichtbar • Variablenwert bleibt erhalten • Deklaration auf Prozedurebene (dim) • nur innerhalb der Prozedur sichtbar • auf Modulebene deklarierte Variablen dürfen überdeckt werden • statische Variablen behalten ihren Wert Andreas Rozek HyMeSys Software & Consulting 31

Literale Konstanten • Zahlen 1234 1234e-56 VBA für Excel 22.02.2010 Literale • Zahlen 1234 1234e-56 • Zeichenketten „dies ist ein Text“ • Datum und Uhrzeit #21/07/2008 9:15:35# Konstanten const conValue = „Zeichenkette“ const conValue = 1234 const conValue = 1234e-56 const conValue = #21/07/2008 9:15:35# const conValue as String = „Zeichenkette“ const conValue as Integer = 1234 const name [as type] = value Andreas Rozek HyMeSys Software & Consulting 32

Arithmetische Operatoren VBA für Excel 22.02.2010 Arithmetische Operatoren • Potenzierung ^ a ^ b • Grundrechenarten + - * / a + b • Ganzzahldivision \ a \ b • Modulo-Division mod a mod b • Negation - -a • Potenzierung negativer Zahlen nur für ganzzahlige Exponenten • Ganzzahldivision wandelt Argumente in Byte/Integer/Long • Modulo-Division liefert Divisionsrest Andreas Rozek HyMeSys Software & Consulting 33

Vergleichsoperatoren VBA für Excel 22.02.2010 Vergleichsoperatoren • Vergleich < <= >= > a < b • Gleichheit = a = b • Ungleichheit <> a <> b • Referenzvergleich is a is b • Ähnlichkeit like a like pattern • Zeichenkettenvergleich vergleicht ASCII-Codes • like-Operator erlaubt Platzhalter (? *) im Vergleichsmuster Andreas Rozek HyMeSys Software & Consulting 34

Logische Operatoren ab: 00 10 01 11 • Konjunktion and a and b 0 0 0 1 VBA für Excel 22.02.2010 Logische Operatoren ab: 00 10 01 11 • Konjunktion and a and b 0 0 0 1 • Äquivalenz eqv a eqv b 1 0 0 1 • Implikation imp a imp b 1 0 1 1 • Negation not not a • Disjunktion or a or b 0 1 1 1 • Antivalenz xor a xor b 0 1 1 0 Andreas Rozek HyMeSys Software & Consulting 35

Verkettungsoperatoren VBA für Excel 22.02.2010 Verkettungsoperatoren • Verkettung & a & b • Verkettung + a + b Operator-Hierarchie • ^ • - • * / • \ • mod • + - • & • = <> < > <= >= is like • not and or xor eqv imp Andreas Rozek HyMeSys Software & Consulting 36

Fallunterscheidungen VBA für Excel 22.02.2010 Fallunterscheidungen • if ... then ... else if condition then [...] [else [...]] if condition then ... [elseif condition then ...] [else ...] end if • verschachtelbar Andreas Rozek HyMeSys Software & Consulting 37

Fallunterscheidungen (Fortsetzung) VBA für Excel 22.02.2010 Fallunterscheidungen (Fortsetzung) • select case select case expression [case expression [,...] ...] [case n to m [,...] ...] [case is < | <= | > | >= | = | <> expression [case else ...] end select • kein break erforderlich! Andreas Rozek HyMeSys Software & Consulting 38

VBA für Excel 22.02.2010 Schleifen • for ... next for counter = first to last [step delta] ... [exit for] next [counter] • Zählvariable außerhalb der Schleife deklarieren • Zählvariable innerhalb der Schleife nicht verändern! • Vorsicht mit Zählvariablen vom Typ single oder double Andreas Rozek HyMeSys Software & Consulting 39

Schleifen (Fortsetzung) VBA für Excel 22.02.2010 Schleifen (Fortsetzung) • for each for each element in group ... [exit for] next [element] • „Gruppen“ können Arrays oder Collections sein • auch mehrdimensionale Arrays zulässig (niedrige Indices werden zuerst durchlaufen) Andreas Rozek HyMeSys Software & Consulting 40

Schleifen (Fortsetzung) VBA für Excel 22.02.2010 Schleifen (Fortsetzung) • do do [while | until condition] ... [exit do] loop do ... [exit do] loop [while | until condition] • auch Endlosschleifen möglich Andreas Rozek HyMeSys Software & Consulting 41

Schleifen (Fortsetzung) VBA für Excel 22.02.2010 Schleifen (Fortsetzung) • while while condition ... wend • bitte nicht mehr verwenden („deprecated“) • kein Verlassen der Schleife möglich Andreas Rozek HyMeSys Software & Consulting 42

Goto und Sprungmarken • goto goto line | label • Sprungmarken number VBA für Excel 22.02.2010 Goto und Sprungmarken • goto goto line | label • Sprungmarken number label: • alphanumerische Sprungmarken: • erstes Zeichen muß ein Buchstabe sein • danach können Buchstaben oder Ziffern folgen • für on error goto von Bedeutung Andreas Rozek HyMeSys Software & Consulting 43

Prozeduren: Subroutinen und Funktionen VBA für Excel 22.02.2010 Prozeduren: Subroutinen und Funktionen • Subroutinen [private | public][static] sub name [(params)] ... [exit sub] end sub • Parameterlisten [optional][byVal | byRef][ParamArray] name[()][as type][=def] im Normalfall [byVal | byRef] name[()][as type] static läßt alle inneren Variablen einen Prozedur-Aufruf überdauern Andreas Rozek HyMeSys Software & Consulting 44

Prozeduren (Fortsetzung) VBA für Excel 22.02.2010 Prozeduren (Fortsetzung) • Funktionen [private | public ][static] function name [(params)][as type] ... [exit function] ... name = expression end function • Sichtbarkeit von Prozeduren • public von allen Modulen aller Projekte aus aufrufbar • private nur aus dem eigenen Modul aus aufrufbar (static hat nichts mit der Sichtbarkeit zu tun) Andreas Rozek HyMeSys Software & Consulting 45

Übergabe von Argumenten VBA für Excel 22.02.2010 Aufruf von Prozeduren Subroutinen [call] name [(] [argument [, argument]] [)] Funktionen ... = name ([argument [, argument]]) Übergabe von Argumenten byValue für Variablen und Ausdrücke, Übergabe einer Kopie byRef nur für Variablen, Übergabe einer Referenz Andreas Rozek HyMeSys Software & Consulting 46

Konvertierungsfunktionen VBA für Excel 22.02.2010 Konvertierungsfunktionen • CBool (expression) → Boolean • CByte (expression) → Byte • CCur (expression) → Currency • CDate (expression) → Date • CDbl (expression) → Double • CDec (expression) → Decimal • CInt (expression) → Integer • CLng (expression) → Long • CSng (expression) → Single • CVar (expression) → Variant • CStr (expression) → String Andreas Rozek HyMeSys Software & Consulting 47

Konvertierungsfunktionen (Fortsetzung) VBA für Excel 22.02.2010 Konvertierungsfunktionen (Fortsetzung) • Val (string-expression) → Zahl • Str (number-expression) → String • Hex (number-expression) → Hexadezimal-Darstellung • Oct (number-expression) → Oktal-Darstellung • Asc (string-expression) → Zeichencode des ersten Zeichens • Chr (byte-expression) → Zeichen mit ggb. Zeichencode Andreas Rozek HyMeSys Software & Consulting 48

Datentypen (o.ä.) überprüfen oder anzeigen VBA für Excel 22.02.2010 Datentypen (o.ä.) überprüfen oder anzeigen • IsArray (variable) ist Variable ein Feld? • IsDate (expression) ist Ausdruck vom Typ „Date“? • IsEmpty (expression) ist Ausdruck initialisiert? • IsError (expression) enthält Ausdruck ein Fehler-Objekt? • IsMissing (expression) ist optionales Argument vorhanden? • IsNull (expression) enthält Ausdruck nur Null-Werte? • IsNumeric (expression) ist Ausdruck numerisch? • IsObject (variable) enthält Variable eine Objekt-Referenz? • TypeName (expression) liefert den Datentyp des Ausdruckes Andreas Rozek HyMeSys Software & Consulting 49

Klassen Instanzieren ja, Vererbung nein VBA für Excel 22.02.2010 Klassen Instanzieren ja, Vererbung nein Anlegen und Verwalten über den Code-Editor in eigenem Klassenmodul nur Instanzen-Methoden und -Eigenschaften static bedeutet: alle Prozedur-internen Variablen überdauern einen Aufruf (erspart viele einzelne "static"s) Selbst-Referenz me Andreas Rozek HyMeSys Software & Consulting 50

Eigenschaftsprozeduren VBA für Excel 22.02.2010 Eigenschaftsprozeduren Auslesen einer Eigenschaft [public | private] [static] property get name [(params)] as type ... [exit property] ... [name = expression] end property Zuweisen eines Wertes an eine Eigenschaft [public | private] [static] property let name ([params,] value) ... [exit property] end property Zuweisen einer Referenz an eine Eigenschaft [public | private] [static] property set name ([params,] reference) ... [exit property] end property Andreas Rozek HyMeSys Software & Consulting 51

Konstruktor und Destruktor VBA für Excel 22.02.2010 Konstruktor und Destruktor Konstruktor private sub Class_initialize () end sub Destruktor private sub Class_terminate () end sub Selbst-Referenz me Andreas Rozek HyMeSys Software & Consulting 52

Verwenden von Klassen und Objekten VBA für Excel 22.02.2010 Verwenden von Klassen und Objekten Zuweisung von Referenzen dim name as Object set name = reference Instanzieren einer Klasse set name = new class Adressieren von Eigenschaften ... = instance.property instance.property = ... Andreas Rozek HyMeSys Software & Consulting 53

Verwenden von Klassen und Objekten VBA für Excel 22.02.2010 Verwenden von Klassen und Objekten Null-Referenz set name = nothing if expression is nothing then ... with ... end with with instance ... end with Vorsicht bei Schachtelungen! Andreas Rozek HyMeSys Software & Consulting 54

Funktionen für die Ein- und Ausgabe VBA für Excel 22.02.2010 Funktionen für die Ein- und Ausgabe Ausgabe im Direktbereich debug.print argument Meldungsfenster ... = MsgBox(prompt [, buttons] [, title]) Konstanten für „buttons“ und Rückgabewerte siehe Objektkatalog Eingabefenster ... = InputBox(prompt [,title] [, default]) gibt immer eine Zeichenkette zurück Andreas Rozek HyMeSys Software & Consulting 55

Mathematische Funktionen VBA für Excel 22.02.2010 Mathematische Funktionen abs (expression) Betrag atn (expression) Arcustangens cos (expression) Cosinus exp (expression) Exponentialfunktion fix (expression) ganzzahliger Anteil (Rundung gegen 0) int (expression) ganzzahliger Anteil (Rundung gegen -infty) log (expression) natürlicher Logarithmus rnd ([seed]) Zufallszahl sng (expression) Vorzeichenfunktion -1,0,+1 sin (expression) Sinus sqr (expression) Quadratwurzel tan (expression) Tangens Andreas Rozek HyMeSys Software & Consulting 56

Zeichenketten-Funktionen VBA für Excel 22.02.2010 Zeichenketten-Funktionen liegen z.T. in Byte- und Wort-Varianten vor (Unicode) Zeichenkettenlänge Entfernen von Weißzeichen ... = len (str) ... = trim (str) Zeichenkettenausschnitte ... = left(str,len) ... = mid(str,start,len) ... = right(str,len) Zeichenkettenumwandlungen ... = lcase (str) ... = ucase (str) Andreas Rozek HyMeSys Software & Consulting 57

Datum und Uhrzeit • aktuelles Datum/aktuelle Uhrzeit VBA für Excel 22.02.2010 Datum und Uhrzeit • aktuelles Datum/aktuelle Uhrzeit Date() Time() Now() • Bestandteile eines Datums/einer Uhrzeit Day(date) Month(date) Year(date) Hour(time) Minute(time) Second(time) • konkretes Datum/konkrete Uhrzeit DateSerial(year, month, day) TimeSerial(hour, minute, second) • Wochentage und Monate Weekday(date [, firstdayofweek]) WeekdayName(date , abbreviated, firstdayofweek) MonthName(month [, abbreviated]) Andreas Rozek HyMeSys Software & Consulting 58

Übungen spielen sich heute im Code-Editor und im Direktbereich ab VBA für Excel 22.02.2010 Übungen spielen sich heute im Code-Editor und im Direktbereich ab öffnen Sie Excel, nehmen Sie die Entwicklungseinstellungen vor und öffnen Sie den Code-Editor im Direktbereich: debug.print „Hello, World!“ debug.print sind zuviele Zeichen? schreiben Sie eine Sub- routine namens „say“, die einen Zeichenketten-Parameter erwartet und diesen mittels „debug.print“ ausgibt Andreas Rozek HyMeSys Software & Consulting 59

Übungen (Fortsetzung) VBA für Excel 22.02.2010 Übungen (Fortsetzung) machen Sie den Parameter optional (Default ist „“) entfernen Sie den Default und prüfen Sie stattdessen in Ihrer Prozedur, ob ein Argument übergeben wurde – falls nicht, geben Sie „(null)“ aus ersetzen Sie den einzelnen Parameter durch ein „ParamArray“ und geben Sie alle Elemente dieses Feldes per debug.print aus jetzt geben Sie alle Elemente in einer Zeile aus als nächstes puffern Sie die übergebenen Texte zwischen und implementieren einen Zeilenumbruch nach 80 Zeichen Andreas Rozek HyMeSys Software & Consulting 60

Übungen (Fortsetzung) VBA für Excel 22.02.2010 Übungen (Fortsetzung) legen Sie eine neue Klasse „Console“ an – diese wird gleich die Konsolenausgabe vereinfachen legen Sie eine private Klassen-Variable „Buffer“ an, die die je- weilige Ausgbezeile zwischenspeichert, initialisieren Sie mit „“ legen Sie eine statische Methode „print“ an, die wie zuvor „say“ zunächst alle Ausgaben zwischenspeichert und nach max. 80 Zeichen per debug.print ausgibt (nicht aber, wenn die Zeile noch nicht voll ist) legen Sie eine weitere Methode „println“ an, die sich wie „print“ verhält, aber am Ende den Puffer-Inhalt ausschreibt Andreas Rozek HyMeSys Software & Consulting 61

Übungen (Fortsetzung) VBA für Excel 22.02.2010 Übungen (Fortsetzung) programmieren Sie einen elektronischen Würfel versuchen Sie, das Würfelergebnis „quasi-grafisch“ in den Direktbereich auszugeben programmieren Sie einen Lottozahlengenerator können Sie auch dessen Ausgabe „quasi-grafisch“ (wie auf einem Lottoschein) anzeigen? Andreas Rozek HyMeSys Software & Consulting 62

Übungen (Fortsetzung) VBA für Excel 22.02.2010 Übungen (Fortsetzung) ermitteln Sie für ein gegebenes Datum die aktuelle Kalender- woche – tragen Sie diese Funktion als zusätzliche Funktion in Excel ein ermitteln Sie für einen ggb. Monat die Anzahl der Arbeitstage (zunächst noch ohne Feiertage) legen Sie ein Feld von Feiertagen an (für ein ggb. Jahr) und berücksichtigen Sie dieses bei der Ermittelung der Arbeitstage wie spät ist es? wie lange dauert es noch bis zum Ende dieses Kurses? Andreas Rozek HyMeSys Software & Consulting 63

Übungen (Fortsetzung) VBA für Excel 22.02.2010 Übungen (Fortsetzung) geben Sie mittels MsgBox eine Nachricht aus – suchen Sie zuvor die Liste der Konstanten für die „buttons“ heraus welchen Button hat der Benutzer gedrückt? Zeigen Sie ihn an lassen Sie den Benutzer mittels InputBox einen Text eingeben und zeigen Sie diesen an – was passiert, wenn der Benutzer die Eingabe abbricht? Andreas Rozek HyMeSys Software & Consulting 64