Home > Artikel > Ausgabe 10/2011 > Formulare und Steuerelemente referenzieren

Formulare und Steuerelemente referenzieren

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

Je mehr Sie VBA zur Steuerung von Formularen und Steuerelementen einsetzen, desto öfter greifen Sie dabei per Code auf die Inhalte oder Eigenschaften dieser Elemente zu – beispielsweise, um den Wert eines Feldes auszulesen oder einen Eintrag eines Kombinationsfeldes auszuwählen. Dieser Artikel liefert eine Übersicht, wie Sie von verschiedenen Stellen aus Formulare und Steuerelemente referenzieren.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1110_FormulareReferenzieren.mdb.

Global referenzieren

Wir beginnen mit den Verweisen, die Sie von beliebigen Stellen aus nutzen können. Damit ist das Testen für den Anfang am einfachsten: Sie können die folgenden Anweisungen einfach in das Direktfenster des VBA-Editors eingeben, dass Sie mit Strg + G sichtbar machen.

Beginnen wir mit dem nackten Formular. Ein Formular referenzieren Sie mit einem Verweis auf ein Element der Forms-Auflistung.

Wenn Sie beispielsweise den Namen eines Formulars ermitteln möchten, können Sie die folgende Anweisung absetzen:

Debug.Print Forms.Item("frmBeispiel").Name

Kürzer und gebräuchlicher sind jedoch diese Versionen (siehe Bild 1):

Referenzieren eines Formulars

Bild 1: Referenzieren eines Formulars

Debug.Print Forms("frmBeispiel").Name

Debug.Print Forms!frmBeispiel.Name

Mit der Ausrufezeichen-Syntax greifen Sie auf alle Elemente von Auflistungen zu, die benutzerdefiniert sind, die Sie also selbst erstellt haben. Das gilt im Folgenden auch für Steuerelemente.

Wenn das Formular gerade das einzige geöffnete Formular ist, können Sie auch diese Syntax nutzen:

Debug.Print Forms(0).Name

Beachten Sie, dass dies immer funktioniert, wenn das betroffene Formular geöffnet ist – egal, in welcher Ansicht. Sie können also auch Eigenschaften von Formularen in der Entwurfsansicht über diese Anweisung ausgeben.

Beispiel: Filter

Sie können so von außen, also vom Direktfenster oder auch von einem anderen Formular aus, Eigenschaften lesen und einstellen. Wenn Sie beispielsweise einen Filter für ein Formular festlegen möchten, verwenden Sie diese beiden Anweisungen:

Forms!frmBeispiel.Filter = "Artikelname = 'Chang'"

Forms!frmBeispiel.FilterOn = True

Um den Filter zu deaktivieren, stellen Sie die Eigenschaft Filter auf den ursprünglichen Wert ein, also eine leere Zeichenkette:

Forms!frmBeispiel.Filter = ""

FilterOn wird dabei automatisch auf False eingestellt, was sich leicht prüfen lässt:

  Forms!frmBeispiel.FilterOn

Falsch

Referenz speichern

Wenn Sie wie im Beispiel oben mehrfach auf ein referenziertes Objekt zugreifen, können Sie die Referenz auch in einer Variablen des entsprechenden Objekttyps speichern und auf die Variable zugreifen, statt immer wieder neu zu referenzieren. Für ein Formular deklarieren Sie die Variable wie folgt:

Dim frm As Form

Sobald Sie mit Variablen arbeiten, fügen Sie die Anweisungen praktischerweise in eine Prozedur ein, die Sie wie in folgendem Beispiel in einem Standardmodul anlegen (mdlFormReferenzen):

Public Sub FormReferenz()

     Dim frm As Form

     Set frm = Forms!frmBeispiel

     frm.Filter = "Artikelname = 'Chang'"

     frm.FilterOn = True

End Sub

Sich selbst referenzieren

Wenn Sie innerhalb des Klassenmoduls eines Formulars auf Formular-Eigenschaften zugreifen möchten, können Sie dies ebenfalls über die oben vorgestellten Referenzierungen durchführen.

Die Schaltfläche cmdNameAusgeben löst bei Mausklick eine Prozedur aus, die den Namen des Formulars frmBeispiel ausgibt:

Private Sub cmdNameAusgeben_Click()

     MsgBox Forms!frmBeispiel.Name

End Sub

Für den Zugriff auf ein Formular-Objekt innerhalb des Klassenmoduls des Formulars gibt es jedoch eine Vereinfachung.

Statt Forms! verwenden Sie einfach das Schlüsselwort Me. Die obige Prozedur könnte also auch so aussehen:

Private Sub cmdNameAusgeben_Click()

     MsgBox Me.Name

End Sub

Diese Schreibweise ist nicht nur kürzer, sondern hat noch einen weiteren wichtigen Vorteil gegenüber der absoluten Referenzierung des Formulars über den Namen: Sie können den Namen des Formulars einfach ändern, das Schlüsselwort Me bezieht sich immer auf das Formular selbst.

Noch besser: Sie können Code, der das Formular mit Me referenziert, problemlos in die Klassenmodule anderer Formulare übertragen. Sie wirken sich dann in gleicher Weise auf das neue Formular aus. Manchmal ist dies natürlich nicht gewünscht: Wenn Sie eine Schaltfläche zum Filtern eines Formulars auf ein anderes Formular verschieben, aber immer noch das Ursprungsformular filtern möchten, müssen Sie Me wieder in Forms! ändern.

Beispiel: Formular schließen

Ein oft verwendetes Beispiel für den Bezug eines Formulars auf sich selbst ist das Schließen mit einer OK-Schaltfläche. Die Ereignisprozedur Beim Klicken der Schaltfläche cmdOK des Formulars frmBeispiel versehen Sie dazu mit folgendem Code:

Private Sub cmdOK_Click()

     DoCmd.Close acForm, Me.Name

End Sub

Unterformulare referenzieren

Viele Entwickler tun sich beim Zugriff auf Daten in Unterformularen schwer. Dabei gibt es gar nicht so viel zu beachten – das Unterformular ist ein ganz normales Formular, dass allerdings nicht über die Forms-Auflistung erreichbar ist, sondern über das Unterformular-Steuerelement, in dem es sich befindet.

Die folgenden Beispiele beziehen sich auf das Formular frmKategorien, in dem sich ein Unterformular-Steuerelement namens sfm befindet, welches das Formular sfmArtikel anzeigt (siehe Bild 2). Wenn Sie ein Formular per Drag and Drop aus dem Datenbankfenster oder dem Navigationsbereich als Unterformular in ein anderes Formular einfügen, stellt Access den Namen des Unterformular-Steuerelements normalerweise automatisch auf den Namen des als Unterformular verwendeten Formulars ein. Um Missverständnisse zu vermeiden, haben wir den Namen des Unterformular-Steuerelements von sfm­Artikel in sfm geändert (sofern Sie ohnehin nur ein Unterformular im Formular verwenden – was fast immer der Fall ist –, ist dies völlig in Ordnung).

Referenzieren eines Unterformulars

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!