Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2006.

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'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie alternative Formulare und Steuerelemente kennen.

Techniken

Formulare, VBA

Voraussetzungen

Access 97 und höher

Dynamische Steuerelemente

Sascha Trowitzsch, Berlin

Der Access-Entwickler sucht ständig nach neuen Mitteln, die Oberfläche seiner Anwendungen ansprechender und funktioneller zu gestalten. ActiveX-Steuerelemente zum Nachrüsten gibt es wie Sand am Meer, doch bringen diese meist Probleme bei der Weitergabe mit sich. Aber warum in die Ferne schweifen? Die MSForms-Library bringt eine ganze Reihe von Steuerelementen mit - und ist quasi Bestandteil von Access. Und das Beste: Diese Steuerelemente lassen sich sogar zur Laufzeit anlegen!

Access im Unternehmen hat schon in anderen Beiträgen auf die begrenzte Anzahl von Steuerelementen und deren Möglichkeiten in Access hingewiesen und Alternativen wie das TreeView, das ListView oder grafische Schaltflächen vorgestellt. Und das ist nur die Spitze des Eisbergs: Kommerzielle Steuerelemente und passende Eigenentwicklungen für alle möglichen Einsatzzwecke gibt es zuhauf. Das Problem ist die Weitergabe von Anwendungen, die solche Steuerelemente verwenden: Man handelt sich mit solchen Fremdsteuerelementen häufig Installations- oder Verweisprobleme ein. Dabei findet man in der Microsoft Forms Library eine Fundgrube von Steuerelementen vor, die mit jeder Access-Version inklusive der Runtime automatisch mitinstalliert werden. Auf den folgenden Seiten lernen Sie die Steuerelemente dieser Library kennen und erfahren, wie Sie diese unter Access einsetzen.

UserForms in Access

Unter Word und Excel sind sie gang und gäbe: Die UserForms der MSForms-Library (fm20.dll). Sie werden dort meist für benutzerdefinierte Dialoge eingesetzt. Im VBA-Projekt eines Word-Dokuments oder einer Excel-Arbeitsmappe lassen sie sich über den Menübefehl Einfügen/UserForm des VBA-Editors in das Projekt integrieren und können dann unter Zuhilfenahme des Fensters Werkzeugsammlung mit Steuerelementen versehen werden.

In Access-Datenbanken hingegen findet man nur sehr selten solche UserForms. Und das hat auch einen Grund: Der Menübefehl Einfügen/UserForm steht aus unerfindlichen Gründen im VBA-Editor von Access standardmäßig nicht zur Verfügung. Doch das lässt sich leicht ändern, wenn Sie die Menüleiste modifizieren: Dazu wählen Sie einfach den Eintrag Anpassen aus dem Kontextmenü der Menüleiste aus und fügen dem Menü Einfügen wie in
Abb. 1 den Eintrag UserForm hinzu. Ein Klick auf diesen Eintrag erzeugt dann ein neues UserForm und zeigt dessen Entwurf im Code-Bereich des VBA-Editors an.

Abb. 1: UserForm-Eintrag zur Menüleiste hinzufügen

Ein UserForm ist genauso ein Formular wie das Access-eigene. Allerdings ist es kein Child-Fenster der MDI-Umgebung, sondern ein eigenständiges Fenster, das mit einem als modaler Dialog geöffneten Access-Formular verwandt ist. Steuerelemente fügen Sie ihm über eine eigene Werkzeugsammlung hinzu, die sichtbar wird, wenn die UserForm im Entwurf den Fokus hat.

Abb. 2: UserForms im Projekt-Explorer

Sollte diese Toolbox nicht angezeigt werden, aktivieren Sie diese mit dem Menüeintrag Ansicht/Werkzeugsammlung des VBA-Editors. Im Projekt-Explorer finden Sie das UserForm in der erst jetzt sichtbaren Kategorie Formulare (s. Abb. 2). Diese Bezeichnung mag etwas irreführend sein, befinden sich doch die Access-Formulare in der Kategorie Microsoft Access Klassenobjekte.

Die UserForms sind im Objektmodell auch nicht Teil der Forms-Auflistung von Access, sondern haben eine eigene Auflistung: VBA.UserForms (Typ Object).

Haben Sie ein UserForm im Entwurf geöffnet, dann lässt es sich über den Ausführen-Pfeil der Menüleiste im Runtime-Modus öffnen. Mit einem Doppelklick auf eines der enthaltenen Steuerlemente oder das UserForm selbst gelangen Sie in dessen VBA-Code. Alternativ klicken Sie mit der rechten Maustaste im Projekt-Explorer auf den passenden Eintrag und wählen aus dem Kontextmenü den Eintrag Code anzeigen aus.

Pro UserForms

Warum und wann sollte man nun UserForms in Access-Datenbanken verwenden? Ein Anwendungsfall sind kleine Dialoge und Meldungsfenster, für die ein Access-Formular eigentlich überdimensioniert ist. Ein UserForm ist spart viele Ressourcen, weil es keine Funktionalität zur Datenbindung enthält.

Ein anderer Grund sind die MSForms-Steuerelemente der Werkzeugsammlung, die teilweise über mehr Einstellmöglichkeiten verfügen (vor allem grafische) als die analogen Access-Steuerelemente und manchmal auch leichter zu programmieren sind.

Beispiele sind die Listbox, die Combobox, das Multipage-Element (Registerkarten) und das Image-Steuerelement. Den SpinButton oder die Scrollbar gibt es in Access erst gar nicht.

Eingebettete ActiveX-Steuerelemente funktionieren in UserForms besser als in Access-Formularen - dort verhalten Sie sich oft unerwartet oder sind gar nicht zu gebrauchen.

Die in Abb. 3 dargestellte Werkzeugsammlung enthält übrigens noch die benutzerdefinierten Reiter "ActiveX" und "Neue Seite". Wie Sie die Sammlung um neue Reiter oder Steuerelemente erweitern können, erläutert die Visual Basic-Hilfe unter Microsoft Forms-Referenz/Übersicht zum Entwurf.

Abb. 3: Werkzeugsammlung der MSForms-Steuerelemente

Wie Sie weiter unten sehen werden, lassen sich MSForms-Steuerelemente genauso gut in ein Access-Formular einbauen. Es ist allerdings einfacher, deren Eigenschaften über das Eigenschaftsfenster des VBA-Editors einzustellen, wenn sie in ein UserForm integriert sind.

Schließlich gibt es noch einen weiteren Grund für den Einsatz von UserForms: Sie können darin zur Laufzeit Steuerelemente erzeugen.

In Access-Formularen ist das nicht möglich, ohne diese in der Entwurfsansicht anzuzeigen, was in einer professionellen Anwendung nicht passieren sollte.

Hier behilft man sich oft mit einem vorher im Entwurf angelegten "Vorrat" von Steuerelementen, die zur Laufzeit sichtbar oder unsichtbar geschaltet werden. Weiter unten erfahren Sie, wie Sie MSForms-Steuerelemente zur Laufzeit erzeugen.

Contra UserForms

Was spricht gegen den Einsatz von UserForms? Weder UserForms noch die Steuerelemente der MSForms-Bibliothek lassen sich so einfach wie die in Access eingebauten Formulare oder Steuerelemente an eine Datenherkunft binden.

Sie müssen grundsätzlich per VBA und Recordsets mit Daten aus Tabellen oder Abfragen gefüllt werden, was sie in dieser Hinsicht kompliziert und unflexibel macht.

UserForms per VBA aufrufen und steuern

Dass Sie ein entworfenes UserForm im VBA-Editor mit dem "Ausführen"-Pfeil öffnen können, wissen Sie bereits. Dem Benutzer einer fertigen Anwendung können Sie das natürlich nicht zumuten - dort müssen Sie Menüeinträge oder Schaltflächen zum Öffnen von Elementen der Benutzerumgebung bereitstellen, die den notwendigen Code ausführen. Access-Formulare öffnet man in VBA mit dieser DoCmd-Methode:

DoCmd.OpenForm "frmXY"

Für UserForms existiert keine analoge Anweisung, aber es gibt drei alternative Möglichkeiten. Sie können eine neue Instanz der entsprechenden UserForm-Klasse instanzieren und sie anschließend mit der Methode Show anzeigen:

Dim oForm As Object

Set oForm = New frmUserForm1

oForm.Caption = "Ein Titel"

oForm.Show

Auf ähnliche Weise lässt sich auch die Load-Anweisung von VBA verwenden:

Load frmUserForm1

frmUserForm1.Show

Beide Lösungen haben aber den Nachteil, dass Sie den Namen des zu öffnenden Elements nicht per Variable übergeben können, wie es bei der DoCmd.OpenForm-Methode von Access möglich ist. Die trickreiche dritte Lösung gestattet aber auch dies:

Dim sName As String

sName ="frmUserForm1"

VBA.UserForms.Add(sName).Show vbModal

Die im Objektkatalog vorhandene, aber versteckte Methode Add der UserForms-Auflistung gibt eine neue Instanz des in sName angegebenen UserForms zurück.

Im Code-Beispiel ist die Methode Show noch mit dem Parameter vbModal versehen. Das bewirkt, dass das UserForm als modaler Dialog geöffnet wird, was die Ausführung des Codes an dieser Stelle anhält.

Das Schließen eines UserForms erledigt die Unload-Methode von VBA:

Unload frmUserForm1

Auch hier haben wir wieder den Nachteil, dass man die Instanz des Formulars nicht per String-Variable übergeben kann. Leider kennt das UserForms-Objekt auch kein Pendant zu Add wie etwa die von anderen Objekten bekannte Remove-Methode. Um dennoch das Entladen eines UserForms per Variable zu ermöglichen, ist ein Umweg über die kleine Routine aus Quellcode 1 nötig.

Quellcode 1: Namentlich benanntes UserForm schließen

Sub UnloadUserForm(sName As String)

    Dim i As Long

    

    For i = 0 To VBA.UserForms.Count

        If UserForms.Item(i).Name = sName Then

            Unload UserForms.Item(i)

            Exit For

        End If

    Next i

End Sub

Sie finden diese und die Prozedur zum Öffnen eines UserForms im Modul mdlMSForms der Beispieldatenbank.

MSForms-Steuerelemente in Access-Formularen

Die Steuerelemente der MSForms-Library sind fast ausschließlich ActiveX-Komponenten. Als solche können Sie diese über den Menübefehl Einfügen/ActiveX-Steuerelement... in die Entwurfsansicht eines Formulars oder Berichts eingefügen. Wenn Sie diesen Menübefehl aufrufen, finden Sie die MSForms-Steuerelemente in der Liste der ActiveX-Komponenten unter Microsoft Forms 2.0 .... Die Beispieldatenbank enthält ein Formular namens frmAllControls, das alle derart verfügbaren Steuerelemente enthält. Sehen Sie es sich an, um eine Übersicht zu erhalten.

Gelegentlich hört man, dass es Probleme mit diesen Steuerelementen beim Einsatz in Access-Formularen gebe. Ich selbst konnte derlei noch in keiner Access-Version feststellen oder reproduzieren.

Eigenschaften der Steuerelemente einstellen

Die Eigenschaften der Steuerelemente lassen sich nur recht unkomfortabel einstellen. Im Eigenschaftsfenster von Access findet sich auf der Registerseite Andere jeweils nur eine Auswahl der tatsächlich vorhandenen Eigenschaften. Leider fördert auch ein Klick auf die ...-Schaltfläche der Eigenschaft Benutzerdefiniert keine weiteren Eigenschaften zutage, wie man dies von anderen ActiveX-Steuerelementen gewohnt ist.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.