Home > Artikel > Ausgabe 1/2016 > Zusätzliche Steuerelemente mit MSForms

Zusätzliche Steuerelemente mit MSForms

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

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

Hinzufügen von ActiveX-Steuerelementen zu einem Formular über den Ribboneintrag Entwurf|Steuerelemente

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.

Die Steuerelemente der MSForms-Bibliothek Im ActiveX-Auswahldialog

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.

Wichtigste Vertreter der MSForms-Steuerelemente im Formular (Entwurf)

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󠷇\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.

Die MSForms-Bibliothek und ihre Steuerelemente 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")

Zur Laufzeit präsentiert sich das Formular dann wie in Bild 5. Wenden wir uns den wichtigsten Eigenschaften und der Programmierung der Steuerelemente zu.

Das Formular frmMSForms in der Formularansicht zur Laufzeit

Bild 5: Das Formular frmMSForms in der Formularansicht zur Laufzeit

Interessant ist, dass alle die Eigenschaft Value aufweisen, die den Wert des Elements zurückgibt oder ihn bestimmen kann. Der Datentyp unterscheidet sich dabei natürlich. Bei einer Textbox wäre ein String zuzuweisen, bei einer Checkbox ein Boolean-Wert. Sie müssen diesen Wert jedoch nicht zwingend per Code übergeben. Denn fast alle im Bild vereinten Steuerelemente, mit Ausnahme des Labels rechts unten und des MSForms-Image oben, sind datensensitiv! Sie erkennen das im Entwurf, wenn Sie ein Steuerelement markieren und im Eigenschaftenblatt den Reiter Daten inspizieren. So oben die Zeile Steuerelementinhalt existiert, ist eine Bindung an die Datenherkunft des Formulars möglich. Andreas, Rudolf kommt so durch die Bindung der Textbox an das Feld Adresse der Abfrage zustande, auf welcher das Formular basiert. Die Abfrage besteht übrigens aus diesem SQL-Ausdruck:

SELECT tblAdressen.ID,

     [Nachname] & ", " & [Vorname] &

     Chr(13) & Chr(10) &

     [Strasse] & Chr(13) & Chr(10) &

     [PLZ] & " " & [Ort]

     AS Adresse

FROM tblAdressen;

Die Adresse wird über die künstlichen Zeilenumbrüche so formatiert, wie es gemeinhin üblich ist.

MSForms Image

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!