Wenn Sie Formulare und Steuerelemente programmieren wollen, müssen Sie wissen, wie Sie diese referenzieren. Nicht immer geschieht dies vom Klassenmodul des Formulars selbst aus – manchmal wollen Sie vielleicht auch von anderen Formularen auf die Steuer-elemente eines anderen Formulars zugreifen oder auch von einer VBA-Prozedur in eine Standardmodul. Dieser Artikel zeigt, wie Sie von verschiedenen Orten aus auf die Formulare zugreifen können. In weiteren Artikeln betrachten wir dann etwa den Zugriff auf die darin enthaltenen Steuer-elemente.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1803_FormsControlsVBARead.accdb.
Innerhalb des Formulars
Wenn Sie ein Formular erstellen und diesem ein Klassenmodul zuweisen, das sogenannte Code behind-Modul, dann können Sie von diesem aus auf andere Weise auf die Elemente des Formulars zugreifen als dies etwa von einem anderen Formular oder auch von einem Standardmodul aus möglich ist.
Hier steht nämlich das Me-Schlüsselwort für den Zugriff auf die Objektvariable des aktuellen Formulars zur Verfügung. Zur Verdeutlichung legen Sie einfach einmal ein neues Formular in einer leeren Datenbank an und speichern dieses unter dem Namen frmBeispiel.
Diesem fügen wir nun eine Schaltfläche hinzu, die wir mit der Beschriftung Name anzeigen und dem Namen cmdNameAnzeigen versehen und für die wir eine neue Ereignisprozedur für das Ereignis Beim Klicken anlegen (siehe Bild 1).
Bild 1: Hinzufügen einer Ereignisprozedur für eine Schaltfläche
Der Ereignisprozedur fügen wir nun eine Anweisung hinzu, die den Namen des Formulars in einem Meldungsfenster ausgeben soll:
Private Sub cmdNameAnzeigen_Click() MsgBox Me.Name End Sub
Das hier wie selbstverständlich verwendete Schlüsselwort Me ist eine sehr praktische Vereinfachung für den Zugriff auf die Elemente des Formulars, auf das sich das Klassenmodul bezieht.
Mit diesem Schlüsselwort können Sie auf alle Eigenschaften und Methoden des Formulars zugreifen und auch auf die darin angelegten Steuer-elemente – darauf gehen wir später ein.
Von außen
Wie aber greifen wir denn eigentlich von außen auf dieses Formular zu Dazu müssen wir erst einmal wissen, ob das Formular geöffnet ist. Greifen wir auf ein Formular zu, das nicht geöffnet ist, erhalten wir einen Laufzeitfehler.
Um dies auszuprobieren, fügen Sie der Beispieldatenbank ein Standardmodul namens mdlFormularzugriff hinzu. Hier legen Sie die folgende Prozedur an:
Public Sub NameAnzeigen() MsgBox Forms!frmBeispiel.Name End Sub
Die Prozedur erledigt nichts anders als die im Formular für die Schaltfläche cmdNameAnzeigen – Sie gibt ein Meldungsfenster mit dem Namen des Formulars aus.
Allerdings wissen wir, wenn wir auf die Schaltfläche des Formulars klicken, dass dieses logischerweise gerade geöffnet ist und brauchen dies nicht zu prüfen. Beim Zugriff von außen müssen wir dies jedoch vorher absichern. Rufen Sie die obige Prozedur auf, nachdem Sie das Formular geschlossen haben, löst dies den Fehler aus Bild 2 aus.
Bild 2: Fehler beim Zugriff auf ein nicht geöffnetes Formular
Prüfen, ob ein Formular geöffnet ist
Für die Prüfung, ob ein Formular geöffnet ist, hat sich die folgende Funktion etabliert. Sie erwartet den Namen des zu untersuchenden Formulars als Parameter. Sie nutzt die SysCmd-Funktion, der sie die Konstante acSysCmdGetObjectState, den Objekttyp undd den Namen des Formulars übergibt. Wenn das Ergebnis größer als 0 ist, ist das Formular geöffnet:
Public Function IstFormularGeoeffnet(strFormular As String) As Boolean IstFormularGeoeffnet = SysCmd( acSysCmdGetObjectState, acForm, strFormular) > 0 End Function
Mit dieser Funktion können wir bei Zugriff von außen leicht prüfen, ob das Formular geöffnet ist. Die obige Prozedur erweitern wir dabei wie folgt:
Public Sub NameAnzeigen() If IstFormularGeoeffnet("frmBeispiel") Then MsgBox Forms!frmBeispiel.Name Else MsgBox "Das Formular ist nicht geöffnet." End If End Sub
Wenn das Formular nicht geöffnet ist, weist die Prozedur per Meldungsfenster auf diesen Zustand hin.
Auf das aktuelle Formular zugreifen
In manchen Fällen möchten Sie auch einfach auf das aktuell geöffnete Formular zugreifen, um beispielsweise dessen Namen zu ermitteln. Hierfür stellt Microsoft eine Klasse mit verschiedenen Eigenschaften bereit. Diese heißt Screen und liefert beispielsweise über die Eigenschaft ActiveForm Zugriff auf das aktuell aktive Formular. Die folgende Prozedur gibt beispielsweise den Namen des aktuellen Formulars aus:
Public Sub AktuellesFormular() MsgBox Screen.ActiveForm.Name End Sub
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: