Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Normalerweise implementieren Sie Ereignisse immer in dem Klassenmodul des Objekts, durch das sie ausgelöst werden. Beispiele sind „Beim Laden“ oder „Beim Anzeigen“ eines Formulars oder auch „Beim Klicken“ einer Schaltfläche. Aber wussten Sie, dass Sie auch von anderen Klassenmodulen aus die Ereignisse von externen Objekten wie Formularen oder Steuerelementen implementieren können Dieser Artikel zeigt, wie das gelingt und welche Vorteile Sie dadurch erlangen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1611_EreignisseAndererObjekteNutzen.accdb.
Fremde Ereignisse implementieren
Die grundlegende Technik zeigen wir an einem einfachen Beispiel. Dabei wollen wir ein Formular öffnen, die Eingabe des Benutzers abwarten und dann vor demSchließen die eingegebenen Daten im aufrufenden Formular einlesen. üblicherweise würden Sie von einem Formular aus dazu die folgende Anweisung nutzen:
DoCmd.OpenForm "frmQuelle", WindowMode:=acDialog
Dies hält den Code der aufrufenden Prozedur an. Sie würden das aufgerufene Formular dann beim Klick auf die Schaltfläche OK mit der folgenden Anweisung unsichtbar machen:
Me.Visible = False
Die aufrufende Prozedur würde dies dann als Beenden des Dialog interpretieren, prüfen, ob das Formular zwar unsichtbar, aber noch geöffnet ist, und die gewünschten Daten auslesen, bevor sie das Formular endgültig schließt:
DoCmd.Close acForm, "frmQuelle"
Zu dieser Vorgehensweise gibt es eine elegante Alternative, die es nicht erfordert, das aufgerufene Formular erst noch unsichtbar zu schalten und dann im aufrufenden Formular zu prüfen, ob dieses überhaupt noch vorhanden ist.
Beispielformular
Wir wollen uns diese beiden Vorgehensweisen im Vergleich anschauen. Dazu legen wir ein Formular namens frmZiel an, welches zwei Schaltflächen zum öffnen zweier Formulare mit jeweils einer der beiden Methoden enthält. Außerdem besitzt dieses Formular zwei Textfelder, in welche die in die geöffneten Formulare eingegebenen Texte beim Schließen übertragen werden sollen (siehe Bild 1).
Bild 1: Formular, das andere Formular aufruft und vor dem Schließen deren Werte einliest
Methode 1: öffnen mit DoCmd.OpenForm
Die erste Schaltfläche namens cmdOpenForm verwendet die folgende Prozedur, um das Formular frmQuelle1 mit der DoCmd.OpenForm-Methode als modalen Dialog zu öffnen:
Private Sub cmdOpenForm_Click() DoCmd.OpenForm "frmQuelle1", WindowMode:=acDialog If IstFormularGeoeffnet("frmQuelle1") Then Me!txtZiel1 = Forms!frmQuelle1!txtEingabe DoCmd.Close acForm, "frmQuelle1" End If End Sub
Nach dem öffnen gibt der Benutzer einen Text in das einzige Textfeld dieses Formulars ein und klickt auf die Schaltfläche OK, um das Formular wieder zu schließen. Dies lässt die aufrufende Prozedur weiterlaufen, die dann mit der Hilfsfunktion IstFormularGeoeffnet aus dem Modul mdlTools prüft, ob das geöffnete Formular überhaupt noch geöffnet ist. Falls ja, wurde der modale Modus durch Setzen der Eigenschaft Visible auf den Wert True aufgehoben.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo