Datenmakros und benannte Makros liefern vor allem die interessante Möglichkeit, grundlegende Datenoperationen durchzuführen – also beispielsweise das Anlegen neuer Datensätze, das Bearbeiten oder Löschen vorhandener Datensätze, das Durchlaufen von Datensatzgruppen oder das Auffinden bestimmter Datensätze. Prinzipiell bilden Sie damit die Basisoperationen der DAO-Bibliothek auf Makro-Ebene ab. Dieser Artikel stellt die Datenoperationen im Detail vor.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1402_Makros.mdb.
Datenoperationen
Die neuen Datenmakros sollen es vor allem ermöglichen, endlich auch per Makro einfache Datenoperationen auszuführen – also etwa einen neuen Datensatz anzulegen, vorhandene Datensätze zu ändern und zu löschen oder auch einfach auf die Felder eines Datensatzes zuzugreifen.
Diese Operationen bilden Sie typischerweise unter VBA ab – und zwar mit dem Recordset-Objekt und Befehlen wie AddNew, Edit, Update oder FindFirst.
Zu Testzwecken haben wir eine kleine Tabelle namens tblKunden angelegt, die allerdings nur das Primärschlüsselfeld KundeID, das Fremdschlüsselfeld AnredeID sowie die beiden Textfelder Vorname und Nachname enthält (siehe Bild 1).
Bild 1: Beispieltabelle für Testzwecke
Wenn Sie nun beispielsweise einen neuen Datensatz in der Tabelle anlegen möchten, benötigen Sie ein benanntes Makro für diese Tabelle. Dieses legen Sie bei in der Datenblattansicht geöffneter Tabelle über den Ribbonbefehl Ta-bel-le|Be-nannte Makros|Be-nanntes Ma-kro|Be-nanntes Makro erstellen an.
In diesem Makro fügen Sie nun zunächst den Befehl Datensatz erstellen in ein und wählen die Tabelle tblKunden als Ziel der Aktion aus.
Dieser Aktion können Sie weitere Befehle unterordnen, und zwar Gruppieren, Kommentar, Wenn, AbbrechenDatensatzänderung, FestlegenFeld und FestlegenLokaleVar.
In diesem Fall wollen wir die drei Felder AnredeID, Vorname und Nachname mit den entsprechenden Werten füllen. Dies erledigen wir, indem wir drei Mal die Makroaktion FestlegenFeld hinzufügen, unter Name das Zielfeld auswählen und unter Wert den einzutragenden Wert angeben (siehe Bild 2).
Bild 2: Datenmakro zum Anlegen eines neuen Datensatzes in der Tabelle tblKunden
Dabei ist zu beachten, dass Sie Literale in Anführungszeichen einfassen. Anderenfalls sucht Access nach einem entsprechenden Ausdruck und löst einen Fehler aus.
Dieses Makro soll nun also einen Datensatz zur Tabelle tblKunden hinzufügen. Aber wie rufen wir das Makro auf Dazu benötigen wir ein weiteres Makro, dem wir die Makroaktion AusführenDatenmakro zuweisen. Diese erwartet als Parameter den Namen des aufzurufenden Datenmakros mit führendem Tabellennamen, also hier tblKunden.dmkKundeAnlegen (siehe Bild 3). Ein erster Testaufruf des Makros makKundeAnlegen bringt das gewünschte Ergebnis – der Datensatz wird angelegt.
Bild 3: Dieses Makro ruft das Datenmakro zum Anlegen eines Kundendatensatzes auf.
Datenmakro mit Parametern
Als Nächstes wollen wir das doch recht statische Makro etwas dynamischer gestalten – und zwar, indem wir die in die Tabelle tblKunden einzufügenden Werte per Parameter übergeben.
Dazu erstellen wir ein weiteres benanntes Makro für die Tabelle tblKunden. Diesmal klicken wir jedoch zunächst drei Mal auf den Text Parameter erstellen oben rechts im Makro-Entwurf und erzeugen so drei Zeilen zur Eingabe von Parametern. Diese nennen wir prmAnredeID, prmVorname und prmNachname.
Nun fügen Sie wieder die Makroaktion Datensatz erstellen in hinzu, legen die Tabelle tblKunden als Ziel fest und tragen unterhalb dieser Makroaktion drei Mal den Befehl FestlegenFeld ein. Die Feldnamen lauten wieder wie im vorherigen Beispiel. Allerdings geben wir diesmal nicht direkt die einzufügenden Werte an, sondern die Namen der weiter oben definierten Parameter – also etwa den Parameter prmAnredeID für das Feld AnredeID. Die Parameter lassen sich bequem per IntelliSense aus der Liste der verfügbaren Elemente auswählen (siehe Bild 4).
Bild 4: Benanntes Makro mit Parametern
Nun folgt der zweite Teil: die Definition des Makros, mit dem wir das Datenmakro aufrufen und diesem die Werte für die Parameter übergeben.
Dazu erstellen Sie ein neues Makro namens macKundeAnlegenMitParameter und fügen diesem wieder die Makroaktion AusführenDatenmakro hinzu (siehe Bild 5). Diesmal wählen Sie das Makro tblKunden.dmkKundeAnlegenMitParameter für den Parameter Makroname aus. Nach der Auswahl des auszuführenden Makros erscheinen gleich die drei für das benannte Makro definierten Parameter. Hier geben wir wieder die gewünschten Werte ein (Anführungszeichen bei Zeichenketten nicht vergessen) und führen das Makro dann aus. Es funktioniert – auch dies legt den Datensatz mit den angegebenen Daten an.
Bild 5: Aufruf eines benannten Makros mit Parametern
Parameter per VBA übergeben
Nun möchten wir aber vielleicht das benannte Makro per VBA aufrufen. Wie übergeben wir die notwendigen Parameter mit der Methode RunDataMacro Der Versuch, dieses einfach ohne Angabe von Parametern aufzurufen, führt direkt zu einem Laufzeitfehler (siehe Bild 6).
Bild 6: Aufruf eines Datenmakros ohne Angabe der Parameter
Die Antwort lautet: Wir übergeben die Parameter gar nicht mit dieser Methode. Stattdessen legen wir die Parameter vorher fest, und zwar mit einer eigenen DoCmd-Methode. Das sieht dann für dieses Beispiel wie in Bild 7 aus. Wichtig ist an dieser Stelle, dass Sie Zeichenketten nicht nur in Anführungszeichen, sondern zusätzlich in Hochkommata einfassen (oder zusätzliche doppelte Anführungszeichen: “””Maria”””).
Bild 7: Vorherige Angabe der Parameter
Nach dem Aufruf der drei DoCmd.SetParameter-Anweisungen sowie der RunDataMacro-Methode wird der neue Datensatz in der Tabelle tblKunden angelegt. Anzumerken ist noch, dass die mit SetParameter gesetzten Parameter mit dem Aufruf der RunDataMacro-Methode geleert werden, sodass ein erneuter Aufruf des benannten Makros einen Fehler auslöst.
DLookup im Makro
Nun erhöhen wir den Schwierigkeitsgrad: Ein neues benanntes Makro soll nur die Anrede, aber nicht den Primärschlüsselwert des entsprechenden Datensatzes in der Tabelle tblAnreden als Parameter erhalten. Das heißt, dass das benannte Makro selbst die AnredeID für die angegebene Anrede ermitteln muss.
Das ist eigentlich recht einfach – wenn man weiß, auf welche Kleinigkeiten man achten muss. In diesem Fall erstellen Sie wiederum ein neues benanntes Makro für die Tabelle tblKunden. Diesmal geben Sie statt des Parameters prmAnredeID den Parameter prmAnrede an – es soll also nicht mehr direkt die AnredeID übergeben werden, sondern die Bezeichnung der Anrede.
Um die AnredeID aus der Tabelle tblAnreden zu ermitteln, gehen wir wie folgt vor: Zunächst legen Sie im benannten Makro dmcKundeAnlegenMitAnrede die Makroaktion Datensatz nachschlagen in an. Dieser weisen Sie als Quelle die Tabelle tblAnreden zu. Die erste Hürde, die den meisten etwas Kopfzerbrechen bereiten dürfte, ist die Formulierung der Bedingung, die genau den Datensatz mit der angegebenen Anrede liefert. Intuitiv würde man hier einen Ausdruck wie den folgenden unterbringen:
="Anrede = '" & prmAnrede & "'"
Dieser Versuch misslingt jedoch. An dieser Stelle ist dann guter Rat teuer. Wie soll ich ohne meine gewohnten VBA-Werkzeuge mal eben debuggen und beispielsweise herausfinden, welches Ergebnis mir der hier verwendete Ausdruck liefert Aber das ist kein Problem: Es gibt ja die Makroaktion ProtokollierenEreignis, mit dem wir einen beliebigen Ausdruck in die Tabelle USysApplicationLog eintragen können. Also verwenden wir diesen wie in Bild 8 und lassen uns das Ergebnis des ermittelten Ausdrucks in dieser Tabelle ausgeben.
Bild 8: Benanntes Makro inklusive Ermittlung von Lookup-Werten
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: