window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Ereignisse anderer Objekte nutzen

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).

Formular, das andere Formular aufruft und vor dem Schließen deren Werte einliest

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

Schreibe einen Kommentar