Makros sind eine Möglichkeit, einfache Vorgänge unter Access zu automatisieren. Sie sind zwar erheblich unflexibler als etwa VBA-Code, haben aber dennoch ihre Berechtigung – zum Beispiel in Form zweier Spezialmakros namens AutoExec und AutoKeys, die beim Start beziehungsweise beim Ausführen von Tastenkombination aufgerufen werden können. Da Microsoft mit Access 2010 die Webdatenbanken eingeführt hat, die ausschließlich mit Makros programmiert werden können, wollen wir an dieser Stelle eine Einführung in die Programmierung mit Makros bieten.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1402_Makros.mdb.
Makros und VBA
Makros und VBA eignen sich beide zur Programmierung von Ereignissen in Access. In Abgrenzung zu anderen Office-Anwendungen wie Word, Excel und Co. müssen wir hier jedoch eine kurze Begriffsklärung vornehmen: Bei den übrigen Office-Anwendungen spricht man in Zusammenhang mit einer VBA-Prozedur von einem Makro. Dort lassen sich fast alle Aktionen als Makro aufzeichnen, was aber bedeutet, dass die Office-Anwendung eine VBA-Prozedur erstellt, welche die in der Anwendung durchgeführten Tätigkeiten in Form von VBA-Anweisungen enthält.
Ein solches Word- oder Excel-Makro ist nicht mit einem Makro in Access zu vergleichen. Unter Access spricht man unter VBA zum Beispiel von Prozeduren oder Funktionen, gegebenenfalls auch von Routinen, aber niemals von Makros.
Ein Makro ist unter Access ein eigener Objekttyp, dessen Vertreter im Navigationsbereich eine eigene Kategorie besitzen. Die Anweisungen eines Makros werden nicht in Form von Codezeilen eingegeben, sondern als Makrobefehle eingegeben beziehungsweise ausgewählt.
Spezialmakros
Die einzigen beiden Fälle, in denen wir bislang auf die Programmierung von Makros eingegangen sind, finden Sie in den Artikeln Aktion beim Start: Das AutoExec-Makro und AutoKeys: Globale Tastenkombinationen. Das AutoExec-Makro wird direkt beim Start von Access ausgeführt.
Sie können damit also Aktionen auslösen, die in Zusammenhang mit dem Start ausgeführt werden sollen, also etwa das Neuverknüpfen mit einer Backend-Datenbank et cetera. Mit dem AutoKeys-Makro definieren Sie Tastenkombinationen, die global, also anwendungsweit, gültig sind.
Wenn Sie also etwa verhindern möchten, dass der Benutzer mit der Tastenkombination Strg + G das Direktfenster öffnet, können Sie diese Tastenkombination im AutoKeys-Makro entsprechend umbiegen. Im Gegensatz zu den Tastenkombinationen, die Sie in Formularen mit Ereignissen wie Bei Taste ab oder Bei Taste auf abfangen können, werden die mit dem AutoKeys-Makro definierten Tastenkombinationen zu jedem Zeitpunkt ausgelöst und nicht nur dann, wenn ein bestimmtes Formular den Fokus besitzt.
Makros ab Access 2007
Mit Access 2007 hat Microsoft begonnen, die Möglichkeiten der Makros aufzuwerten. Wenn Sie bereits früher mit Makros programmiert haben, sind die folgenden Hinweise für Sie interessant – aber auch für alle anderen:
- Makros können nicht nur gespeichert und als Wert von Ereigniseigenschaften angegeben werden. Sie können Makros auch in die Ereignisse von Formularen, Berichten und Steuerelementen einbetten. Das Makro wird dann nicht mehr als eigener Eintrag in der Kategorie Makros des Navigationsbereichs angezeigt, sondern direkt im Formular oder im Bericht gespeichert.
- Der VBA-Code und bestimmte Makrobefehle werden in Access-Datenbanken nicht ausgeführt, wenn diese nicht als vertrauenswürdig eingestuft sind. Sie können im Makro-Editor nun angeben, dass nur solche Makros angezeigt werden, die auch bei nicht vertrauenswürdigen Datenbanken ausgeführt werden können.
- Mit Access 2007 gibt es erstmals eine Fehlerbehandlung und die Möglichkeit, Makros zu debuggen. Makroaktionen wie BeiFehler oder ClearMacroError helfen dabei ebenso wie MakroEinzelschritt, mit der Sie innerhalb des Makros (ähnlich einer Haltemarke) in den Einzelschrittmodus wechseln können.
- Bis Access 2003 konnten Makros weder auf Variablen zugreifen noch solche mit Werten füllen. Mit Access 2007 wurden die sogenannten Temporären Variablen eingeführt. Diesen können Sie Werte zuweisen und diese auch wieder abfragen. Interessant ist, dass es auch in VBA ein entsprechendes Objekt gibt, sodass ein Austausch zwischen VBA-Routinen und Makros erfolgen kann.
Makros in Access 2010
Mit Access 2010 geht der Reigen der Neuerungen im Bereich der Makros weiter:
- Die wichtigste Neuerung ist der neue Makro-Editor. Er liefert eine wesentlich bessere Benutzeroberfläche zum Erstellen von Makros, hier vor allem bei der Umsetzung von Bedingungen und Verschachtelungen.
- Makroaktionen können Sie direkt aus der Liste im Bereich der zum Makro hinzugefügten Befehle auswählen (siehe Bild 1).
- Es gibt aber auch einen übersichtlichen Katalog, in dem die Makros nach Kategorien sortiert sind (siehe Bild 2).
- Zusätzlich können Sie in Makros nun auch IntelliSense nutzen. Damit greifen Sie beispielsweise auf alle eingebauten Access-Funktionen zu, aber auch auf benutzerdefinierte VBA-Funktionen zu. Außerdem stehen die Objektnamen etwa von Tabellen, Abfrage, Formularen et cetera zur Auswahl (siehe Bild 3).
- Es gibt eine Wenn-Bedingung (mit Sonst- und Sonst Wenn-Zweigen), die auch verschachtelt angeordnet werden können.
- Sie können bereits erstellte Makros ganz einfach als Untermakros zu weiteren Makros hinzufügen. Diese werden im Aktionskatalog in der Kategorie In diesen Datenbank|Makros eingeblendet.
- Sie können Teile des Makrocodes kopieren und an anderer Stelle wieder einfügen. Das dabei verwendete Format ist XML. Sie können ein Makro also auch kopieren und per E-Mail an einen anderen Entwickler versenden.
- Eine weitere wichtige Neuerung sind die Datenmakros, die ähnlich etwa wie die Trigger im SQL Server arbeiten. Diese Makros werden Tabellen zugeordnet und bei bestimmten Datenaktionen ausgelöst – wie etwa das Anlegen eines neuen oder das ändern oder Löschen eines bestehenden Datensatzes.
Bild 1: Auswählen einer Makroaktion direkt im Makro-Editor …
Bild 2: … oder aus dem Aktionskatalog.
Bild 3: IntelliSense im Makro-Editor von Access 2010
Makros in Access 2013
Unter Access 2013 gab es keine nennenswerten Neuerungen. Anscheinend sind sogar drei Makrobefehle weggefallen (mehr zu den verschiedenen Makro-Befehlen weiter unten):
- SammelnDatenüberEmail
- StartenNeuerWorkflow
- WorkflowAufgaben
Verschiedene Makro-Arten
Unter Access gibt es die folgenden Makro-Arten:
- normale Makros, die über den Menübefehl Erstellen|Makros und Code|Makro angelegt und unter einem von Ihnen vergebenen Namen gespeichert und im Navigationsbereich angezeigt werden
- reine Ereignis-Makros, die als Makro für ein Ereignis eines Formulars, Berichts oder Steuerelements angelegt werden. Diese erscheinen nicht im Navigationsbereich.
- Datenmakros sind Makros, die durch Ereignisse in Tabellen ausgelöst werden, also beim Anfügen, Löschen oder ändern von Datensätzen.
- benannte Makros sind Makros, die Sie im Kontext einer bestimmten Tabelle anlegen und die entweder durch ein Datenmakro oder durch ein herkömmliches Makro ausgelöst werden können.
Makro erstellen
Die folgenden Beispiele wurden unter Access 2010 durchgeführt. Wir möchten erstens die neuen Möglichkeiten untersuchen und zweitens die aktuelle Benutzeroberfläche zur Erstellung von Makros nutzen. Für einen ersten überblick der Benutzeroberfläche erstellen Sie zunächst mit dem Ribbon-Eintrag Erstellen|Makros und Code|Makro ein neues Makro. Fügen Sie diesem nun per Auswahl über das Kombinationsfeld Neue Aktion hinzufügen einfach den Befehl Meldungsfeld hinzu.
Access zeigt nun direkt an Ort und Stelle die vier Eigenschaften für die Meldungsfeld-Makroaktion an (siehe Bild 4): Meldung, Signalton, Typ und Titel.
Bild 4: Ein erstes Makro mit einem Meldungsfeld
Die Eigenschaften sollten von der VBA-Funktion MsgBox bekannt sein, daher gehen wir an dieser Stelle nicht näher auf die Optionen ein. Speichern Sie das Makro unter dem Namen macMeldungsfeld.
Makro aufrufen
Die einfachste Möglichkeit, ein Makro aufzurufen, ist ein Doppelklick auf den Namen des Makros im Navigationsbereich von Access (siehe Bild 5).
Bild 5: Makro per Doppeklick starten
Natürlich können Sie ein Makro auch bereits beim Erstellen durch einen Mausklick auf den Ribbon-Befehl Ent-wurf|Tools|Aus-führen aufrufen.
Makro per VBA aufrufen
Eine weitere Möglichkeit für den Aufruf eines Makros ist die Methode RunMacro des DoCmd-Objekts. Den folgenden Befehl können Sie beispielsweise im Direktbereich des VBA-Editors absetzen, aber auch in Funktionen oder Prozeduren integrieren:
DoCmd.RunMacro ""
Der Beispielaufruf aus Bild 6 zeigt, dass die RunMacro-Methode neben dem Makronamen noch zwei weitere Parameter anbietet:
Bild 6: Aufruf eines Makros im Direktbereich des VBA-Editors
- RepeatCount: Gibt an, wie oft das Makro ausgeführt werden soll.
- RepeatExpression: Enthält einen Ausdruck, der bei jeder der in RepeatCount angegebenen Ausführungen ausgewertet wird. Wenn der Ausdruck den Wert False enthält, wird die wiederholte Ausführung abgebrochen.
Sie können ein Makro auch von einem anderen Makro aus aufrufen. Wenn Sie also etwa unser Beispiel-makro macMeldungsfeld von einem anderen Makro etwa namens macAnderesMakroStarten aus starten möchten, legen Sie dieses Makro an und fügen diesem die Makroaktion AusführenMakro mit dem Namen des auszuführenden Makros als Parameter hinzu (siehe Bild 7).
Bild 7: Aufrufen eines anderen Makros von einem Makro aus
Makro per Kontextmenü aufrufen
Wenn Sie in Ihrer Anwendung Kontextmenüs verwenden, können Sie über die dort enthaltenen Einträge nicht nur VBA-Funktionen, sondern auch Makros aufrufen.
In den neueren Access-Versionen, auf die wir uns hier beziehen, legen Sie Kontextmenüs per VBA an (siehe Artikel Kontextmenüs). Dort geben Sie die aufzurufende Prozedur mit der Eigenschaft OnAction des jeweiligen Steuerelements an. Dies sieht dann etwa wie in Listing 1 aus – siehe das Formular frmMakroPerKontextmenue in der Beispieldatenbank. Die Prozedur benötigt einen Verweis auf die Bibliothek Microsoft Office x.0 Object Library und zeigt gleich beim öffnen des Formulars das entsprechende Kontextmenü mit dem Eintrag zum Auslösen des Makros macMeldungsfeld an.
Private Sub Form_Load() Dim cbr As CommandBar Dim cbc As CommandBarControl On Error Resume Next CommandBars("cbrMakro").Delete On Error GoTo 0 Set cbr = CommandBars.Add("cbrMakro", msoBarPopup, False, True) Set cbc = cbr.Controls.Add(msoControlButton) With cbc .Caption = "Makro ausführen" .OnAction = "macMeldungsfeld" End With cbr.ShowPopup End Sub
Listing 1: Diese Prozedur zeigt gleich beim Laden eines Formulars ein Kontextmenü mit einem Befehl an, der ein Makro aufruft.
Makros per Ereignis aufrufen
Makros können in Desktop-Datenbanken als Alternative für VBA-Ereignisprozeduren verwendet werden. In den sogenannten Webdatenbanken können Sie ausschließlich Makros zur Implementierung von Ereignissen verwenden.
Wenn Sie ein Makro durch ein Ereignis eines Formulars, Berichts oder Steuerelements auslösen möchten, haben Sie zwei Möglichkeiten:
- Sie legen das Makro als eigenes Makro an (etwa mit dem Ribbon-Eintrag Erstellen|Makros und Code|Makro) und speichern es unter dem gewünschten Namen. Dann wählen Sie den Namen des Makros als Wert der entsprechenden Ereigniseigenschaft aus.
- Sie klicken auf die Schaltfläche rechts neben der Ereigniseigenschaft und wählen aus dem nun erscheinenden Dialog den Eintrag Makro-Generator aus (siehe Bild 8). Es erscheint nun der Makro-Editor, mit dem Sie das Makro programmieren können.
Bild 8: Makro für ein Ereignis festlegen
In letzterem Fall wird das Makro nicht unter einem von Ihnen vergebenen Namen gespeichert, sondern direkt mit dem Formular oder Bericht. Diese sogenannten eingebetteten Makros gab es in dieser Form zuvor nicht.
Mit den neueren Access-Versionen können Sie außerdem auch Makros für Steuerelemente festlegen, die quasi in die Steuerelemente eingebettet werden – das bedeutet, dass Sie ein Steuerelement von einem Formular zum nächsten kopieren können und das Makro gleich mit kopiert wird.
Datenmakros aufrufen
Datenmakros können Sie nicht “aufrufen”, sondern lediglich auslösen – und zwar durch das entsprechende Ereignis einer Tabelle (Anfügen, Bearbeiten oder Löschen von Daten). Die einzelnen Ereignisse schauen wir uns später an.
Benannte Makros aufrufen
Benannte Makros, also solche Makros, die Sie im Kontext einer Tabelle erstellt haben, rufen Sie mit der Makroaktion AusführenDatenmakro auf.
Mit dem Makro-Editor arbeiten
Der Makro-Editor von Access 2010 und jünger bietet gegenüber dem Vorgänger eine Reihe neuer Features an (dieser Hinweis für alle, die bereits mit älteren Access-Versionen gearbietet haben).
Wenn Sie einmal – wie weiter oben beschrieben – ein neues Makro angelegt haben, können Sie gleich mit dem Hinzufügen von Makroaktionen beginnen. Zunächst ist es hilfreich, die dabei zur Verfügung stehenden Ribbon-Elemente kennenzulernen. Diese sehen etwa unter Access 2010 wie in Bild 9 aus.
Bild 9: Makros über das Ribbon bearbeiten
Wenn Sie das erste Mal mit dem neuen Makro-Editor arbeiten, stellen Sie sich möglicherweise die eine oder andere Frage – zum Beispiel, wie man eine Makroaktion ganz vorne im Makro einfügt.
Solche Fragen beantwortet das Makro-Ribbon nicht. Es stellt lediglich den einen oder anderen Befehl zur Verfügung, der so nicht im Makro-Editor selbst zu finden ist. So bietet das Makro-Ribbon etwa die folgenden Befehle:
- Ausführen: Die schnellste Möglichkeit, um das aktuelle Makro zu starten. Achtung: Sie müssen ein Makro speichern, bevor Sie es ausführen können.
- Einzelschritt: Mit dieser Schaltfläche aktivieren oder deaktivieren Sie den Einzelschrittmodus beim Ausführen von Makros. Ist die Option aktiviert, zeigt Access vor der Ausführung eines jeden Befehls den Dialog Einzelschritt an, der Informationen über den nächsten auszuführenden Befehl ausgibt (siehe Bild 10).
- Zu Visual Basic konvertieren: Dieser Befehl startet die Konvertierung von Makros zu Visual Basic-Prozeduren (mehr dazu weiter unten).
- Aktionen erweitern: Erweitert alle markierten Aktionen (sind keine markiert, werden alle Aktionen erweitert).
- Aktionen reduzieren: Zeigt für alle markierten Aktionen nur noch die erste Zeile und das Plus-Zeichen zum Erweitern an. Sind keine Aktionen markiert, werden alle Aktionen reduziert dargestellt.
- Alles einblenden: Erweitert alle Aktionen.
- Alle Ebenen reduzieren: Stellt alle Ebenen nur noch in Form der ersten Zeile dar.
- Aktionskatalog: Blendet den Aktionskatalog ein und aus.
- Alle Aktionen anzeigen: Zeigt, wenn gedrückt, alle Aktionen im Aktionskatalog an. Ist Alle Aktionen anzeigen nicht aktiviert, zeigt der Aktionskatalog nur die Aktionen an, die im aktuellen Kontext zulässig sind.
Bild 10: Der Einzelschritt-Modus des Makro-Editors
Makros konvertieren
Wenn Sie beispielsweise eine Datenbank bearbeiten sollen, indem Sie die vorhandenen Makros nach VBA konvertieren, können Sie dies zumindest teilweise automatisch erledigen lassen. Den dazu notwendigen Befehl Zu Visual Basic konvertieren haben Sie bereits weiter oben kennengelernt.
Wenn Sie diesen anklicken, liefert Access zunächst den Dialog aus Bild 11. Hier legen Sie fest, ob Sie eine Fehlerbehandlung zu der konvertierten VBA-Prozedur hinzufügen möchten oder ob die im Makro enthaltenen Kommentare im Code untergebracht werden sollen. Access legt für jedes konvertierte Makro ein neues VBA-Modul an, dessen Name aus Konvertiertes Makro- und dem Namen des Makros besteht, also beispielsweise Konvertiertes Makro- macMeldungsfeld.
Bild 11: Optionen für die Konvertierung von Makros zu VBA-Prozeduren
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: