Home > Artikel > Ausgabe 3/2014 > Programmieren mit Makros, Teil II

Programmieren mit Makros, Teil II

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

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 1403_Makros.mdb.

Steuerelemente und Co.

Mit FestlegenEigenschaft stellen Sie den Wert einer Eigenschaft eines Steuerelements oder auch eines Formulars oder Berichts ein. Die Makroaktion erwartet die folgenden Parameter:

  • Steuerelementname: Geben Sie hier den Namen des Steuerelements an, also beispielsweise txtText. Wenn Sie diesen Parameter leer lassen, bezieht sich die Makroaktion auf das Objekt, das aktuell den Fokus besitzt. Sie müssen dieses also gegebenenfalls zuvor noch aktivieren (mit ÖffnenFormular, ÖffnenBericht oder AuswählenObjekt).
  • Eigenschaft: Stellen Sie hier die betroffene Eigenschaft ein. Sie können lediglich die folgenden Eigenschaften verwenden: Aktiviert, Sichtbar, Gesperrt, Links, Breite, Oben, Höhe, Vordergrundfarbe, Hintergrundfarbe, Beschriftung und Wert.
  • Wert: Geben Sie hier den Wert für die Eigenschaft ein. Für Eigenschaften, welche die Werte Wahr/Falsch beziehungsweise True/False erwarten, geben Sie die Werte -1 oder 0 an.

Ein Beispiel folgt weiter unten.

Die Makroaktion BearbeitenListenElemente öffnet den Dialog, mit dem Sie die Listeneinträge eines Kombinationsfeldes oder Listenfeldes bearbeiten können. Dabei gibt es folgende Voraussetzungen: Das Steuerelement muss zuvor den Fokus erhalten, es muss seine Daten in einer Wertliste anzeigen (Eigenschaft Herkunftsart) und die Eigenschaft Wertlistenbearbeitung zulassen muss den Wert Ja enthalten.

Der mit der Makroaktion geöffnete Dialog sieht wie in Bild 1 aus (siehe auch Formular frmBearbeitenListenElemente).

Öffnen des Dialogs zum Anzeigen einer Wertliste zur Bearbeitung

Bild 1: Öffnen des Dialogs zum Anzeigen einer Wertliste zur Bearbeitung

Datensatzoperationen

Wie Sie den Datensatzzeiger bewegen und wie Sie einen neuen Datensatz anzeigen, haben Sie in den vorherigen Abschnitten gelernt. Schauen wir uns nun an, welche Operationen mit Datensätzen Sie noch mit der Hilfe von Makros durchführen können.

Die Makroaktion DatensatzLöschen etwa erlaubt das Löschen des aktuellen Datenatzes. Um einen Datensatz zu löschen, aktivieren Sie im gleichen Makro zuvor das Objekt, in diesem sich der zu löschende Datensatz befindet. Wenn Sie eine Schaltfläche etwa in einem Detailformular anlegen, dass selbst den zu löschenden Datensatz anzeigt, braucht diese lediglich die Makroaktion DatensatzLöschen aufzurufen. Ein Beispiel dazu finden Sie im Formular frmArtikelDetail.

Wenn Sie hingegen einen Datensatz in einem Unterformular oder in einem anderen Formular speichern möchten, müssen Sie das entsprechende Element zuvor mit dem Fokus versehen (siehe Schaltfläche Datensatz löschen im Formular frmArtikel).

Die Makroaktion DatensatzSpeichern speichert den aktuellen Datensatz in dem Objekt, das den Fokus besitzt. Hier sehen wir uns ein etwas umfangreicheres Beispiel an (siehe Bild 2).

Anlegen und speichern eines neuen Datensatzes

Bild 2: Anlegen und speichern eines neuen Datensatzes

Das Makro aus der Abbildung (siehe Formular frmArtikelDetail) erledigt drei Schritte:

  • Es erstellt einen neuen Datensatz.
  • Es füllt das Steuerelement Artikelname mit einem Wert, damit der Datensatz in Bearbeitung und ungespeichert ist.
  • Dann ruft es die Makroaktion SpeichernDatensatz auf (die eigentlich der Makroaktion AusführenMenübefehl mit dem Wert DatensatzSpeichern entspricht) und speichert somit den Datensatz.

Gegebenenfalls möchten Sie auch einmal die Änderungen an einem bereits in Bearbeitung befindlichen und noch nicht gespeicherten Datensatzes rückgängig machen. Dies erledigt man normalerweise mit der Escape-Taste, aber nicht jeder Benutzer ist sich dieser Funktion bewusst.

Also fügen wir dem Formular frmArtikelDetail noch eine Schaltfläche hinzu, welche die Änderungen seit dem letzten Speichervorgang rückgängig macht.

Dazu verwenden wir schlicht und einfach die Makroaktion RückgängigDatensatz, die wiederum der Makroaktion AusführenMenübefehl mit dem Parameterwert RückgängigDatensatz entspricht. Ein Beispiel finden Sie hinter der Schaltfläche Änderungen rückgängig machen im Formular frmArtikelDetail.

Ereignisse abbrechen

VBA bietet in den Ereignisprozeduren von Ereignissen wie etwa Beim Öffnen oder Vor Aktualisierung einen Parameter namens Cancel an. Wenn Sie diesen auf True einstellen, wird die Aktion, die diesem Ereignis folgt, abgebrochen.

So wird beispielsweise das Formular nicht geöffnet, wenn bestimmte Bedingungen eintreten, unter denen Cancel auf True eingestellt wird oder ein Datensatz wird nicht aktualisiert.

Diese Möglichkeit gibt es auch bei Makros, die durch Formular- oder Berichtsereignisse ausgelöst werden. Nur sieht dies hier etwas anders aus, da durch Ereignisse ausgelöste Makros keine Parameter besitzen. Stattdessen rufen Sie in diesem Fall die Makroaktion AbbrechenEreignis auf.

Daten aktualisieren

Zum Aktualisieren der Daten in geöffneten Tabellen, Abfragen oder Formularen bietet Access verschiedene Methoden an.

Die Makroaktion Aktualisieren entspricht eigentlich der Makroaktion AusführenMenübefehl mit dem Wert Aktualisieren für den Parameter Wert und aktualisiert die Daten des aktuellen Objekts. Dabei wird die Datenherkunft nicht erneut abgefragt, sondern nur die aktuell angezeigten Datensätze. Das heißt, dass gelöschte oder eventuell hinzugefügte Datensätze nicht berücksichtig werden.

Die Makroaktion AktualisierenDatensatz arbeitet genauso wie die Makroaktion Aktualisieren.

Die Makroaktion AktualisierenDaten erwartet als optionalen Parameter den Namen eines Steuerelements. Wenn Sie diesen festlegen, wird das genannte Steuerelement aktualisiert (typischerweise eines mit einer Datensatzherkunft wie ein Kombinationsfeld oder ein Listenfeld). Geben Sie kein Steuerelement an, aktualisiert die Makroaktion das aktuelle Objekt, also beispielsweise eine Tabelle, eine Abfrage oder ein Formular. Im Gegensatz zur Makroaktion Aktualisieren werden hier auch gelöscht und neu hinzugefügte Datensätze berücksichtigt.

Die Makroaktion AktualisierenObjekt aktualisiert die Anzeige im einem mit den beiden Parametern Objekttyp und Objektname angegebenen Objekt, in der Regel einem Formular. Damit erzwingen Sie die Anzeige etwa in berechneten Feldern, die sonst nicht sofort angezeigt würden, weil beispielsweise noch andere Aufgaben erledigt werden müssen.

Formular filtern

Wenn Sie in einem Formular nach bestimmten Daten suchen wollen, lässt sich dies auch per Makro realisieren. Dazu verwenden Sie die Makroaktion FestlegenFilter.

Wenn Sie beispielsweise alle Datensätze des Unterformulars anzeigen möchten, deren Feld Artikelname dem im Suchfeld txtSuche eingegebenen Begriff entspricht, verwenden Sie die folgenden Parameter für diese Makroaktion:

  • Filtername: Name einer Abfrage, deren WHERE-Bedingung als Kriterium verwendet werden soll
  • Bedingung: [Artikelname] = [txtSuche]
  • Steuerelementname: sfmArtikel

Sie können dieser Makroaktion entweder den Parameter Filtername oder Bedingung übergeben. Filtername erwartet beispielsweise den Namen einer Abfrage, die eine WHERE-Bedingung zum Einschränken des Suchergebnisses enthält, also beispielsweise die folgende:

SELECT * FROM tblArtikel WHERE Artikelname LIKE 'Ch*'

Für Steuerelementname geben keinen Wert ein, wenn sich die Schaltfläche, die FestlegenFilter auslöst, im gleichen Formular befindet wie die zu filternden Daten. Wenn sich diese Schaltfläche hingegen etwa im Hauptformular befindet, die zu durchsuchenden Daten hingegen in einem Unterformular, geben Sie den Unterformularnamen an.

Alternativ geben Sie unter Bedingung gleich den Filterausdruck an, also wie in diesem Beispiel [Artikelname] = [txtSuche].

Letzteres ist etwas gewöhnungsbedürftig. Immerhin geben wir in der Bedingung mit Artikelname einen Feldnamen an, der in der Datenherkunft des Unterformulars existiert, ohne der Makroaktion mitzuteilen, dass es sich um ein Feld im Unterformular handelt. Wir tragen zwar den Namen des Unterformulars, also sfmArtikel, für die Eigenschaft Steuerelementname ein, was vermutlich dafür sorgt, dass beim Filtern das Feld des Unterformulars herangezogen wird.

Allerdings geben wir im Filter weiterhin das Textfeld txtSuche als Teil des Kriteriums an – dieses befindet sich allerdings im Hauptformular. Es ist an dieser Stelle nicht ganz klar, woher die Makroaktion weiß, dass txtSuche im Hauptformular und Artikelname im Unterformular zu suchen ist. Es kann aber wohl nicht schaden, darauf zu achten, dass die Bestandteile des Filterausdrucks in Haupt- und Unterformular eindeutig sind.

Wie auch immer: Die Makroaktion aus Bild 3 filtert die Daten des Unterformulars zuverlässig nach dem in txtSuche angegebenen Ausdruck.

Makro zum Durchsuchen des Unterformulars

Bild 3: Makro zum Durchsuchen des Unterformulars

Die AnwendenFilter-Makroaktion verwendet die gleichen Parameter wie FestlegenFilter und funktioniert auch weitgehend identisch. Allerdings scheint für den Parameter Bedingung die Angabe absoluter Werte für Steuerelement et cetera nötig.

Sie können also nicht einfach txtSuche als Vergleichswert angeben, sondern müssen auch noch das Formular referenzieren:

[Artikelname] Wie [Formulare]![frmArtikelDetail]![txtSuche]

Filter aufheben

Wenn Sie nach dem Filtern eines Formulars oder Unterformulars wieder alle enthaltenen Daten anzeigen möchten, verwenden Sie die Makroaktion FilterSortierungEntfernen.

Diese können Sie auch verwenden, um auf beliebige Art festgelegte Sortierungen zurückzusetzen.

Eine weitere Makroaktion, mit der Sie wieder alle Datensätze im Formular oder Unterformular anzeigen, heißt AnzeigenAlleDatensätze. Diese Aktion erwartet keine Parameter, hebt aber auch nur den Filter auf, nicht die Sortierung.

Sortierung festlegen

Die Makroaktion FestlegenSortiertNach legt eine Sortierung für ein Formular oder einen Bericht fest. Sie erwartet zwei Parameter:

  • Sortiert nach: Erwartet den Feldnamen, nach dem sortiert werden soll. Außerdem geben Sie hinter dem Feldnamen entweder ASC (für aufsteigende Sortierung) oder DESC (absteigend) an. Wenn Sie keines von beiden angeben, sortiert Access aufsteigend.
  • Steuerelementname: Falls ein Unterformular oder Unterbericht sortiert werden soll, geben Sie hier den Namen des Unterformulars/Untersteuerelements an.

Leider können Sie nicht einfach etwa das zu sortierende Feld per Kombinationsfeld auswählen lassen. Sortiert Nach erwartet in jedem Fall eine Zeichenkette.

Datensatz suchen

Während Sie mit den Filter-Aktionen gleich alle nicht mit dem angegebenen Kriterium übereinstimmenden Datensätze ausblenden, ermöglichen einige weitere Makro-Aktionen das gezielte Springen zu bestimmten Datensätzen. Eine dieser Aktion lautet SuchenDatensatz. Diese erwartet die folgenden Parameter:

  • Suchen nach: Suchausdruck
  • Vergleichen: Auswahl, ob der gesamte Feldinhalt verglichen werden soll (das Feld muss komplett mit dem Suchbegriff übereinstimmen), nur ein Teil des Feldinhalts (der Suchbegriff muss irgendwo im Feld vorkommen) oder nur der Beginn des Feldinhalts.
  • Groß-/Kleinschreibung: Gibt an, ob bei der Suche auf die Groß-/Kleinschreibung geachtet werden soll.
  • Suchen: Gibt an, ob alle Datensätze vom ersten Datensatz an, vom aktuellen Datensatz nach oben oder vom aktuellen Datensatz nach unten gesucht werden soll.
  • Wie formatiert: Gibt an, ob durch Formatierungen hinzugefügte Zeichen bei der Suche berücksichtigt werden sollen. Eine Zahl wie 1000 kann ja beispielsweise mit Tausendertrennzeichen angezeigt werden (1.000). Wenn Sie Wir Formatiert auf Ja einstellen, wird in diesem Fall das Tausendertrennzeichen berücksichtigt.
  • Nur aktuelles Feld: Gibt an, ob nur das aktuelle Feld durchsucht werden soll oder alle Felder. Wenn Sie also beispielsweise nur den Artikelnamen durchsuchen wollen, sollten Sie den Fokus zuvor auf dieses Feld einstellen und dann die Option Nur aktuelles Feld auf Ja setzen.
  • Am Anfang beginnen: Legt fest, dass die Suche unabhängig von der aktuellen Position des Datensatzzeigers beim ersten Datensatz der Datenherkunft des Formulars begonnen wird.

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!