Home > Artikel > Ausgabe 5/2012 > Ereignisse in Formularen: Öffnen und Schließen

Ereignisse in Formularen: Öffnen und Schließen

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

Nachdem Sie im ersten Teil dieser Artikelreihe gelernt haben, wie Sie die Reihenfolge der auftretenden Ereignisse beim Öffnen und Schließen von Formularen samt Unterformular ermitteln, schauen wir uns in diesem Teil genauer an, was beim Öffnen eines Formulars geschieht und welche Aktionen Sie in den verschiedenen Ereignisprozeduren unterbringen können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1205_EreignisseInFormularen_2.mdb.

Ereignisse beim Öffnen eines Formulars

Schauen wir uns nun im Detail an, was beim Öffnen eines Formulars geschieht und was Sie mit den ausgelösten Prozeduren anfangen können.

Das Ereignis Beim Öffnen

Dieses Ereignis wird beim Öffnen eines Formulars als Erstes ausgelöst. Damit dies geschieht, stellen Sie den Wert der Ereigniseigenschaft Beim Öffnen auf den Wert [Ereignisprozedur] ein und klicken auf die Schaltfläche mit den drei Punkten, um die durch das Ereignis ausgelöste Ereignisprozedur anzulegen. Diese sieht zunächst so aus:

Private Sub Form_Open(Cancel As Integer)

End Sub

Es bietet einen Parameter namens Cancel, mit dem sich das Öffnen abbrechen lässt, und das ist einer der wesentlichen Unterschiede zum Ereignis Form_Load, das wir gleich vorstellen.

Das Ereignis Beim Laden

Dieses Ereignis wird nach dem Ereignis Form_Open ausgelöst. Der wesentliche Unterschied zwischen beiden Ereignissen ist, dass Sie das Öffnen des Formulars im Ereignis Beim Öffnen abbrechen können. Außerdem bietet das Form_Load-Ereignis die Möglichkeit, die angezeigten Daten bereits beim Laden per VBA-Code anzupassen.

Öffnungsvorgang abbrechen

Wenn Sie den Parameter Cancel auf den Wert True einstellen, wird das Formular gar nicht erst geöffnet – probieren Sie es aus:

Private Sub Form_Open(Cancel As Integer)

     Cancel = True

End Sub

Natürlich macht es keinen Sinn, ein Formular mit einer Prozedur auszustatten, die dieses sofort wieder schließt. Dafür sollte es schon eine entsprechende Bedingung geben – zum Beispiel, dass das Formular keine Daten enthält. Dies lässt sich wie folgt realisieren:

Private Sub Form_Open(Cancel As Integer)

     If Me.Recordset.EOF Then

         MsgBox "Das Formular enthält keine Daten."

         Cancel = True

     End If

End Sub

Das Recordset-Objekt ermöglicht den Zugriff auf die Daten des Formulars. Wenn die Eigenschaft EOF wahr ist, bedeutet dies, dass der Datensatzzeiger sich hinter dem letzten Datensatz befindet, was gleichbedeutend mit einer leeren Datenherkunft ist. In diesem Fall soll eine Meldung erscheinen und der Parameter Cancel auf den Wert True eingestellt werden, damit das Formular nach der Anzeige der Meldung gar nicht erst geöffnet wird.

Wie können Sie dies ausprobieren? Indem Sie das Formular mit der DoCmd.OpenForm-Methode öffnen und dabei eine WhereCondition übergeben, die garantiert für keinen Datensatz der Datenherkunft gilt. Ein passender Kandidat für eine solche Bedingung lautet 1=2. Setzen Sie die folgende Anweisung im Direktbereich des VBA-Editors ab:

DoCmd.OpenForm "frmOhneDaten", WhereCondition:="1=2"

Die Meldung erscheint wie erwartet, aber leider zieht der Aufruf auch noch einen Fehler nach sich (siehe Bild 1). Um diesen Fehler zu verhindern, müssen Sie die DoCmd.OpenForm-Methode in eine kleine Fehlerbehandlung integrieren. Diese sorgt dafür, dass im Falle des Fehlers 2501 keine Meldung angezeigt wird, sondern nur bei anderen Fehlercodes:

Fehler beim Abbruch des Öffnungsvorgangs

Bild 1: Fehler beim Abbruch des Öffnungsvorgangs

Public Sub FormularOeffnenAbbrechen()

     On Error Resume Next

     DoCmd.OpenForm "frmOhneDaten", WhereCondition:="1=2"

     Select Case Err.Number

         Case 0, 2501

         Case Else

             MsgBox "Fehler"

     End Select

     On Error GoTo 0

End Sub

Datenherkunft einstellen

Meistens ist die Tabelle oder Abfrage, welche die Daten für ein Formular liefert, bereits vor dem Öffnen bekannt und wird für die Eigenschaft Datenherkunft des Formulars eingestellt. Gegebenfalls geben Sie beim Öffnen mit Docmd.OpenForm noch eine WhereCondition oder einen Filter mit, um die Daten einzuschränken.

Es gibt jedoch auf Fälle, in denen Sie die Datenherkunft erst beim Öffnen des Formulars einstellen und somit die Eigenschaft Recordsource per VBA festlegen.

Nach den Angaben in der Onlinehilfe wird das Formular zwischen den beiden Ereignissen Form_Open und Form_Load mit Daten gefüllt, sodass aus Performancegründen ein Einstellen der Datenherkunft in der Ereignisprozedur Form_Open sinnvoller ist.

Das Gleiche gilt für die Eigenschaften Filter, FilterOn, OrderBy und OrderByOn, mit denen Sie einen Filter oder die Reihenfolge für die die anzuzeigenden Daten einstellen.

Standardwerte einstellen

Auch den Standardwert für ein an ein Feld der Datenherkunft gebundenes Steuerelement können Sie in den beiden Ereignisprozeduren Form_Open und Form_Load einstellen:

Private Sub Form_Load()

     Me.Controls("LieferantID").DefaultValue = 1

End Sub

Private Sub Form_Open(Cancel As Integer)

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!