Prüfen, ob ein Formular geöffnet ist

Unter Access kommt es immer wieder vor, dass Sie prüfen wollen, ob ein Formular geöffnet ist – beispielsweise, wenn Sie Daten aus diesem Formular auslesen wollen. Dieser Artikel zeigt die VBA-Funktion, mit der Sie dies prüfen können.

In vielen Fällen ist es interessant, ob ein Formular geöffnet ist und in welcher Ansicht es sich derzeit befindet.

Das kann zum Beispiel der Fall sein, wenn in einem anderen Formular Daten bearbeitet werden, die in dem betroffenen Formular ebenfalls angezeigt werden und dort gegebenenfalls aktualisiert werden müssen. Das kann natürlich nur passieren, wenn der aktuelle Zustand des Formulars bekannt ist.

Den Zustand ermitteln Sie in zwei Stufen:

  • Ist das Objekt überhaupt geöffnet
  • Falls ja, in welcher Ansicht wird es gerade angezeigt

Für die Ermittlung des genauen Zustandes verwenden Sie zwei Funktionen beziehungsweise Eigenschaften.

Die Funktion SysCmd

Mit der ersten Funktion, SysCmd, lassen sich neben der Information, ob das angegebene Objekt geöffnet ist, noch einige weitere Systeminformationen abfragen.

Um die unterschiedlichen Möglichkeiten zu verwenden, geben Sie den jeweils gewünschten Wert für den ersten Parameter der Funktion ein. Im VBA-Editor werden die für den ersten Parameter möglichen Werte angezeigt. In unseren Fall handelt es sich um den Parameter acSysCmdGetObjectState.

Als weitere Parameter erwartet die Funktion den Objekttyp (hier acForm) sowie den Namen des Objektes.

Die Funktion gibt folgende Werte zurück:

  • 0: Objekt ist geschlossen
  • 1: Objekt ist geöffnet

Die Eigenschaft CurrentView

Hat sich das Formular als geöffnet herausgestellt, können Sie gefahrlos mit der Eigenschaft CurrentView des jeweiligen Formulars ermitteln, in welchem Zustand es sich gerade befindet.

Es gibt folgende drei Zustände:

  • 0: Entwurfsansicht
  • 1: Formularansicht
  • 2: Datenblattansicht

Die anderen Ansichten wie die Pivot-Ansicht sollen hier außer Acht gelassen werden.

Alles zusammen können Sie in eine Wrapperfunktion packen, wie folgender Quellcode zeigt:

Function IstFormularGeoeffnet(strFormularname As                                       String) As Boolean
    If SysCmd(acSysCmdGetObjectState, acForm,                               strFormularname) <> 0 Then
        If Forms(strFormularname).CurrentView <> 0 Then
            IstFormularGeoeffnet = True
        End If
    End If
End Function

Im Direktfenster prüfen Sie dann beispielsweise so, ob ein Formular geöffnet ist:

Debug.Print IstFormularGeoeffnet("frmBeispiel")
True

Schreibe einen Kommentar