Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access...

30
Lorenz Hölscher Richg einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

Transcript of Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access...

Page 1: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

Lorenz Hölscher

Richtig einsteigen:

Access 2013 VBA-Programmierung

Von den Grundlagen bis zur professionellen Entwicklung

Page 2: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung
Page 3: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

Lorenz Hölscher

Richtig einsteigen:Access 2013 VBA-Programmierung

Von den Grundlagen bis zur professionellen Entwicklung

Page 4: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

Lorenz Hölscher: Access 2013 VBA-Programmierung Copyright © 2013 O’Reilly Verlag GmbH & Co. KG

Das in diesem Buch enthaltene Programmmaterial ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor, Übersetzer und der Verlag übernehmen folglich keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programmmaterials oder Teilen davon entsteht. Die in diesem Buch erwähnten Software- und Hardwarebezeichnungen sind in den meisten Fällen auch eingetragene Marken und unterliegen als solche den gesetzlichen Bestimmungen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen der Hersteller.

Das Werk einschließlich aller Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.

Die in den Beispielen verwendeten Namen von Firmen, Organisationen, Produkten, Domänen, Personen, Orten, Ereignissen sowie E-Mail-Adressen und Logos sind frei erfunden, soweit nichts anderes angegeben ist. Jede Ähnlichkeit mit tatsächlichen Firmen, Organisationen, Produkten, Domänen, Personen, Orten, Ereignissen, E-Mail-Adressen und Logos ist rein zufällig.

Kommentare und Fragen können Sie gerne an uns richten:

Microsoft Press Deutschland Konrad-Zuse-Straße 1 85716 Unterschleißheim E-Mail: [email protected]

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 15 14 13

Druck-ISBN 978-3-86645-2251 PDF-ISBN 978-3-8483-30249 EPUB-ISBN 978-3-8483-01577 MOBI-ISBN 978-3-8483-11606

© 2013 O’Reilly Verlag GmbH & Co. KG Balthasarstr. 81, 50670 Köln Alle Rechte vorbehalten

Korrektorat: Karin Baeyens, Siegen Lektorat: René Majer, [email protected] Layout: Helmut Kraus, www.exclam.de Satz: Gerhard Alfes, mediaService, Siegen (www.mediaservice.tv) Umschlaggestaltung: Helmut Kraus, www.exclam.de Gesamtherstellung: Kösel, Krugzell (www.KoeselBuch.de)

Page 5: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

Inhaltsverzeichnis

Teil I: Erste Schritte

1 Einleitung 111.1 Die Themenschwerpunkte dieses Buchs 11

Visual Basic for Applications 11Die Beispieldatenbank 12

1.2 Wie Sie am besten mit diesem Buch arbeiten 15Aufbau des Buchs 15Die Icons 16Unterstützung für dieses Buch 16Genug der Vorrede und hinein ins Vergnügen 17

Teil II: Grundlagen von VBA

2 Die ersten VBA-Prozeduren erstellen 192.1 Die Programm-Oberfläche 19

Wichtige Komponenten des VBA-Editors 192.2 Das »klassische« erste Programm erstellen 21

»Hello world!« unter der Lupe 23Weitere Parameter nutzen 24Eigene Prozeduren aufrufen 26Funktion mit Parametern 32Funktionen auch außerhalb von VBA aufrufen 39Properties 40Prozeduren verlassen 44Kommentare 45

2.3 Übungen zu diesem Kapitel 45

3 Datentypen und Variablen 473.1 Datentypen im Überblick 47

Die Speicherung von Daten im Computer 47Sonstige Datentypen 52

3.2 Namen für Variablen 54Groß- und Kleinschreibung von Namen 54Ungarische Notation 55

Page 6: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

3.3 Deklaration von Variablen 563.4 Gültigkeitsbereiche 64

Lokale Gültigkeit 65Modul-öffentliche Gültigkeit 66Datei-öffentliche Gültigkeit 69Private Prozeduren und Module 75

3.5 Übungen zu diesem Kapitel 78

4 Datentyp-Sammlungen 794.1 Spezielle Variablen im Überblick 794.2 Eigene Datentypen 794.3 Typ-Definitionen für API-Aufrufe 83

Bessere Listenauswahl mit Enumerationen 854.4 Arrays 89

Mehrdimensionale Arrays 934.5 Variant als Pseudo-Array 934.6 Collection 954.7 Übungen zu diesem Kapitel 96

5 Operatoren, Entscheidungen und Schleifen 975.1 Vergleichsoperatoren 975.2 Logische Operatoren 98

Nutzung von VBA-Konstanten in SQL 1095.3 Verzweigungen 112

Bedingung überprüfen 112Die Select-Anweisung 119

5.4 Schleifen 123For/Next-Schleifen 124For Each/Next-Schleifen 129Do/Loop 134While/Wend-Schleife 142

5.5 Übungen zu diesem Kapitel 143

6 Fehler und Ausnahmen behandeln 1456.1 Fehlerfreie Programme 145

Fehler provozieren 146Fehlerbehandlung ankündigen 147Fehler beheben 150Fehler ignorieren 151Zentrale Fehlerbehandlung 153

6 Inhaltsverzeichnis

Page 7: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

6.2 Programmablauf verfolgen 156Code zeilenweise ausführen 156Code anhalten 156Überwachungen hinzufügen 157

6.3 Übungen zu diesem Kapitel 158

7 Klassen 1597.1 Einführung in Klassenkonzepte 1597.2 Grundgerüst einer Klasse 159

Eine erste Mini-Klasse 1607.3 Initialisieren und Terminieren 1617.4 Entwurf der Stoppuhr-Klasse 163

Funktionalität ergänzen 164Bessere Funktionalität 165

7.5 Aufgaben unterschiedlich lösen 1707.6 Gleiche Schale – anderer Kern 1737.7 Implements als »Klassen-Aufsicht« 1767.8 Klassen mit Unterobjekten 180

Objekte von Objektauflistungen 1817.9 Klassen mit Oberfläche 1857.10 Übungen zu diesem Kapitel 188

Teil III: Datenzugriff

8 Domänen-Funktionen 1898.1 Zugriff auf Daten per Methode 189

Einfacher Zugriff 191Langsamer Zugriff 192Weitere Einschränkungen 193

8.2 Übungen zu diesem Kapitel 194

9 Recordsets 1959.1 Zugriff auf Tabellen und Abfragen 1959.2 Datensatzwechsel 199

Prüfung auf vorhandene Datensätze 200Zugriff auf viele Datensätze 201Zugriff auf verschachtelte Datensätze 203

9.3 Datensatz-Typen 2069.4 Datenquelle filtern 2089.5 Daten zusammenfassen 2109.6 Suchen und Finden 217

Inhaltsverzeichnis 7

Page 8: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

9.7 Daten schreiben 224Datensätze anfügen 225Datensätze verändern 230

9.8 SQL und VBA gemeinsam 231SQL-Aktionen ohne Warnmeldung 231Gespeicherte Aktionsabfragen ohne Warnmeldung 232

9.9 Transaktionen 2339.10 Zugriff auf andere Programme 236

Excel schreibt in Access-Tabellen 236Access schreibt in Word-Dokumente 239

9.11 Übungen zu diesem Kapitel 241

10 Formulare 24310.1 Programmierte Formulare 243

Ereignisse 244Kontrollelemente per VBA ansprechen 247

10.2 Andere Formulare steuern 254Unterformulare 254Weitere Formular-Steuerungen 260Benutzeranmeldung 264

10.3 Haupt- und Unterformulare 27210.4 Dynamische Formulare 28710.5 Übungen zu diesem Kapitel 327

11 Berichte 32911.1 Programmierte Berichte 329

Berichte mit gemeinsamen Titeln 329Berichte mit dynamischen Inhalten 332Programmiertes Wasserzeichen 334

11.2 Übungen zu diesem Kapitel 338

Teil IV: Anwendungen erstellen

12 Start-Einstellungen 33912.1 AutoStart-Methoden 339

Das Makro AutoExec 339Start-Dialog 340

12.2 Start-Makros umgehen 341Notausstieg 342

12.3 Start-Logo 34312.4 Übungen zu diesem Kapitel 344

8 Inhaltsverzeichnis

Page 9: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

13 Menüband anpassen 34513.1 Eigene Register 345

Konzept eigener Register 346Access-Optionen 346Gruppen hinzufügen 351Callback-Prozeduren 356Kontrollelemente dynamisch aktivieren 361Besser als Menüs: Listen 366Menüband-Variable wiederherstellen 375

13.2 Übungen zu diesem Kapitel 378

14 Sonstige Optimierungen 37914.1 Weitere Verbesserungen 379

SQL-gerechtes Datum 37914.2 Listen programmieren 380

Listen mit Callback-Technik 380Callback-Funktion schreiben 383Fiktive Daten anzeigen 387Listen mit Mehrfachauswahl 389

14.3 Aktualisierungsmeldungen 390Textmeldung in der Statuszeile 390Fortschrittsbalken in der Statuszeile 391

14.4 Formular-Status ermitteln 393Parameterabfragen kapseln 394Abfragen mit Funktionen 397

14.5 Externe Berichte einbinden 40114.6 Übungen zu diesem Kapitel 407

15 Lösungen zu allen Übungen 409

16 Stichwortverzeichnis 433

Inhaltsverzeichnis 9

Page 10: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung
Page 11: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

I – E

rste

Sch

ritte

Einleitung

Die Themenschwerpunkte dieses BuchsHerzlich willkommen bei »Access 2013 VBA-Programmierung«. Dieses Buch erläutert den Einsatz von VBA in Access 2013 und zeigt, wie Sie damit professionelle Datenbank-Programme erstellen. Mit dieser Zielformulierung sind die drei Themenschwerpunkte beschrieben, die in diesem Buch besprochen und in den nächsten Abschnitten kurz vorge-stellt werden.

Visual Basic for ApplicationsAccess 2013 selbst ist ein relationales Datenbank-Management-System, mit dem Sie eine komplette Datenbank von der Speicherung der Daten in Tabellen bis zur Ausgabe in Berich-ten erstellen können. Zusätzlich enthält Access mit VBA (Visual Basic for Applications) noch eine sehr mächtige Programmiersprache, die allen Wünschen und Anforderungen an ein modernes Programm gewachsen ist. Damit können Sie Access 2013 um praktisch jede belie-bige Funktionalität erweitern. Ein paar der Highlights finden Sie in der folgenden Aufstellung:

zz Ausgefeilter Code-Editor mit Code-Farbgebung, der beispielsweise Schlüsselwörter farbig hervorhebt und Syntaxfehler markiert

zz IntelliSense-Auswahllisten, die sich öffnen, während Sie Code eintippen, und sinnvolle Vorschläge zur automatischen Vervollständigung des Programmcodes machen

zz Integrierter Debugger, der Sie beim Erkennen und Beheben von Fehlern in Ihren Pro-grammen unterstützt

zz Umfangreiche, kontextsensitive Hilfe, die gerade bei den ersten Schritten und den ersten Programmierprojekten sehr hilfreich ist

Alle diese Bestandteile von VBA in Access 2013 werden Sie im Laufe dieses Buchs kennenlernen.

Die Datenbank-Beispiele sind so gewählt, dass sie mit möglichst wenigen Dateien durch-geführt werden können. Das erspart Ihnen das Abtippen immer neuer Beispiele und zeigt sehr gut das sinnvolle Zusammenspiel verschiedener Prozeduren. Die Informationen sind dabei selbstverständlich immer so aufbereitet, dass sie in einem konkreten Bezug zu dem jeweiligen Projekt oder der aktuellen Aufgabe stehen, um die Praxisnähe der vermittelten Kenntnisse zu gewährleisten.

1.1

Page 12: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

12 Kapitel 1: Einleitung

Recht typisch ist es dabei für Access, dass zu einem Thema auch Techniken aus verschiede-nen Bereichen eingesetzt werden müssen. Ich werde also immer wieder auf bereits bespro-chene Themen zurückgreifen, diese für eine neue Aufgabe noch einmal vertiefen und dabei so abwandeln, dass Sie wieder einen neuen Aspekt oder eine Verbesserung darin entdecken. Gelegentlich wird es sich auch nicht vermeiden lassen, Themen anzureißen, deren detaillierte Erläuterung erst in einem späteren Kapitel folgt. Dafür sehen Sie in einem solchen Zusam-menhang dann schon vorausschauend viel besser, wofür die jeweilige Technik geeignet ist.

Auch und gerade bei der VBA-Programmierung zeichnet sich eine gute Lösung gelegentlich sogar dadurch aus, dass bewusst auf den Einsatz von VBA verzichtet und stattdessen auf bereits eingebaute Access-Fähigkeiten zurückgegriffen wird. Schließlich möchte ich Ihnen nicht Programmierung um ihrer selbst willen zeigen, sondern als Werkzeug für effektive Lösungen. Gerade das zeigt aber die Leistungsfähigkeit von Access, indem es für alle Aufga-benstellungen immer auch eine Lösung gibt, meistens sogar eine leichtere als Sie denken. Dieses Buch wird Ihnen helfen, solche Lösungen zu finden.

Dieses Buch geht davon aus, dass Sie sich mit der Datenmodellierung und der grundsätz-lichen Bedienung von Access 2013 auskennen.

Ausführliche Informationen zu diesen Themen finden Sie im Buch »Desktop- und Web-Datenbanken entwickeln mit Access 2013«, das ebenfalls bei Microsoft Press erschienen ist. Als kleine Leseprobe steht Ihnen das Kapitel »Grundlagen des Datenbankdesigns« kostenlos als Download zur Verfügung.

Die Datei finden Sie unter

www.microsoft-press.de/support/9783866452251

oder

msp.oreilly.de/support/2359/787

Die BeispieldatenbankFür fast alle Beispiele in diesem Buch werde ich auf zwei Datenbanken (Grundlagen.accdb und Umbuchung.accdb) zurückgreifen, die Sie selbstverständlich auch downloaden können. Sie sind so angelegt, dass möglichst wenig Schreibarbeit notwendig ist, auch wenn sich eine gewisse Komplexität natürlich nicht vermeiden lässt. Schließlich ist die VBA-Program-mierung ja gerade dann nötig, wenn Sie über die normalen Möglichkeiten einer Access 2013-Datenbank hinausgehen wollen.

Die Beispieldatenbank – und alle anderen Beispielprojekte – finden Sie unter

www.microsoft-press.de/support/9783866452251

und

msp.oreilly.de/support/2359/787

Page 13: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

1.1 Die Themenschwerpunkte dieses Buchs 13

I – E

rste

Sch

ritte

Die hier eingesetzte Datenbank Umbuchung.accdb steht für einen fiktiven Online-Shop namens »Umbuchung«, in dem gebrauchte und insbesondere antiquarische Bücher gehan-delt werden können. Dabei tritt nicht nur der Shop-Betreiber als Verkäufer auf, sondern die Käufer können sich ebenso selbst als Verkäufer eintragen und eigene Bücher anbieten.

Das Konzept hat durchaus Ähnlichkeiten mit Teilen von Amazon.de oder eBay, allerdings geht es hier gerade nicht um die Internet-Anbindung des Beispiels. Natürlich wäre das technisch möglich, aber ich möchte Ihnen ja die Access-Möglichkeiten zeigen. Nehmen wir also an, dass ein Verbund aus Buchhändlern und interessierten Fachleuten etwa aus dem Universitätsbereich direkten Zugriff auf diese Datenbank hat.

Beschreibung der Datenbank

Die Aufgaben des Systems lassen sich recht einfach beschreiben:

zz Einzelne Benutzer müssen sich eintragen können und ihre Stammdaten als Käufer und/oder Verkäufer hinterlegen können

zz Zu jedem Benutzer müssen mehrere Adressen gespeichert werden, weil sich Rech-nungs- und Lieferadresse unterscheiden können. Auch die Angabe weiterer Adressen für Geschenklieferungen ist damit möglich.

zz Auf einer Bestellung (im Internet meistens als Warenkorb bezeichnet) werden beliebig viele Artikel gesammelt, bestätigt und deren Lieferstatus verfolgt

zz Benutzer ohne vollständige Verkäufer-Daten dürfen keine Artikel zum Verkauf anbieten. Benutzer ohne Käufer-Daten dürfen zwar Artikel auf einer Bestellung sammeln, aber noch nicht bestätigen. Daher ist es wichtig, den Status zu unterscheiden.

zz Da bei Remittenden (an den Verlag zurückgelieferte Bücher) für den Verkäufer die Möglichkeit besteht, weitere Exemplare nachzuordern, kann hier ein Mindestbestand angegeben werden, ab dem nachbestellt wird

zz Für jede Bestellung muss die Datenbank prüfen, ob die vorhandene Lagermenge aus-reicht oder nötigenfalls weniger Exemplare geliefert werden

zz Auch Bücher verkaufen sich besser mit Fotos. Damit diese die Datenbank nicht unnötig aufblähen, sollen sie in einem Verzeichnis abgelegt und bei Bedarf nachgeladen werden, sodass auch mehrere Angebote das gleiche Foto benutzen können. Falls kein Foto vorhanden ist, soll wenigstens ein Standardbild erscheinen.

zz Alle Formulare sollen sinnvoll untereinander verknüpft sein, damit ein Benutzer beispiels-weise vom Artikelformular direkt zu den Stammdaten genau dieses Verkäufers gelangt

Natürlich ist manches davon mit den umfangreichen Fähigkeiten von Access 2013 bereits ohne Programmierung lösbar. Aber VBA wird die Leistungsfähigkeit und Bedienungsfreund-lichkeit einer solchen Datenbank erheblich verbessern und an manchen Stellen überhaupt erst sicherstellen.

Page 14: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

14 Kapitel 1: Einleitung

Datenbank-Modell

Das Datenbank-Modell des Beispiels sieht aus wie in Abbildung 1.1. Dabei enthalten alle Feldnamen in leichter Abwandlung der Ungarischen Notation (siehe Kapitel 3) ein drei-buchstabiges Präfi x für ihren jeweiligen Tabellennamen. Dadurch sind sie datenbankweit eindeutig und unproblematisch zu benutzen.

Wenn Sie wie hier die Master-Tabellen (die 1er-Seiten der 1:n-Beziehungen) höher als die Detail-Tabellen (die n-Seiten) anordnen, werden die problematischen Tabellen schnell deut-lich. Je tiefer eine Tabelle in diesem Modell ist, desto mehr Daten enthält sie. Daher müssen Sie sich dort viel intensiver mit Zugriff sgeschwindigkeiten und Platzverbrauch beschäftigen.

Das Modell ist sicherlich einfacher zu verstehen, wenn wir es einmal gemeinsam betrachten:

zz Die Tabelle tblKunden enthält die Liste aller Käufer und Verkäufer, allerdings nur mit minimalem Dateninhalt. Zu der eindeutigen ID gibt es ein paar Angaben über Konto und E-Mail, die im wirk lichen Leben sicherlich ausführlicher gestaltet wären. Außerdem kann jeder Kunde verschiedene Funktionen annehmen: als (nicht komplett angemeldeter) Interessent, nur Käufer, nur Verkäufer oder beides.

zz Die Adresse ist ausdrücklich nicht Bestandteil eines Kunden-Datensatzes, weil dieser ja mehrere Adressen nennen darf. In tblTypen stehen verschiedene Arten von Adressen wie Lieferadresse oder Rechnungsadresse.

zz Die Tabelle tblAdressen enthält alle Adressen mit jeweils dem Verweis auf die eindeutige Kennung kndID des Kunden und typID des Adressen-Typs

zz Nicht vom Kunden, sondern erst von einer (Liefer-)Adresse ausgehend kann eine Bestel-lung in tblBestellungen angelegt werden. Damit ist wegen der Beziehungen sowohl deren Zieladresse als eben auch deren Empfänger klar. Ebenfalls zur Bestellung gehört die Rechnungsadresse, die identisch sein kann, aber nicht muss.

zz Um den Fortschritt der Bestellung und der späteren Lieferung verfolgen zu können, enthält die Tabelle tblBestellungen mehrere Datumsfelder für die verschiedenen Stadien,

Abbildung 1.1: Das Tabellen-Modell der

Beispieldatenbank Umbuchung.accdb

Page 15: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

1.2 Wie Sie am besten mit diesem Buch arbeiten 15

I – E

rste

Sch

ritte

die eine Bestellung durchlaufen kann. Um das Datenmodell einfach zu halten, wird die Bestellung grundsätzlich nur als Ganzes abgewickelt, Teillieferungen oder die Rückgabe einzelner Artikel sollen hier nicht abgebildet werden.

zz Jede Bestellung enthält in tblBestellungenDetails eine beliebige Anzahl zu liefernder Artikel mit einer Bestellmenge und (wenn nicht ausreichend Exemplare lieferbar waren) einer davon eventuell abweichenden Liefermenge

zz Die Auswahl für diese Bestell-Details basiert auf tblArtikel mit den Angaben zu den Büchern. Dort stehen sowohl konkrete Informationen zu den angebotenen Exemplaren als auch der Verweis auf den Verkäufer. Dieser wiederum kommt aus der Tabelle tblKunden.

Diese Hinweise sollten für ein erstes Verständnis der Beispieldatenbank ausreichen. Konkre-tere Angaben werde ich nachreichen, wenn es für den jeweiligen Programmcode notwendig ist.

Sollte Ihnen jetzt der Kopf rauchen, dann machen Sie sich keine Sorgen. Access 2013 bleibt trotz aller Komplexität auch für schwierigste Aufgaben ein einfach und übersichtlich zu bedienendes Programm.

Wie Sie am besten mit diesem Buch arbeitenDieses Buch macht Sie mit der Entwicklung von VBA in einer Access 2013-Datenbank vertraut – Das geht leichter, als Sie denken. In kurzer Zeit werden Sie über das nötige Know-how verfügen, um ansprechende Ergebnisse zu erzielen. Zugleich erwerben Sie das entspre-chende Know-why, das heißt, Sie erfahren immer auch, warum etwas in einer bestimmten Weise funktioniert.

Aufbau des BuchsEin VBA-Programm versucht, genau wie eine Datenbank, einen Ausschnitt der Wirklichkeit abzubilden. Dabei muss es natürlich vereinfachen und abstrahieren, aber genau das hilft oftmals, ein Problem klarer zu formulieren. Sobald Sie die Frage richtig stellen, liegt die Antwort meistens schon bereit, denn der schwierigste Teil besteht darin, die Frage, also das Problem, zu präzisieren.

Im Laufe des Buchs zeige ich Ihnen Methoden und Techniken, mit denen Sie die richtigen Fra-gen zu stellen lernen und damit die meisten Klippen einer Code-Entwicklung schon umschifft haben. Das ist schließlich keine Geheimwissenschaft, sondern ein ganz solides Handwerk, welches sich mit ein wenig Unterstützung lernen lässt.

Diesem Ansatz folgend ist das Buch in vier Teile untergliedert, die Sie am besten von vorne nach hinten lesen und durcharbeiten, da die Informationen der einzelnen Kapitel aufeinander aufbauen.

1.2

Page 16: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

16 Kapitel 1: Einleitung

Teil I »Erste Schritte« enthält diese Einleitung mit der Erläuterung der Beispieldatenbank und zeigt Ihnen vor allem, welche Möglichkeiten Access-VBA bietet.

Teil II »Grundlagen der VBA-Programmierung« stellt Ihnen an vielen praktischen Beispielen die grundlegenden Sprachelemente und Konzepte von VBA vor. Sie werden hier bestimmt auch dann Neues entdecken, wenn Sie schon in einer anderen Sprache programmiert haben.

Teil III »Datenzugriff« beschäftigt sich mit dem Lesen und Schreiben von Daten in Datenban-ken. Hier werde ich Ihnen verschiedene Alternativen des Datenzugriffs vorstellen, damit Sie sehen, wie Sie zu Ihrer Aufgabe die passende Prozedur erstellen. Dabei geht es nicht nur um den Zugriff auf die Tabellen und Abfragen einer Datenbank, sondern auch auf die Daten in Formularen oder Berichten.

Teil IV »Anwendungen erstellen« nennt schließlich Optimierungen für Ihre Datenbank, die bei den vorherigen Themen noch nicht zur Sprache kamen. Das umfasst sowohl Anpassun-gen des Menübands und eigene Tastenkürzel als auch die Nutzung externer Funktionen, um die Leistungsfähigkeit Ihrer Datenbank zu verbessern.

Alle Adressen oder Namen von Personen, Buchtiteln und Firmen sind selbstverständlich völlig frei erfunden.

Die IconsHin und wieder empfiehlt es sich, bestimmte Informationen in eigenen Absätzen auszuzeichnen.

Wichtig Der Textmarker weist Sie auf etwas hin, worauf Sie unbedingt achten sollten.

Tipp Hier erfahren Sie, wie Sie etwas besonders einfach und elegant erledigen können.

Hintergrund Absätze mit diesem Icon geben Ihnen wichtige Hintergrundin-formationen und erklären, warum etwas in einer bestimmten Weise funktioniert.

Unterstützung für dieses BuchDer Verlag hat auch von seiner Seite alles unternommen, um die Richtigkeit des Buchinhalts und des Bonusmaterials sicherzustellen. Etwaige Korrekturen und Änderungen finden Sie unter folgender Adresse:

http://www.microsoft-press.de/support.asp

Tragen Sie dazu in das untere der beiden Eingabefelder für die ISBN-Nummer die Ziffern 225 ein und klicken Sie dann auf Suchen.

Page 17: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

1.2 Wie Sie am besten mit diesem Buch arbeiten 17

I – E

rste

Sch

ritte

Wenn Sie Kommentare, Fragen oder Anregungen zum Inhalt dieses Buchs oder des Begleit-materials haben, senden Sie eine E-Mail an folgende Adresse bei Microsoft Press:

[email protected]

oder per Post an

Microsoft Press Konrad-Zuse-Str. 1 85716 Unterschleißheim

Beachten Sie, dass Microsoft Press unter diesen Adressen keinen Support für Software-produkte leistet.

Genug der Vorrede und hinein ins VergnügenViel Spaß beim Entwickeln Ihrer Datenbanken wünscht Ihnen

Lorenz Hölscher

Page 18: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung
Page 19: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

�I – G

��n�l

a���

v��

��A

Die Programm-Oberfl ächeAccess 2013 ist ein Datenbank-Management-System , also ein Programm, das es Ihnen erlaubt, eff ektiv mit Datenbanken zu arbeiten. Zusätzlich enthält es eine integrierte Programmier-Umgebung für VBA (Visual Basic for Applications), mit der die Datenbank gesteuert werden kann. Um diesen VBA-Editor und seine Inhalte geht es bei der Program-mierung mit VBA.

Wichti ge Komponenten des VBA-EditorsWährend die Programm-Oberfl äche von Access 2013 gegenüber früheren Versionen u. a. durch die Menübänder erheblich verändert wurde, wird der VBA-Editor zur Eingabe der Prozeduren weiterhin mit herkömmlichen Menüs bedient.

Wenn Sie mit dem VBA-Editor noch nicht vertraut sind, schauen Sie sich ihn am besten zuerst einmal gründlich an:

a Starten Sie Access 2013 und erstellen Sie eine neue, leere Datenbank namens Grund-lagen.accdb. Die darin automatisch angelegte leere Tabelle Tabelle1 können Sie löschen, denn Sie beginnen zunächst einmal ohne Daten.denn Sie beginnen zunächst einmal ohne Daten.

2.1

Abbildung 2.1: Eine neue, leere Datenbank anlegen

Die ersten VBA-Prozeduren erstellen

Page 20: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

20 Kapitel 2: Die ersten VBA-Prozeduren erstellen

b Gehen Sie in der Registerkarte ERSTELLEN in die Gruppe Makros und Code und klicken darin auf Modul.

c Sie befi nden sich nun im VBA-Editor und sehen links den Projekt-Explorer mit dem Überblick über alle in der Datenbank enthaltenen Module und rechts im großen Fenster die Code-Ansicht . Unten links ist das Eigenschaftenfenster zu sehen.. Unten links ist das Eigenschaftenfenster

Dieser VBA-Editor besteht aus vielen Komponenten, die Sie möglicherweise von anderen Windows-Anwendungen her schon kennen:

zz Menüleiste: In der Menüleiste fi nden Sie alle Befehle, die Sie für das Erstellen, das Ausführen und die Fehlersuche in Ihren Prozeduren benötigen.

zz Symbolleiste: Unterhalb der Menüleiste sehen Sie links die Standardsymbolleiste mit zahlreichen Schaltfl ächen (wie Speichern, Rückgängig, Wiederholen, usw.), die Ihnen sicherlich von anderen Anwendungen her bekannt sind. Wie gewohnt können Sie andere Symbolleisten manuell sichtbar machen: Klicken Sie dazu eine sichtbare Symbolleiste mit der rechten Maustaste an und wählen Sie den Namen der Symbolleiste aus, welche Sie ein- oder ausblenden wollen. Für die bequeme Arbeit kann ich Ihnen hier vor allem die (im Bild rechts schon sichtbare) Symbolleiste Bearbeiten empfehlen, da diese die Symbole zum Kommentieren von Code enthält (rechts neben der Hand).

zz Projekt-Explorer: Links im Fenster zeigt der Projekt-Explorer auf der obersten Ebene alle geöff neten Datenbanken an. Hier sehen Sie natürlich die von Ihnen geöff nete Daten-bank Grundlagen.accdb. Dort können aber auch noch weitere Dateien erscheinen, näm-lich die (Abfrage-, Formular- oder Berichts-)Assistenten , die in Wirklichkeit versteckte Datenbanken sind. Dann fi nden Sie im Projekt-Explorer beispielsweise zusätzlich eine Datei acwzmain.accde , welche die wesentlichen Assistenten (acwzmain = Access Wizard Main) enthält.

Abbildung 2.2: Fügen Sie ein neues Modul

hinzu

Abbildung 2.3: Der VBA-Editor mit einem leeren

Modul

Page 21: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

2.2 Das »klassische« erste Programm erstellen 21

�I – G

��n�l

a���

v��

��A

Unterhalb der Dateiebene listet Access im Projekt-Explorer Kategorien wie Module sowie zukünftig noch Klassenmodule und Microsoft Offi ce Access Klassenobjekte auf, sobald sie in der Datenbank enthalten sind. Bei Letzteren handelt es sich übrigens um den VBA-Code ganz normaler Access-Formulare und -Berichte.Code ganz normaler Access-Formulare und -Berichte.

Sie können diese gruppierte Darstellung durch Klick auf das Ordnersymbol im Projekt-Explorer umschalten, ich werde hier allerdings aus Gründen der besseren Übersichtlich-keit die gruppierte Darstellung beibehalten.

zz Codefenster: Den größten Teil der Ansicht nimmt rechts das Codefenster in Anspruch. In ihm fi ndet die eigentliche Programmierung statt, daher verhält es sich weitgehend wie ein spezieller Text-Editor. Sie fi nden dort schon die Codezeile Option Compare Database eingetragen. Auch wenn im Folgenden der Code ganzer Module abgedruckt wird, werde ich diese Zeile nicht jedes Mal wiederholen.

Das »klassische« erste Programm erstellenEs ist gute Tradition, dass das erste Programm, das man in einer neuen Programmiersprache erstellt, einfach nur den Text »Hello World« auf dem Bildschirm ausgibt. Wenn das klappt, haben Sie alle notwendigen Handgriff e für ein komplettes Programm korrekt durchgeführt. Ich möchte mich dieser Tradi tion anschließen, da der Quellcode extrem kurz ist und trotzdem alle wichtigen Elemente enthält. Sein Verständnis ist ein gutes Fundament für das Erstellen weiterer Programme.

a Klicken Sie unterhalb von Option Compare Database in das Codefenster und fügen nach Wunsch mit der Eingabetaste noch ein paar Leerzeilen hinzu.

b Schreiben Sie dort Sub Hallo an den Anfang einer Zeile.

c Beenden Sie diese Zeile mit der Eingabetaste, sodass der VBA-Editor automatisch ein Paar runde Klammern und zwei Zeilen tiefer ein End Sub ergänzt. Damit ist der sogenannte Prozedurrumpf fertig, es fehlt nur noch eine auszuführende Anweisung darin.Prozedurrumpf fertig, es fehlt nur noch eine auszuführende Anweisung darin.Prozedurrumpf fertig, es fehlt nur noch eine auszuführende Anweisung darin.Prozedurrumpf

Abbildung 2.4: Der Projekt-Explorer mit Beispielen aller Kategorien

2.2

Abbildung 2.5: Eine erste, noch leere Prozedur

Page 22: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

22 Kapitel 2: Die ersten VBA-Prozeduren erstellen

d Die Einfügemarke blinkt nun in der mittleren leeren Zeile. Wegen der besseren Übersicht-lichkeit rücken Sie dort bitte mit der Tabulatortaste ein und schreiben msgbox dahinter.

e Sobald Sie danach ein Leerzeichen eingeben, erscheint automatisch ein sogenanntes Quick-Info. Dabei handelt es sich um ein kleines gelbes Fenster mit Informationen zur Benutzung dieses Befehls. Das bedeutet vor allem, dass es den Befehl msgbox tatsächlich gibt.dieses Befehls. Das bedeutet vor allem, dass es den Befehl msgbox tatsächlich gibt.

f Das QuickInfo zeigt fett markiert dasjenige Argument an, dessen Eingabe jetzt erfor-derlich ist. Die weiteren Argumente wären durch Komma getrennt und würden dann entsprechend im QuickInfo fett erscheinen. Das Argument Prompt ist ein Text- oder Zeichenketten-Datentyp (was hier aber nirgends ersichtlich ist) und muss angegeben werden. Alle übrigen Argumente dieser Prozedur sind optional und stehen deswegen in eckigen Klammern.

g Geben Sie nun bitte ”Hello world!” mit den Anführungszeichen ein und verlassen Sie die Zeile mit der PfeilUnten-Taste . Benutzen Sie dazu nicht die Eingabetaste, denn dann erzeugen Sie nur unnötige Leerzeilen.erzeugen Sie nur unnötige Leerzeilen.

h Der VBA-Editor nimmt nun automatisch eine Prüfung auf korrekte Benutzung aller Befehle (die sogenannte Syntaxprüfung) vor und ändert die Kleinschreibung von msgbox in die vorgegebene MsgBox -Schreibweise.

i Sollte Ihnen hier ein Fehler unterlaufen, meldet sich der Editor sofort beim Verlassen der Zeile, färbt diese rot und markiert den vermutlich fehlerhaften Teil. Außerdem erscheint eine Meldung mit einer Erläuterung zum Fehler.eine Meldung mit einer Erläuterung zum Fehler.

Abbildung 2.6: Das QuickInfo zum Befehl

MsgBox

Abbildung 2.7: Die fertige Prozedur

Abbildung 2.8: Ein provozierter Fehler,

denn der Punkt gehört nicht in die Zeile

Page 23: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

2.2 Das »klassische« erste Programm erstellen 23

�I – G

��n�l

a���

v��

��A

jWenn alles in Ordnung ist, können Sie dieses Programm oder besser diese Prozedur starten. Dazu klicken Sie irgendwo zwischen Sub und End Sub in den Code und drücken die Taste F5 . Die so markierte Prozedur Hallo wird gestartet und Sie sehen das Ergebnis des MsgBox-Befehls.MsgBox

k Das Meldungsfenster bleibt so lange stehen, bis Sie es durch einen Klick auf OK schlie-ßen. Erst dann läuft auch der Code weiter, selbst wenn – wie in diesem Beispiel – keine Anweisungen mehr folgen.

»Hello world!« unter der LupeAuch wenn dieses kleine Programm nicht viel macht, so sind darin doch viele wesentliche Konzepte der VBA-Programmierung enthalten:

zz Damit eine Prozedur überhaupt erstellt werden kann, braucht sie einen Namen. Dieser muss (innerhalb eines Moduls) eindeutig sein und darf nicht mit einem reservierten Schlüsselwort oder einem schon vorhandenen VBA-Befehl identisch sein.

zz Die Prozedur hat einen sogenannten Rumpf, also die Konstruktion aus Sub ... End Sub, welche die Grenzen der von diesem Namen bezeichneten Prozedur angibt

zz Innerhalb des Prozedurrumpfs dürfen beliebig viele Zeilen mit je einem Befehl stehen, auch wenn das eben noch nicht zu sehen war

zz Eine Prozedur kann durch Markieren des Codes und Drücken der F5-Taste gestartet werden

zz Alternativ können Sie eine Prozedur auch mit dem Menübefehl Ausführen Sub/Userform ausführen starten. Wenn keine ausführbare Prozedur markiert war, erscheint sowieso der Dialog aus Abbildung 2.10 mit all diesen Prozeduren zur Auswahl.Dialog aus Abbildung 2.10 mit all diesen Prozeduren zur Auswahl.

Abbildung 2.9: Das vom MsgBox-Befehl erzeugte Meldungsfenster

Abbildung 2.10: Der Dialog zur Auswahl einer Prozedur

Page 24: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

24 Kapitel 2: Die ersten VBA-Prozeduren erstellen

Damit haben Sie eine eigene Prozedur erstellt und auch erfolgreich aufgerufen. Grundsätz-lich wird dieser Ablauf so bleiben, auch wenn es natürlich noch eine Vielzahl an Veränderun-gen in Details geben wird.

Denken Sie jetzt bitte noch daran, das Modul mit dem Befehl Datei/Grundlagen speichern zu sichern. Der wenig sprechende Name Modul1 ist hier im Moment ausreichend. Das Modul ist Teil der Grund lagen.accdb-Datenbank und daher auch in der Access 2013-Oberfl äche im Navigationsbereich zu sehen.Navigationsbereich zu sehen.

Weitere Parameter nutzenWie Sie vielleicht anhand des QuickInfos schon bemerkt hatten, kennt der MsgBox-Befehl noch weitere Parameter. Manchmal werden diese übrigens auch als Argumente bezeichnet, was dasselbe bedeutet. Die folgenden Parameter des MsgBox-Befehls sind jedoch optional, können also bei Bedarf weggelassen werden.

a Erstellen Sie bitte im gleichen Modul eine neue Prozedur HalloMitIcon, indem Sie in einer neuen Zeile Sub HalloMitIcon schreiben und mit der Eingabetaste bestätigen.

b In der Prozedur rücken Sie ebenfalls mit der Tabulatortaste ein und schreiben MsgBox ”Hello world!”. Bis dahin ist außer dem Namen alles genauso wie im ersten Beispiel.

c Nun folgt dem ersten Argument aber ein Komma, woraufh in sofort eine Liste der soge-nannten IntelliSense -Technik ausklappt. Diese Technik sorgt dafür, dass in der bereit-gestellten Liste nur die Parameter (oder bei Bedarf auch Prozeduren, Methoden oder Eigenschaften ) angezeigt werden, die an dieser Stelle überhaupt sinnvoll nutzbar sind.

d Beginnen Sie, die Buchstaben vbi zu tippen. Die Auswahl springt in der Liste an die nächste Posi tion, die zu diesem Wortanfang passt.nächste Posi tion, die zu diesem Wortanfang passt.

Abbildung 2.11: Der Navigationsbereich der

Datenbank zeigt das Modul an

Abbildung 2.12: Die IntelliSense-Liste für

das zweite Argument

Page 25: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

2.2 Das »klassische« erste Programm erstellen 25

�I – G

��n�l

a���

v��

��A

e Das so bereits markierte Wort vbInformation wählen Sie nun mit der Tabulatortaste (nicht mit der Eingabetaste, sonst fügen Sie wieder eine ungewollte Leerzeile ein!) aus. Alterna-tiv hätten Sie auch mit der Maus auf den Eintrag doppelklicken können, aber die Tastatur ist in diesem Zusammenhang sicherlich eff ektiver.

Jetzt ist der Code komplett und Sie können ihn mit der F5-Taste starten. Diesmal enthält das Meldungsfenster ein weißes »i« im blauen Kreis als Symbol. Solche kleinen Symbole werden auch als Icons bezeichnet.

Vordefi nierte Konstanten

Hinter dem Wort vbInformation steckt in Wahrheit eine Zahl, nämlich 64. Diese ist in VBA vordefi niert, aber eigentlich müssen Sie deren Wert gar nicht kennen. Denn eine solche Kon-stante , wie dies technisch heißt und später noch ausführlich besprochen werden wird, dient gerade der besseren Lesbarkeit des Codes.

Auch wenn niemand wüsste, welchen Wert die Konstante vbInformation tatsächlich hat, kann doch jeder sehen, dass in dieser Zeile das Info-Symbol aufgerufen wird. Sie sollten solche vorhandenen Konstanten benutzen, wann immer es möglich ist. Praktischerweise bietet die IntelliSense-Technik diese auch ganz selbstverständlich an, und zwar sogar für selbst defi nierte Konstanten, wie Sie später noch sehen werden.

Es gibt übrigens verschiedene Arten vordefi nierter Konstanten:

zz Konstanten, die allgemein gelten und auch in anderen VBA-Versionen (etwa in Word oder Excel) benutzt werden können, beginnen mit vb als Abkürzung für Visual Basic

zz Andere Konstanten sind nur in Access defi niert und am Präfi x ac zu erkennen

Schaltf lächen angeben

Sie haben sich möglicherweise gewundert, dass das QuickInfo für den hier benutzten zwei-ten Parameter die Bezeichnung Buttons, also Schaltfl ächen, angibt, obwohl damit doch ein Symbol erzeugt wurde. Tatsächlich ist das zwar nur ein einziges Argument, welches jedoch trotzdem mehrere Informationen enthalten kann.

a Erweitern Sie bitte die Prozedur HalloMitIcon so, dass Sie nach der Konstanten vbInfor-mation ein Plus-Zeichen (+) eingeben. Jetzt klappt erneut die IntelliSense-Liste aus und bietet die gleichen Konstanten wie eben an.

Abbildung 2.13: Das Meldungsfenster hat diesmal ein Symbol

Page 26: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

26 Kapitel 2: Die ersten VBA-Prozeduren erstellen

b Geben Sie nach dem +-Zeichen nun als zweite Konstante vbYesNo an.

c Führen Sie die Prozedur nun mit F5 aus. Sie sehen, dass tatsächlich Schaltfl ächen ver-ändert wurden. Während bisher nur die OK-Schaltfl äche zu sehen war, erscheinen jetzt stattdessen die beiden Schaltfl ächen Ja und Nein.

Es ist übrigens egal, welche der beiden Schaltfl ächen Sie anklicken, um den Meldungs-dialog zu schließen. Da die Prozedur noch keine Auswertung vornimmt, passiert ohnehin nichts.

d Sie können das Argument sogar mit einem weiteren +-Zeichen und beispielsweise der Konstanten vbDefaultButton2 ergänzen, sodass der Code nunmehr wie folgt aussieht:

Sub HalloMitIcon()

MsgBox “Hello world!”, vbInformation + vbYesNo + vbDefaultButton2

End Sub

Durch diese Änderung wird im angezeigten Meldungsfenster der Fokus der Standard-Schaltfl äche von bisher Ja auf Nein verschoben. Sie sehen das an der punktierten Linie am Rande der Schalt fl äche. Das hat zur Folge, dass ein Bestätigen mit der Eingabetaste nicht mehr die Ja-, sondern nun die Nein-Schaltfl äche auslöst.-, sondern nun die

Wie Sie sehen, hat dieses Argument doch mit Schaltfl ächen zu tun. Der mathematische Trick, mit dem hier off ensichtlich drei Werte in einer einzigen Zahl übergeben werden können, heißt übrigens »Binärcodierung« und ist wesentlicher Bestandteil dessen, wie ein Computer arbeitet. Wir werden uns daher bei Gelegenheit (nämlich in Kapitel 3) noch damit beschäftigen.

Auch die Auswertung der Schaltfl ächen muss noch ein wenig warten. Bis dahin sollen Sie erst einmal weitere eigene Prozeduren erstellen und vor allem auch nutzen.

Eigene Prozeduren aufrufenInnerhalb Ihrer eigenen Prozedur namens Hallo haben Sie einen vorhandenen VBA-Befehl MsgBox aufgerufen. Sie können selbstverständlich auch selbst erstellte Prozeduren statt der

Abbildung 2.14: Das Meldungsfenster zeigt

jetzt zwei Schaltfl ächen an

Abbildung 2.15: Der Fokus für die Standard-

Schaltfl äche liegt nun auf Nein

Page 27: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

2.2 Das »klassische« erste Programm erstellen 27

�I – G

��n�l

a���

v��

��A

VBA-Befehle nutzen. Wenn Sie beispielsweise an vielen Stellen in Ihrer Datenbank immer wieder eine Meldung zur Version machen wollen, wäre es wenig sinnvoll, dies jedes Mal erneut in aller Ausführlichkeit zu schreiben.

a Stattdessen erstellen Sie zunächst eine Prozedur MeldeVersion nach dem bisherigen Muster mit folgendem Code:

Sub MeldeVersion()

MsgBox “Version 1.0 von Lorenz Hölscher”, vbInformation

End Sub

b Sie können diese Prozedur gerne direkt (nach dem Speichern!) mit der F5-Taste testen und erhalten dann den folgenden Meldungsdialog.und erhalten dann den folgenden Meldungsdialog.

Soweit war es gegenüber den vorherigen Prozeduren nichts Neues. Jetzt soll diese selbst-geschriebene Prozedur aber in anderen Prozeduren aufgerufen werden. Das kann sogar in einem anderen Modul sein, damit es nicht gar zu einfach wird.

a Schließen Sie das aktuelle Modul Modul1. Wenn sich dessen Codefenster im Vollbild befi ndet, liegt das X-Symbol zum Schließen unterhalb des roten Schließsymbols oben rechts vom VBA-Editor selbst.

bWählen Sie den Befehl Einfügen/Modul, damit Sie ein neues Modul erhalten. Dort steht nun schon Option Compare Database als erste Zeile drin.

c Geben Sie dort mit Sub TesteMeldungen eine neue Prozedur ein und bestätigen Sie die Zeile mit der Eingabetaste, damit der Prozedurrumpf vervollständigt wird.

d Innerhalb der Prozedur rücken Sie wie immer mit der Tabulatortaste ein.

e Beginnen Sie nun den Namen Ihrer eigenen Prozedur zu schreiben, also mel, und drücken Strg+Leertaste . Wenn es mehrere ähnlich beginnende Prozedurnamen gäbe, erschiene nun die IntelliSense-Liste zur Auswahl. Da jedoch bereits der Wortanfang eindeutig war, vervollständigt der VBA-Editor sofort zu MeldeVersion.eindeutig war, vervollständigt der VBA-Editor sofort zu

Abbildung 2.16: Der Meldungsdialog von MeldeVersion

Abbildung 2.17: Der Code der Prozedur TesteMeldungen

Page 28: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

28 Kapitel 2: Die ersten VBA-Prozeduren erstellen

Das war eigentlich schon alles. Sie rufen eigene Prozeduren genauso auf wie vorhandene VBA-Prozeduren, indem Sie nämlich deren Namen nennen. Wenn diese noch Parameter hätten, würden diese folgen.

f Jetzt können Sie mit der Eingabetaste noch weitere Zeilen anfügen und dort jeweils in einer eigenen Zeile einmal den Befehl Beep und dann wieder MeldeVersion einfügen.einer eigenen Zeile einmal den Befehl Beep einfügen.

gWenn Sie nun TesteMeldungen mit der F5-Taste starten, sehen Sie zuerst Ihre Versionsmel-dung, hören Ihren Computer piepsen und sehen dann ein zweites Mal die Versionsmel-dung. Möglicherweise ist das Piepsen nur sehr leise oder ganz abgeschaltet, denn das ist von der verwendeten Hardware abhängig und inzwischen oftmals deaktiviert.

Sie haben Recht, dass dieser Code noch keinen wirklichen Nutzen hat, denn er soll ja erst einmal nur die grundsätzlichen Prinzipien zeigen. Aber damit haben Sie auch den zweiten Schritt gemacht: Sie haben nicht nur eine eigene Prozedur geschrieben, sondern auch an beliebiger Stelle aufgerufen.

Abbildung 2.18: Der erweiterte Code

der Prozedur TesteMeldungen

Ich empfehle Ihnen dringend, den VBA-Code immer sauber einzurücken, wie das hier bereits geschehen ist. Dadurch lassen sich Fehlerquellen wie vergessene End-Anweisungen oder falsch geschachtelte If-Blöcke sofort erkennen.

Dabei wird in jedem Block eingerückt, also in allen Strukturen, die typischerweise mit einem End-Befehl schließen: Sub/End Sub, Function/End Function, If/End If, Select/End Select oder With/End With. Es gibt noch weitere Blöcke, die das Schlüsselwort End zwar nicht benutzen, aber ebenso eingerückt werden sollten: For/Next und Do/Loop.

Einrückung

Prozedurnamen fi nden

Eben war es ja noch ganz einfach, den Namen der selbst geschriebenen Prozedur zu fi nden, denn Sie hatten diese kaum zehn Minuten früher erfunden. Bei größeren Projekten wird aber ganz schnell der Fall auftreten, dass Sie Hunderte von Prozeduren in vielen Modulen haben. Dann reicht es zu wissen, in welchem Modul sich eine gesuchte Prozedur befi ndet.

a Daher sollten Sie die Prozeduren nicht wie hier wahllos hintereinander in ein Modul schreiben, sondern besser thematisch sortieren. Dann wird es Module für den Daten-zugriff , solche für die Dateibearbeitung oder welche für Berechnungen oder Menüband-Befehle geben.

Page 29: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

2.2 Das »klassische« erste Programm erstellen 29

�I – G

��n�l

a���

v��

��A

b Dann schreiben Sie wie in der obigen Abbildung in einem anderen Modul zuerst den Namen des Moduls mit der gesuchten Funktion sowie den folgenden Punkt. Dann klappt auch für Ihre eigenen Prozeduren die IntelliSense-Liste aus und Sie können bequem unter allen Namen auswählen.

cWenn Sie wenigstens den Anfang des Namens wissen, drücken Sie alternativ auch ohne vorangestellten Modulnamen Strg+Leertaste . Daraufh in wird der Name komplett ergänzt, falls er bereits eindeutig ist, oder es erscheint die IntelliSense-Liste zur genaue-ren Auswahl.

Selbst bei kurzen Prozedur- oder Variablennamen empfehle ich diese Technik damit Sie sicher sind, dass sie richtig geschrieben sind.

Funkti on statt Sub-Prozedur

Während die bisher beispielhaft geschriebene Sub-Prozedur zwar etwas macht, aber nie etwas an den aufrufenden Code zurückmelden kann, ist das bei Funktionen anders. Statt Sub heißt dort das Schlüsselwort Function und über den eigenen Prozedurnamen lässt sich ein Wert an den Aufrufer zurückgeben.

Die MsgBox() darf übrigens ebenso als Sub-Prozedur wie auch als Funktion aufgerufen werden und liefert dann auch eine Rückmeldung über die angeklickte Schaltfl äche. Dabei ändert sich zwingend die Schreibweise.

Eine aufgerufene Sub-Prozedur mit Argument schreibt sich mit einem Leerzeichen nach dem Prozedurnamen:

MsgBox “Hallo”

Eine Funktion hingegen muss nicht nur runde Klammern um alle Argumente haben, sondern vor allem den Rückgabewert in einer Variablen oder Ähnlichem speichern können:

varErgebnis = MsgBox(“Klappt das?”)

Abbildung 2.19: Die Auswahl eines Prozedurnamens anhand einer Modul-IntelliSense-Liste

Das ist ein wichtiger Unterschied beim Aufruf einer Prozedur: nach Sub-Namen folgt ein Leerzeichen, nach Function-Namen immer direkt eine runde Klammer! Unterschiedliche

Schreibweise

Page 30: Richtig einsteigen: Access 2013 VBA-Programmierung · Lorenz Hölscher Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

30 Kapitel 2: Die ersten VBA-Prozeduren erstellen

Dabei ist varErgebnis eine derzeit ziemlich beliebige Variable. Das mag jetzt zwar syntaktisch völlig in Ordnung sein, aber Sie sehen den Inhalt der Variablen immer noch nicht. Daher sollten Sie in der vollständigen Prozedur deren Wert anschließend zu Prüfzwecken anzeigen:

Sub FrageMitAntwort()

varErgebnis = MsgBox(“Klappt das?”, vbQuestion + vbYesNo)

MsgBox “Ausgewählt: “ & varErgebnis

End Sub

Bitte beachten Sie, dass in der ersten Codezeile eine MsgBox()-Funktion aufgerufen wurde, deren Rückgabewert in der Variablen varErgebnis zwischengespeichert wird. In der zweiten Zeile hingegen wird MsgBox als Sub-Prozedur ohne Rückgabewert benutzt.

Durch den Verkettungs-Operator & werden die beiden Teile, nämlich der Text »Ausgewählt:« sowie der Inhalt der Variablen varErgebnis zu einem gemeinsamen Text zusammengefügt und dann angezeigt.und dann angezeigt.

Wie Sie ausprobieren können, gibt ein Klick auf Ja den Wert 6 und auf Nein den Wert 7 zurück. Sie mögen überrascht sein, dass nicht die Beschriftungen der Schaltfl ächen oder Ähnliches als Rückgabewert benutzt werden.

Diese Version ist aber sprachunabhängig und damit einfacher zu benutzen. Denn erstens steht trotz der eingesetzten Konstanten vbYesNo tatsächlich nicht Yes und No auf den Schaltfl ächen, sondern in einem deutschsprachigen Windows auch deutschsprachige Bezeichnungen. Zweitens wäre es mehr als lästig, im Code später darauf zu reagieren, dass ein Benutzer Ja, Yes oder Oui angeklickt hat, wenn Sie diese Worte als Texte bekämen. Da ist eine sprachneutrale Zahl als Rückgabewert viel einfacher zu hand haben.

Eigene Funkti onen

So wie Sie eine eigene Sub-Prozedur schreiben können, geht das auch mit einer selbst defi nierten Funk tion, nur eben mit Function als Schlüsselwort statt mit Sub. Der wesentliche Unterschied besteht ja darin, dass eine Funktion einen Rückgabewert an das aufrufende Programm zurückliefert und die Sub-Prozedur nicht. Im folgenden Beispiel wird das morgige Datum als Ergebnis ausgegeben:

Function Morgen()

Morgen = Date + 1

End Function

Abbildung 2.20: Die beiden durch

FrageMitAntwort erzeugten Meldungen,

wenn Ja angeklickt wurde