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