Normalerweise implementieren Sie die Ereignisprozeduren von Formularen und Steuerelementen jeweils im Klassenmodul des jeweiligen Formulars. Aber wussten Sie, dass Sie die Ereignisse auch in anderen Klassenmodulen implementieren können Falls nicht: Es funktioniert! Und für diese Technik gibt es auch noch sinnvolle Einsatzzwecke. Wie dies gelingt und welche Einsatzzwecke es dafür gibt, erfahren Sie im vorliegenden Artikel.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1306_EreignisseAbgreifen.mdb.
Ereignisse implementieren
Bestimmte Prozeduren werden durch Ereignisse ausgelöst. Einige haben Sie in Access [basics] bereits kennengelernt – zum Beispiel das Ereignis Beim Klicken einer Schaltfläche oder Formularereignisse wie Beim öffnen, Beim Anzeigen, Beim Laden oder Beim Entladen eines Formulars.
Diese können Sie nutzen, indem Sie erstens für die Ereigniseigenschaft festlegen, dass das Ereignis eine Ereignisprozedur auslösen soll. Dies erledigen Sie durch Eintragen des Wertes [Ereignisprozedur] für die entsprechende Ereigniseigenschaft.
Zusätzlich benötigen Sie eine Ereignisprozedur, deren erste Zeile eine spezielle, vom Namen des Objekts (also des Formulars oder Steuerelements) und vom Ereignis abhängige Syntax aufweisen muss. Diese sieht etwa für das Laden eines Formulars wie folgt aus:
Private Sub Form_Load()
Die erste Zeile mancher Ereignisprozeduren enthält noch Parameter, die verschiedene Informationen liefern, die beim Durchführen der Prozedur hilfreich sein können. In manchen Fällen nehmen die Parameter auch Rückgabewerte entgegen, mit denen sich das weitere Verhalten von Access steuern lässt.
Einfache Beispiele
Die Konstellation aus Bild 1 liefert ein paar Beispiele für Ereignisprozeduren. Die Schaltfläche cmdForm2-Oeffnen löst die folgende Prozedur aus und öffnet damit das zweite Formular:
Bild 1: Formular 1 öffnet Formular 2, Formular 2 wird wieder geschlossen
Private Sub cmdForm2Oeffnen_Click() DoCmd.OpenForm "frm2" End Sub
Die Schaltfläche cmdForm2-Schliessen im zweiten Formular schließt das Formular wieder und gibt eine Meldung aus, dass Formular 2 geschlossen wird:
Private Sub cmdForm2Schliessen_Click() DoCmd.Close acForm, Me.Name MsgBox "Formular 2 wird geschlossen." End Sub
Formular 1 beim Schließen von Formular 2 informieren
Das ist alles kein Problem, wenn die Formulare unabhängig voneinander sind. Wenn Formular 1 aber nun Werte anzeigt (beispielsweise in einem Unterformular in der Datenblattansicht), die in Formular 2 bearbeitet werden, soll das Unterformular von Formular 1 nach dem Schließen von Formular 2 tunlichst aktualisiert werden, damit es den aktuellen Stand des bearbeiteten Datensatzes anzeigt.
Formular 1 muss also irgendwie informiert werden, wenn der Benutzer Formular 2 schließt. Dies können Sie auf folgende Art erledigen: Dabei öffnet Formular 1 das Formular 2 mit dem Wert acDialog für den Parameter WindowMode. Dies bewirkt, dass Access den aufrufenden Code erst fortsetzt, wenn Formular 2 den Fokus verliert. Dies kann durch zwei Ereignisse geschehen – wenn der Benutzer das Formular schließt oder wenn es nicht mehr sichtbar ist.
Schauen wir uns dies für die Beispielformulare frm1_1 und frm2_1 an. Die Schaltfläche in frm1_1 löst die Ereignisprozedur aus Listing 1 aus. Formular 2 wird dadurch als modaler Dialog geöffnet, die zweite Anweisung der Prozedur wird noch nicht ausgeführt.
Private Sub cmdForm2Oeffnen_Click() DoCmd.OpenForm "frm2_1", WindowMode:=acDialog MsgBox "Formular 2 ist geschlossen oder unsichtbar" End Sub
Listing 1: Formular modal öffnen
Erst wenn der Benutzer Formular 2 schließt, zeigt die Prozedur die Meldung mit dem Text Formular 2 ist geschlossen an.
Der Nachteil bei dieser Vorgehensweise ist, dass der Benutzer erst nach dem Schließen von Formular 2 wieder auf Formular 1 oder andere Formulare zugreifen kann. Das kann aber auch zum Vorteil werden – nämlich dann, wenn das aufrufende Formular die im aufgerufenen Formulare eingegebenen Daten oder Aktionen erwartet.
Ereignisse abgreifen
Es geht aber noch etwas eleganter: Beim folgenden Beispiel ruft die Schaltfläche in Formular 1 wiederum Formular 2 auf, diesmal allerdings nicht im modalen Modus. Als Beispiele dienen die Formulare frm1_2 und frm2_2.
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: