|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| |
Zusammenfassung
Erfahren Sie, wie Sie auf Formulare sowie darin enthaltene Unterformulare zugreifen
Techniken
VBA, Formulare, Steuerelemente
Voraussetzungen
Access 2000 und höher
Beispieldateien
-
Shortlink
552
Zugriff auf Formulare
André Minhorst, Duisburg
Das Referenzieren von Formularen und Unterformularen ist einfach - wenn man den Dreh einmal raus hat. Auf dem Weg dahin hilft Ihnen dieser Beitrag, der den Zugriff auf Formulare von außen, von anderen Formularen aus, von Formularen auf Unterformulare, von außen auf Unterformulare und mehr erläutert. Nach der Lektüre sollten Sie damit keine Probleme mehr haben - und wenn doch, schauen Sie halt einfach nochmal rein.
Zugriff auf Formulare von außen
Wenn Sie von außen - also vom Direktfenster, von einem anderen Formular oder einer VBA-Routine auf ein Formular zugreifen möchten, setzt dies das Vorhandensein des in der Formularansicht oder Datenblattansicht geöffneten Formulars voraus. Der Zugriff erfolgt dann über die folgende Anweisung, hier für den Namen eines Formular namens frmArtikel:
Forms!frmFormular.Name
Für andere Eigenschaften wie etwa die Datensatzquelle setzen Sie hinter den Punkt die entsprechende Eigenschaft ein:
Forms!frmFormular.RecordSource
VBA-Eigenschaften ermitteln
Das Eigenschaftsfenster des Formularentwurfs hat die angenehme Eigenschaft, dass es direkt alle verfügbaren Eigenschaften mit Namen anzeigt. Wenn Sie von hier aus nach dem unter VBA verwendbaren englischen Eigenschaftsnamen suchen, können Sie einfach die Einfügemarke in die Eigenschaft im Eigenschaftsfenster platzieren und auf F1 klicken. Die Onlinehilfe zeigt dann die VBA-Variante der Eigenschaft an. Aber auch die Eigenschaften selbst geben Sie im Eigenschaftsfenster in der deutschen Fassung an, auch wenn im folgenden Beispiel scheinbar die englische Variante funktioniert. Wenn Sie nämlich etwa in einem Textfeld den Namen des Formulars ausgeben möchten, schreiben Sie in dessen Eigenschaft Steuerelementinhalt den folgenden Ausdruck:
=[Name]
Formularbezüge in Eigenschaftsfeldern
Die Eigenschaft Name ist ein Sonderfall, weil sie im Deutschen wie im Englischen gleich lautet. Bei allen anderen Eigenschaften verwenden Sie den englischen Begriffen entsprechende deutsche Ausdrücke. Der Bezug auf die Datenherkunft eines Formulars lautet unter VBA etwa so:
Forms!frmHF.Recordsource
In ein Eigenschaftsfeld müssen Sie hingegen den folgenden Ausdruck eintragen:
Formulare!frmHF!Datenherkunft
Wenn Sie hier unsicher sind, verwenden Sie den Ausdrucksgenerator, den Sie per Mausklick auf die neben dem Eigenschaftsfeld befindliche Schaltfläche mit den drei Punkten öffnen (s. Abb. 1).
Abb. 1: Der Ausdrucksgenerator hilft beim Zusammenstellen von Ausdrücken mit deutschen Bezeichnungen.
Zugriff auf eigene Eigenschaften des
Formulars
Wenn Sie von einem Formulars auf die Eigenschaften des gleichen Formulars zugreifen möchten, können Sie dies einfach über die Verwendung des Eigenschaftsnamens tun. Folgende Anweisung, die beim Öffnen des Formulars ausgelöst wird, würde den Namen ordnungsgemäß ausgeben:
Private Sub Form_Open(Cancel As Integer)
MsgBox Name
End Sub
Dies ist aber so nicht gebräuchlich. Um Verwechslungen zu vermeiden, fügt man als Bezug auf sich selbst das Objekt Me vorne an:
MsgBox Me.Name
Das Schlüsselwort Me ist dabei weniger ein Verweis auf das Formular selbst, sondern auf seine Instanz. Es gilt auch in Zusammenhang mit der Verwendung von Klassenmodulen ohne Formular. Sie referenzieren darüber immer die jeweilige Instanz des Objekts. Der Verweis auf die Klasse selbst kann auch über die folgende Variante hergestellt werden:
Form_frmF.Name
Form_frmF wäre dabei der Name des Klassenmoduls - Besonderheiten hierzu erfahren Sie weiter unten. Die nächste Variante referenziert das Formular über die Auflistung Forms, die alle aktuell geöffneten Formulare enthält:
Forms!frmFormular.Name
Zu bedenken ist, dass die Variante mit dem Schlüsselwort Me im Klassenmodul des Formulars selbst den anderen Varianten vorzuziehen ist. Der Grund ist einfach: Wenn Sie den Namen des Formulars ändern, brauchen Sie den Code nicht anzupassen, weil er sich immer auf das eigene Formular bezieht. Gleiches gilt für das Kopieren des Codes in ein anderes Formular: Hier funktionieren Bezüge über Me problemlos weiter.
Zugriff auf andere Formulare
Die beiden zuletzt genannten Varianten funktionieren von überall aus, aber nur unter bestimmten Voraussetzungen. Uneingeschränkt greifen sie nur, wenn das Formular aktuell geöffnet ist.
Debug.Print Forms!frmF.Name
würde beispielsweise den Fehler aus Abb. 2 hervorrufen. Anders sieht es mit folgendem Aufruf aus - ebenfalls im Direktfenster abgesetzt (? ist die Kurzfassung für Debug.Print, die jedoch nur im Direktfenster funktioniert):
Abb. 2: Dieser Fehler tritt auf, wenn man ein ungeöffnetes Formular über die Forms-Auflistung referenziert.
|