Dieses Kapitel soll Ihnen einen ersten Überblick über die VBA-Programmierung unter Microsoft Access (ab Version 2010) vermitteln. Da das Buch nicht für den absoluten Einsteiger geschrieben wurde, gehen die Autoren davon aus, dass Sie bereits über gewisse Erfahrungen in der konventionellen Access-Datenbankprogrammierung verfügen, die Entwicklungsumgebung bedienen können und zumindest auch wissen, wie ein Makro funktioniert.
1.1 | VBA-Programmierung in Access |
VBA (Visual Basic for Applications) ist weit mehr als nur eine Alternative zur gängigen Makro-Programmierung unter Microsoft Access. Es handelt sich hier um eine komfortable und leistungsfähige Programmiersprache für alle Microsoft Office-Produkte.
1.1.1 | Visual Basic versus VBA |
Im Unterschied zu Visual Basic ist allerdings VBA keine eigenständige Sprache, mit der allein man lauffähige Programme entwickeln könnte, sondern es lassen sich mit VBA bestimmte Anwendungen, wie z. B. Microsoft Access, in ihrer Funktionalität erweitern bzw. nutzerspezifischen Anforderungen anpassen. Oder fachmännischer ausgedrückt: Von VBA aus lassen sich die Objektmodelle von Access, Word, Excel etc. steuern. Wenn wir im Folgenden mal von „Visual Basic“ und mal von „VBA“ sprechen, so sollten Sie diese „Laxheit“ nicht auf die Goldwaage legen, denn gemeint ist ein und dasselbe. Fakt ist, dass VBA als Untermenge vollständig in Visual Basic enthalten ist1, bei weitem aber nicht alle Features von Visual Basic unterstützt. Man könnte mit anderen Worten VBA auch als „kleinsten gemeinsamen Nenner“ von Visual Basic2 und Access bezeichnen (siehe folgende Abbildung).
HINWEIS: Es gibt zahlreiche Anwendungen, in die VBA integriert ist, und dabei handelt es sich bei weitem nicht nur um Microsoft Office-Produkte.
1.1.2 | Objekt- und ereignisorientierte Programmierung |
Im Unterschied zur klassischen prozeduralen Anwendungsentwicklung hat sich der VBA-Programmierer verstärkt mit folgenden Begriffen auseinander zu setzen:
Die verschiedenen Office-Anwendungen bieten ihre Funktionalität in Form von Objekten an, auf die mit VBA-Code zugegriffen werden kann. Obwohl wir mittlerweile im .NET-Zeitalter angekommen sind, liefert das COM (Component Object Model) immer noch die Grundlage für die Zusammenarbeit der verschiedenen Office-Objekte (auch über Anwendungsgrenzen hinaus).
Aus Anwendersicht kennen Sie bereits Datenbankobjekte wie Tabelle, Abfrage, Formular, Bericht, Makro, Modul. Für den VBA-Programmierer sind neben den datenbankspezifischen Objekten Tabelle und Abfrage vor allem Forms, Reports und Controls von besonderem Interesse, da sie die wesentlichen Anwenderschnittstellen zur Verfügung stellen. Hinzu kommen die Module, die keine Objekte im engeren Sinne sind, sondern lediglich Quelltextbibliotheken darstellen.
1.1.2.2 | Eigenschaften (Properties) |
Hinter diesem Begriff verbergen sich die Attribute von Objekten, wie z. B. Höhe (Height) und Breite (Width) eines Textfeldes. Jedes Objekt verfügt über seine eigene Menge von Eigenschaften, die teilweise nur zur Entwurfszeit (im Eigenschaftenfenster) oder zur Laufzeit (per Quellcode) zugewiesen werden können. Allgemein unterscheiden wir zwischen Format-, Daten- und anderen Properties (siehe dazu Kapitel 4).
1.1.2.3 | Methoden (Methods) |
Diese auf dem Objekt definierten Funktionen und Prozeduren hauchen „Leben“ in die bislang nur mit statischen Attributen behafteten Objekte. So erzeugt z. B. die Line-Methode eine Linie vor dem Hintergrund eines Reports, mit Print kann Text im Debug-Objekt (Testfenster) ausgegeben werden usw.
1.1.2.4 | Ereignisse (Events) |
Diese werden von Nachrichten ausgelöst, die vom Objekt empfangen werden. Dieser Nachrichtenverkehr stellt die eigentliche Schnittstelle zu Windows dar. Der Mausklick auf ein Formular löst z. B. ein MouseDown-Ereignis für dieses Objekt aus. Wir unterscheiden zwischen Fenster- und Fokus-, Tastatur- und Maus- sowie Daten- und Filter-Events (siehe Kapitel 4 und 5). Eine Hauptaufgabe des Programmierers ist das Schreiben von so genannten Ereignisbehandlungsroutinen (Event-Handler), in denen er festlegt, wie das Objekt bei Eintreffen eines bestimmten Ereignisses zu reagieren hat.
Einen ersten Eindruck der objekt- und ereignisorientierten VBA-Programmierung gewinnen Sie am besten anhand der Beispiele im Praxisteil dieses Kapitels. Weitere grundlegende Ausführungen zur objektorientierten Programmierung (OOP) folgen in Kapitel 6.
1.1.3 | VBA- oder Makro-Programmierung? |
Die klassischen Programmiermöglichkeiten unter Microsoft Access (Makro- und Ausdruckseditor, QbE-Fenster etc.) sind bereits so komfortabel, dass Sie mit Recht die Frage stellen werden: „Wozu brauche ich denn dann überhaupt noch VBA?“
Hier eine Aufzählung wichtiger Argumente, die für den Einsatz von VBA sprechen:
Erhöhung der Performance (Ausführungsgeschwindigkeit)
Definition eigener Funktionen (Makros können keine Werte zurückliefern!)
Spezielle Fehlerbehandlungsroutinen sind möglich
Verwendung von Ereignissen mit Übergabeparametern
Definition neuer Objekte (Tabellen, Abfragen, Formulare, Berichte) per Code
Zugriff auf andere Windows-Programme per OLE oder DDE
Nutzung spezieller Funktionen des Windows-API
Auslagerung von Teilen des Anwendungscodes in eine Bibliothek
Arbeiten mit den Datenbank-Objekten
Zugriff auf integrierte Funktionen des Datenbanksystems (z. B. Routinen zur Datendefinition oder SQL-Server-Prozeduren)
Auch der genialste Makro-Programmierer wird wohl früher oder später feststellen, dass er an Grenzen stößt, die sich nur mit dem mächtigen Instrumentarium von VBA durchbrechen lassen.
Der Umstieg zu VBA wird für den erfahrenen Makro-Programmierer vor allem durch zwei in Microsoft Access eingebaute Features erleichtert:
Konkrete Anleitungen dazu finden Sie im entsprechenden Einführungsbeispiel bzw. im Übersichtsteil dieses Kapitels.
HINWEIS: Allerdings soll ‒ bei aller Liebe zu VBA ‒ auch nicht verschwiegen werden, dass die Programmierung von Datenmakros und Web-Datenbanken mit VBA nicht möglich ist.
1.1.4 | Die VBA-Entwicklungsumgebung |
Da in diesem Buch die VBA-Programmierung eine zentrale Rolle spielt, werden wir uns im Folgenden schwerpunktmäßig auf die Elemente der VBA-Entwicklungsumgebung (IDE3) konzentrieren und die übrigen Access-Bedienfunktionen weitgehend als bekannt voraussetzen.
Beim visuellen Entwurf der Benutzeroberflächen von Formularen bzw. Berichten haben wir es zunächst mit den standardmäßigen Fenstern der Access-IDE zu tun:
Da vorausgesetzt wird, dass Sie bereits über Erfahrungen beim visuellen Entwurf von Formularen/ Berichten verfügen, kann wohl auf weitere Erklärungen verzichtet werden (siehe Einführungsbeispiel).
1.1.6 | Code-Fenster und Symbolleiste |
Das Tor zur VBA-Programmierung öffnet sich Ihnen weit, nachdem Sie die Registerkarte Datenbanktools gewählt haben und auf die Schaltfläche Visual Basic (Befehlsgruppe Makro) klicken. Hier wählen Sie im Projekt-Explorer das gewünschte Formular aus.
1.1.6.1 | Die wichtigsten Fenster |
Das VBA-Fenster sieht unter Access genauso aus wie bei den übrigen Office-Anwendungen.
Die wichtigsten Fenster innerhalb der VBA-IDE sind
Code-Fenster (öffnen über F7 oder Ansicht/Code),
Eigenschaftenfenster (öffnen über F4 oder Ansicht/Eigenschaftenfenster) und
Projektfenster (öffnen über Strg+R oder Ansicht/Projekt-Explorer).
Auf einige Besonderheiten dieser Fenster werden wir zu einem späteren Zeitpunkt eingehen.
1.1.6.2 | Die wichtigsten Menübefehle |
Wenn Sie in der VBA-IDE arbeiten, wechselt das Menüband das Aussehen und stellt Ihnen eine Reihe von Bedienfunktionen zur Verfügung, die Sie speziell für die Arbeit mit dem Code-Editor benötigen. Sie werden feststellen, dass viele Funktionen starke Ähnlichkeiten zur Bedienung einer Textverarbeitung unter Windows aufweisen.
Die am häufigsten benötigten Menüpunkte sind über Schaltflächen. In Abhängigkeit vom momentanen Zustand des Editors können einige Schaltflächen gesperrt sein und/oder das Aussehen bzw. die Funktion wechseln. Außerdem haben Sie die Möglichkeit, über das Menü Ansicht/Symbolleisten Änderungen vorzunehmen.
Die folgende Tabelle zeigt eine Zusammenstellung der für den Einstieg in die Codeprogrammierung zunächst wichtigsten...