Zur Entwicklung von Oberflächen für Ihre Datenbanken über Formulare stellt Access an sich ausreichend Steuerelemente zur Verfügung. In manchen Fällen sind jedoch speziellere Elemente gefragt, die man sich dann umständlich aus den vorhandenen zusammenbasteln und programmieren muss. Dabei gibt Access uns die Möglichkeit, seine Oberfläche über den Schatz an ActiveX-Steuerelementen zu erweitern. Die Steuerelemente von MSForms wären dafür ein Beispiel.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1601_MSFormsCtls.accdb
Die Microsoft-Forms-Bibliothek
Wer auch unter Excel entwickelt, der wird mit der MSForms–Bibliothek sicher schon Bekanntschaft gemacht haben. Für die Interaktion über Dialoge setzt man dort UserForms ein, auf denen man Steuerelemente auf ähnliche Weise unterbringen kann, wie in Access-Formularen. Für diese UserForms, ihre Steuerelemente und Programmierung ist die MSForms-Bibliothek zuständig. Sie besteht aus einer Sammlung von ActiveX-Steuerelementen, die grundsätzlich mit MS Office installiert werden. Infolgedessen müssen Sie sich über deren Vorhandensein und Installation, im Unterschied zu anderen ActiveX-Bibliotheken, keine Gedanken machen. MSForms kommt automatisch im Verein mit VBA, in dem es fest verankert ist.
Tatsächlich aber lassen sich die Steuerelemente nicht nur auf UserForms platzieren, sondern genauso gut auch direkt auf Access-Formularen oder -Berichten. Dazu öffnen Sie ein etwa ein Formular im Entwurfsmodul, aktivieren den Reiter Entwurf im Ribbon, klappen dessen Steuerelementebereich über den Button rechts unten auf, und klicken auf den Eintrag ActiveX-Steuerelemente (siehe Bild 1).
Bild 1: Hinzufügen von ActiveX-Steuerelementen zu einem Formular über den Ribboneintrag Entwurf|Steuerelemente
Damit öffnet sich ein Dialog zur Auswahl eines ActiveX-Steuerelements (Bild 2). Die Elemente der MSForms-Bibliothek beginnen alle mit dem Präfix Microsoft Forms. Markieren Sie dann etwa die Textbox, klicken auf OK, und haben damit das entsprechende Control im Formular.
Bild 2: Die Steuerelemente der MSForms-Bibliothek Im ActiveX-Auswahldialog
Eine Ansammlung der wichtigsten MSForms-Steuerelemente finden Sie im Formular frmMSForms der Beispieldatenbank, welches in Bild 3 im Entwurf zu sehen ist. Die Gestaltungsmöglichkeiten für die Steuerelemente sind im Vergleich zu den in Access eingebauten recht bescheiden und etwas altbacken, haben diese Elemente doch schon beinahe 20 Jahre auf dem Buckel. Wer hier keine größeren Ansprüche hat, den wird das nicht stören. Wie dem auch sei, die Eigenschaften der Elemente lassen sich über das Eigenschaftenblatt und Format regeln, aber auch spezieller über den Reiter Andere.
Bild 3: Wichtigste Vertreter der MSForms-Steuerelemente im Formular (Entwurf)
Kleine Erläuterung am Rande: Ein ActiveX-Steuerelement in einem Access-Formular besteht immer aus zwei Teilen. Der eine ist das eigentliche ActiveX-Steuerelement, welches auch im Entwurf seine korrekte Gestalt zeigt. Es liegt jedoch nicht direkt auf dem Formular, sondern auf einem Container-Steuerelement, welches Sie im Entwurf weder manuell hinzufügen, noch überhaupt zu Gesicht bekommen können. Im VBA-Objektkatalog ist dieses Container-Element ein Control des Typs CustomControl. Und über die Format-Seite des Eigenschaftenblatts können Sie dessen Formatierung einstellen. Geben Sie für die MSForms-Textbox etwa den Spezialeffekt Graviert an, so wirkt sich das tatsächlich auf den Container aus. Die Eigenschaften der Textbox hingegen finden sich alle unter dem Reiter Andere.
Leider sind hier nicht alle Eigenschaften verzeichnet, die einstellbar sind. Microsoft hat im Objektmodell der MSForms nur manche Eigenschaften als Published deklariert. So lässt sich etwa die Schriftart der Steuerelemente nie über die Eigenschaftenseite Andere festlegen. Das geht hier leider nur über VBA-Code. Um die Schriftgröße der MSForms-Textbox, welche im Formular den Namen ctlTextbox trägt, auf 10 einzustellen, verwenden Sie diese Zeile:
Me!ctlTextbox.FontSize = 10
Das klappt in den meisten Fällen, jedoch nicht immer. Denn FontSize ist eine Eigenschaft des MSForms-Steuerelements, während Me!ctlTextbox tatsächlich auf den Container, das CustomControl verweist.
Access schleift die Eigenschaft zwar gleichsam durch, doch besser ist es, direkt auf das ActiveX-Steuerelement Bezug zu nehmen. Das ist durch die Eigenschaft Object des CustomControls gegeben:
Me!ctlTextbox.Object.FontSize = 10
Möchten Sie hintereinander mehrere Eigenschaften per Code festlegen, so empfiehlt sich ein With-Block:
With Me!ctlTextbox.Object .FontName = "Calibri" .FontSize = 10 .FontBold = True End With
Welche Eigenschaften ein MSForms-Steuerelement beherbergt, ersehen Sie aus dem VBA-Objektkatalog. Bringen Sie diesen zur Ansicht und wählen im Kombinationsfeld oben links die Bibliothek MSForms aus. In der Liste links navigieren Sie zur Textbox, um auf der rechten Seite deren Methoden zu begutachten. Glücklicherweise hat Microsoft den Elementen eine Hilfedatei spendiert, die erstaunlicherweise noch immer funktioniert. Markieren Sie also eine Eigenschaft der Textbox im Objektkatalog und drücken F1, so öffnet sich die Hilfe dazu. Alles zu MSForms findet sich unter dem Zweig Microsoft Forms Referenz (Bild 4). Alternativ finden Sie eine CHM-Hilfedatei im Explorer unter dem Pfad C:\Program Files\Common Files\microsoft shared\VBA\VBA6\1031\fm20.chm. (Der Pfad ist unter Windows 64bit natürlich etwas anders.) Diese ist noch etwas übersichtlicher aufgebaut, als die Ausführungen in der Access-Hilfe.
Bild 4: Die MSForms-Bibliothek und ihre Steuerelemente in der Access-Hilfe
Das programmatische Setzen der Eigenschaften erledigen Sie am besten gleich beim öffnen des Formulars. In Listing 1 ruft die Ereignisprozedur Beim Laden des Formulars nacheinander die Formatierungsprozeduren auf. FormatButton etwa stellt die Schriftart ein und verabreicht der MSForms-Schaltfläche außerdem ein Bildchen, das über die Eigenschaft Picture gesetzt wird. Das Bild in Gestalt des Icons info.ico befindet sich parallel im Pfad zur Datenbankdatei und kann mit LoadPicture geladen werden. Wo das Bildchen auf dem Button angezeigt wird, lässt sich übrigens direkt über die Eigenschaftenseite Andere unter PicturePosition angeben. Hier existieren 13 Positionierungsmöglichkeiten. Im Entwurf kann das Aussehen des Buttons so leider nicht kontrolliert werden, es sein denn, Sie würden etwa diese Zeile im Direktfenster von VBA absetzen, während sich das Formular im Entwurf befindet:
Dim sPath As String Private Sub Form_Load() sPath = CurrentProject.Path FormatButton FormatTextbox FormatImage FormatToggle FormatCheckbox FormatListbox FormatCombo End Sub Private Sub FormatButton() With Me!ctlCmdButton.Object .FontName = "Arial" .FontSize = 10 .FontBold = True Set .Picture = LoadPicture(sPath & "\info.ico") End With End Sub Private Sub FormatTextbox() With Me!ctlTextBox.Object .FontSize = 11 .FontName = "Calibri" End With End Sub
Listing 1: Die Formatierung der einzelnen MSForms-Steuerelemente geschieht aus dem Load-Ereignis des Formulars heraus
Set Forms!frmMSForms!ctlCmtButton.Picture = _
LoadPicture(sPath & "\info.ico")
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: