Dynamische Layouts

Was bin ich?

Um also die notwendigen Informationen ermitteln zu können, braucht es ganz andere Objekte, wie in Listing 3 zu sehen ist:

Function ObjCurrent() As Object
On Error GoTo Mist
Select Case Application.CurrentObjectType
Case acTable
Set ObjCurrent = Screen.ActiveDatasheet
Case acForm
Set ObjCurrent = Screen.ActiveForm
Case Else
End Select
Exit Function
Mist:
Set ObjCurrent = Nothing
End Function

Tatsächlich können Sie mit Application.CurrentObjectType recht zuverlässig den gewünschten Typ des geöffneten Fensters ermitteln.

Ja, Sie haben richtig gelesen: nur „recht“ zuverlässig! Wenn gerade das Datenbankfenster mit einem markierten Formular geöffnet ist, ermittelt diese Eigenschaft ein Formular. Aber Screen.ActiveForm scheitert direkt anschließend mit einem Laufzeitfehler, weil es eben doch keines ist.

Daher enthält die Funktion ObjCurrent die Fehlerbehandlung und wird explizit auf Nothing gesetzt, wenn es weder Formular noch Tabelle ist.

Nun ist damit zwar diese erste Klippe umschifft, aber fragen Sie mich bitte nicht, warum CurrentObjectType überhaupt eine Eigenschaft des Application-Objekts ist. Schließlich gibt es für Bildschirm-Objekte und deren Eigenschaften ja genau das Screen-Objekt.

Immerhin gibt es dazu wenigstens noch die CurrentObjectName-Eigenschaft, die auch den passenden Namen liefert. Na ja, außer wiederum im Datenbankfenster, denn da gibt es lediglich den Namen des markierten Objekts zurück.