{"id":55000376,"date":"2006-08-01T00:00:00","date_gmt":"2021-02-11T21:04:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=376"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dynamische_Steuerelemente","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/","title":{"rendered":"Dynamische Steuerelemente"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<h3>Zusammenfassung<\/h3>\n<p>Lernen Sie alternative Formulare und Steuerelemente kennen.<\/p>\n<h3>Techniken<\/h3>\n<p>Formulare, VBA<\/p>\n<h3>Voraussetzungen<\/h3>\n<p>Access 97 und h&ouml;her<\/p>\n<h3><\/h3>\n<p><b>Sascha Trowitzsch, Berlin<\/b><\/p>\n<p><b>Der Access-Entwickler sucht st&auml;ndig nach neuen Mitteln, die Oberfl&auml;che seiner Anwendungen ansprechender und funktioneller zu gestalten. ActiveX-Steuerelemente zum Nachr&uuml;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 &#8211; und ist quasi Bestandteil von Access. Und das Beste: Diese Steuerelemente lassen sich sogar zur Laufzeit anlegen! <\/b><\/p>\n<p>Access im Unternehmen hat schon in anderen Beitr&auml;gen auf die begrenzte Anzahl von Steuerelementen und deren M&ouml;glichkeiten in Access hingewiesen und Alternativen wie das TreeView, das ListView oder grafische Schaltfl&auml;chen vorgestellt. Und das ist nur die Spitze des Eisbergs: Kommerzielle Steuerelemente und passende Eigenentwicklungen f&uuml;r alle m&ouml;glichen Einsatzzwecke gibt es zuhauf. Das Problem ist die Weitergabe von Anwendungen, die solche Steuerelemente verwenden: Man handelt sich mit solchen Fremdsteuerelementen h&auml;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.<\/p>\n<p>Unter Word und Excel sind sie gang und g&auml;be: Die UserForms der MSForms-Library (fm20.dll). Sie werden dort meist f&uuml;r benutzerdefinierte Dialoge eingesetzt. Im VBA-Projekt eines Word-Dokuments oder einer Excel-Arbeitsmappe lassen sie sich &uuml;ber den Men&uuml;befehl Einf&uuml;gen\/UserForm des VBA-Editors in das Projekt integrieren und k&ouml;nnen dann unter Zuhilfenahme des Fensters Werkzeugsammlung mit Steuerelementen versehen werden. <\/p>\n<p>In Access-Datenbanken hingegen findet man nur sehr selten solche UserForms. Und das hat auch einen Grund: Der Men&uuml;befehl Einf&uuml;gen\/UserForm steht aus unerfindlichen Gr&uuml;nden im VBA-Editor von Access standardm&auml;&szlig;ig nicht zur Verf&uuml;gung. Doch das l&auml;sst sich leicht &auml;ndern, wenn Sie die Men&uuml;leiste modifizieren: Dazu w&auml;hlen Sie einfach den Eintrag Anpassen aus dem Kontextmen&uuml; der Men&uuml;leiste aus und f&uuml;gen dem Men&uuml; Einf&uuml;gen wie in Bild 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.<\/p>\n<p><IMG height=\"497\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic001.png\" width=\"368\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  UserForm-Eintrag zur Men&uuml;leiste hinzuf&uuml;gen<\/span><\/b><\/p>\n<p>Ein UserForm ist genauso ein Formular wie das Access-eigene. Allerdings ist es kein Child-Fenster der MDI-Umgebung, sondern ein eigenst&auml;ndiges Fenster, das mit einem als modaler Dialog ge&ouml;ffneten Access-Formular verwandt ist. Steuerelemente f&uuml;gen Sie ihm &uuml;ber eine eigene Werkzeugsammlung hinzu, die sichtbar wird, wenn die UserForm im Entwurf den Fokus hat.<\/p>\n<p><IMG height=\"223\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic002.png\" width=\"232\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  UserForms im Projekt-Explorer<\/span><\/b><\/p>\n<p>Sollte diese Toolbox nicht angezeigt werden, aktivieren Sie diese mit dem Men&uuml;eintrag Ansicht\/Werkzeugsammlung des VBA-Editors. Im Projekt-Explorer finden Sie das UserForm in der erst jetzt sichtbaren Kategorie Formulare (siehe Bild 2). Diese Bezeichnung mag etwas irref&uuml;hrend sein, befinden sich doch die Access-Formulare in der Kategorie Microsoft Access Klassenobjekte.<\/p>\n<p>Die UserForms sind im Objektmodell auch nicht Teil der Forms-Auflistung von Access, sondern haben eine eigene Auflistung: VBA.UserForms (Typ Object).<\/p>\n<p>Haben Sie ein UserForm im Entwurf ge&ouml;ffnet, dann l&auml;sst es sich &uuml;ber den Ausf&uuml;hren-Pfeil der Men&uuml;leiste im Runtime-Modus &ouml;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&auml;hlen aus dem Kontextmen&uuml; den Eintrag Code anzeigen aus.<\/p>\n<h3>Pro UserForms<\/h3>\n<p>Warum und wann sollte man nun UserForms in Access-Datenbanken verwenden Ein Anwendungsfall sind kleine Dialoge und Meldungsfenster, f&uuml;r die ein Access-Formular eigentlich &uuml;berdimensioniert ist. Ein UserForm ist spart viele Ressourcen, weil es keine Funktionalit&auml;t zur Datenbindung enth&auml;lt.<\/p>\n<p>Ein anderer Grund sind die MSForms-Steuerelemente der Werkzeugsammlung, die teilweise &uuml;ber mehr Einstellm&ouml;glichkeiten verf&uuml;gen (vor allem grafische) als die analogen Access-Steuerelemente und manchmal auch leichter zu programmieren sind.<\/p>\n<p>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.<\/p>\n<p>Eingebettete ActiveX-Steuerelemente funktionieren in UserForms besser als in Access-Formularen &#8211; dort verhalten Sie sich oft unerwartet oder sind gar nicht zu gebrauchen.<\/p>\n<p>Die in Bild 3 dargestellte Werkzeugsammlung enth&auml;lt &uuml;brigens noch die benutzerdefinierten Reiter &#8222;ActiveX&#8220; und &#8222;Neue Seite&#8220;. Wie Sie die Sammlung um neue Reiter oder Steuerelemente erweitern k&ouml;nnen, erl&auml;utert die Visual Basic-Hilfe unter Microsoft Forms-Referenz\/&uuml;bersicht zum Entwurf.<\/p>\n<p><IMG height=\"148\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic003.png\" width=\"190\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Werkzeugsammlung der MSForms-Steuerelemente<\/span><\/b><\/p>\n<p>Wie Sie weiter unten sehen werden, lassen sich MSForms-Steuerelemente genauso gut in ein Access-Formular einbauen. Es ist allerdings einfacher, deren Eigenschaften &uuml;ber das Eigenschaftsfenster des VBA-Editors einzustellen, wenn sie in ein UserForm integriert sind.<\/p>\n<p>Schlie&szlig;lich gibt es noch einen weiteren Grund f&uuml;r den Einsatz von UserForms: Sie k&ouml;nnen darin zur Laufzeit Steuerelemente erzeugen.<\/p>\n<p>In Access-Formularen ist das nicht m&ouml;glich, ohne diese in der Entwurfsansicht anzuzeigen, was in einer professionellen Anwendung nicht passieren sollte.<\/p>\n<p>Hier behilft man sich oft mit einem vorher im Entwurf angelegten &#8222;Vorrat&#8220; von Steuerelementen, die zur Laufzeit sichtbar oder unsichtbar geschaltet werden. Weiter unten erfahren Sie, wie Sie MSForms-Steuerelemente zur Laufzeit erzeugen.<\/p>\n<h3>Contra UserForms<\/h3>\n<p>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.<\/p>\n<p>Sie m&uuml;ssen grunds&auml;tzlich per VBA und Recordsets mit Daten aus Tabellen oder Abfragen gef&uuml;llt werden, was sie in dieser Hinsicht kompliziert und unflexibel macht.<\/p>\n<p>Dass Sie ein entworfenes UserForm im VBA-Editor mit dem &#8222;Ausf&uuml;hren&#8220;-Pfeil &ouml;ffnen k&ouml;nnen, wissen Sie bereits. Dem Benutzer einer fertigen Anwendung k&ouml;nnen Sie das nat&uuml;rlich nicht zumuten &#8211; dort m&uuml;ssen Sie Men&uuml;eintr&auml;ge oder Schaltfl&auml;chen zum &ouml;ffnen von Elementen der Benutzerumgebung bereitstellen, die den notwendigen Code ausf&uuml;hren. Access-Formulare &ouml;ffnet man in VBA mit dieser DoCmd-Methode:<\/p>\n<pre>DoCmd.OpenForm \"frmXY\"<\/pre>\n<p>F&uuml;r UserForms existiert keine analoge Anweisung, aber es gibt drei alternative M&ouml;glichkeiten. Sie k&ouml;nnen eine neue Instanz der entsprechenden UserForm-Klasse instanzieren und sie anschlie&szlig;end mit der Methode Show anzeigen:<\/p>\n<pre>Dim oForm As Object\r\nSet oForm = New frmUserForm1\r\noForm.Caption = \"Ein Titel\"\r\noForm.Show<\/pre>\n<p>Auf &auml;hnliche Weise l&auml;sst sich auch die Load-Anweisung von VBA verwenden:<\/p>\n<pre>Load frmUserForm1\r\nfrmUserForm1.Show<\/pre>\n<p>Beide L&ouml;sungen haben aber den Nachteil, dass Sie den Namen des zu &ouml;ffnenden Elements nicht per Variable &uuml;bergeben k&ouml;nnen, wie es bei der DoCmd.OpenForm-Methode von Access m&ouml;glich ist. Die trickreiche dritte L&ouml;sung gestattet aber auch dies:<\/p>\n<pre>Dim sName As String\r\nsName =\"frmUserForm1\"\r\nVBA.UserForms.Add(sName).Show vbModal<\/pre>\n<p>Die im Objektkatalog vorhandene, aber versteckte Methode Add der UserForms-Auflistung gibt eine neue Instanz des in sName angegebenen UserForms zur&uuml;ck.<\/p>\n<p>Im Code-Beispiel ist die Methode Show noch mit dem Parameter vbModal versehen. Das bewirkt, dass das UserForm als modaler Dialog ge&ouml;ffnet wird, was die Ausf&uuml;hrung des Codes an dieser Stelle anh&auml;lt.<\/p>\n<p>Das Schlie&szlig;en eines UserForms erledigt die Unload-Methode von VBA:<\/p>\n<pre>Unload frmUserForm1<\/pre>\n<p>Auch hier haben wir wieder den Nachteil, dass man die Instanz des Formulars nicht per String-Variable &uuml;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&ouml;glichen, ist ein Umweg &uuml;ber die kleine Routine aus Quellcode 1 n&ouml;tig.<\/p>\n<p><b>Quellcode 1: Namentlich benanntes UserForm schlie&szlig;en<\/b><\/p>\n<pre>Sub UnloadUserForm(sName As String)\r\n    Dim i As Long\r\n    \r\n    For i = 0 To VBA.UserForms.Count\r\n        If UserForms.Item(i).Name = sName Then\r\n            Unload UserForms.Item(i)\r\n            Exit For\r\n        End If\r\n    Next i\r\nEnd Sub<\/pre>\n<p>Sie finden diese und die Prozedur zum &ouml;ffnen eines UserForms im Modul mdlMSForms der Beispieldatenbank.<\/p>\n<p>Die Steuerelemente der MSForms-Library sind fast ausschlie&szlig;lich ActiveX-Komponenten. Als solche k&ouml;nnen Sie diese &uuml;ber den Men&uuml;befehl Einf&uuml;gen\/ActiveX-Steuerelement&#8230; in die Entwurfsansicht eines Formulars oder Berichts eingef&uuml;gen. Wenn Sie diesen Men&uuml;befehl aufrufen, finden Sie die MSForms-Steuerelemente in der Liste der ActiveX-Komponenten unter Microsoft Forms 2.0 &#8230;. Die Beispieldatenbank enth&auml;lt ein Formular namens frmAllControls, das alle derart verf&uuml;gbaren Steuerelemente enth&auml;lt. Sehen Sie es sich an, um eine &uuml;bersicht zu erhalten.<\/p>\n<p><!--30percent--><\/p>\n<p>Gelegentlich h&ouml;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.<\/p>\n<p><b>Eigenschaften der Steuerelemente einstellen<\/b><\/p>\n<p>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&auml;chlich vorhandenen Eigenschaften. Leider f&ouml;rdert auch ein Klick auf die &#8230;-Schaltfl&auml;che der Eigenschaft Benutzerdefiniert keine weiteren Eigenschaften zutage, wie man dies von anderen ActiveX-Steuerelementen gewohnt ist. <\/p>\n<h3>MSForms-Steuerelemente bearbeiten<\/h3>\n<p>Es gibt zwei M&ouml;glichkeiten, um ein MS-Forms-Steuerelement zum Bearbeiten vorzubereiten:<\/p>\n<p>Die erste liefert der Eintrag [Steuerelementname]-Objekt\/Bearbeiten (wobei [Steuerelementname] durch die Bezeichnung des jeweiligen Objekts wie in Bild 4 zu ersetzen ist).<\/p>\n<p><IMG height=\"129\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic004.png\" width=\"316\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Editieren eines MSForms-Labels<\/span><\/b><\/p>\n<p>Ein Doppelklick auf das Steuerelement bewirkt dasselbe. Es bekommt dabei einen schraffierten Rahmen, der den Bearbeitungsmodus andeuten soll.<\/p>\n<p>Je nach Steuerelement sieht dieses Bearbeiten anders aus: Bei Textboxen, Labels oder Buttons kann man lediglich die Beschriftung oder den Textinhalt eingeben. Beim Rahmensteuerelement (Frame) oder der Multipage (Register) l&auml;sst sich jedoch &uuml;ber ein weiteres Kontextmen&uuml; ein MSForms-Eigenschaftsfenster &ouml;ffnen (siehe Bild 5).<\/p>\n<p><IMG height=\"297\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic005.png\" width=\"245\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Kontextmen&uuml; des MSForms-Multipage-Steuerelements<\/span><\/b><\/p>\n<p>Die dort aufgef&uuml;hrten Eigenschaften lassen sich nicht wie gewohnt direkt editieren. Stattdessen markiert man eine Zeile und stellt mit dem Steuerelement im oberen Bereich des Eigenschaftsfensters den gew&uuml;nschten Wert ein beziehungsweise w&auml;hlt diesen aus (siehe Bild 6).<\/p>\n<p><IMG height=\"277\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic006.png\" width=\"251\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  MSForms-Eigenschaftenfenster zum Multipage-Steuerelement als Popupfenster<\/span><\/b><\/p>\n<p>Einfacher als die nicht gerade intuitive Anpassung der MSForms-Steuerelemente ist der Weg &uuml;ber den VBA-Editor: Dieser bietet ebenfalls ein Eigenschaftsfenster (Ansicht\/Eigenschaftsfenster oder F4), das die Eigenschaften des aktuell im Access-Fenster markierten Objekts oder Steuerelements anzeigt. Am Besten funktioniert dies, wenn Sie zwei Monitore zur Verf&uuml;gung haben und auf dem einen Bildschirm den Formularentwurf und im anderen den VBA-Editor anzeigen.<\/p>\n<p>Die Beispieldatenbank verdeutlicht die Features rund um die MSForms-Bibliothek &uuml;ber verschiedene UserForms und Access-Formulare mit MSForms-Steuerelementen.<\/p>\n<p>Die Datenbank zeigt nach dem &ouml;ffnen zun&auml;chst ein Switchboard-Formular mit sieben Schaltfl&auml;chen zum Aufrufen der verschiedenen Beispielformulare an.<\/p>\n<h3>UserForm per VBA &ouml;ffnen<\/h3>\n<li>Schaltfl&auml;che 1 &ouml;ffnet ein einfaches UserForm mit zwei Bezeichnungsfeldern. Sie demonstriert das &ouml;ffnen eines UserForm per VBA (siehe auch die Prozedur ShowUserForm im Modul mdlMSForms).<\/li>\n<h3>Alle auf einen Streich<\/h3>\n<li>Schaltfl&auml;che 2 &ouml;ffnet ein Access-Formular mit s&auml;mtlichen MSForms-Steuerelementen. Fast alle diese Steuerelemente k&ouml;nnen Grafiken anzeigen. Falls ihnen nicht bereits im Entwurf Icons (.ico) oder andere Grafikformate (.gif, .bmp, jpg)  spendiert wurden, so kann dies zur Laufzeit durch Zuweisung eines StdPicture-Objekts an die Eigenschaft Picture geschehen:<\/li>\n<pre>Set CommandButton.Picture = LoadPicture(\"c:\\meinbild.jpg\")<\/pre>\n<p>Davon macht auch die Ereignisprozedur Form_Load des Formulars Gebrauch.<\/p>\n<h3>Alles im Rahmen<\/h3>\n<p>Schaltfl&auml;che 3 &ouml;ffnet das Formular frmMSFrame, in das ein MSForms-Rahmensteuerelement (Frame) eingebunden ist.<\/p>\n<p>Ein Frame ist ein Container f&uuml;r weitere Steuerelemente. Es verh&auml;lt sich gewisserma&szlig;en genauso wie ein UserForm. In ein Access-Formular eingebaut simuliert es ein Unterformular. Wenn sie das Frame in der Entwurfsansicht doppelklicken, dann k&ouml;nnen Sie im Kontextmen&uuml; die Werkzeugsammlung aufrufen, mit deren Hilfe sie ihm die weiteren Steuerelemente verpassen. Anschlie&szlig;end stellen Sie deren Eigenschaften so wie im Entwurf eines UserForms im VBA-Editor ein.<\/p>\n<p>Erw&auml;hnenswert ist noch der Formularcode von frmMSFrame: Wenn Sie MSForms-Steuerelemente in ein Access-Formular aufnehmen, dann k&ouml;nnen Sie deren Ereignisprozeduren nicht im Eigenschaftsfenster von Access einstellen. Das ist bei allen ActiveX-Steuerelementen so. Stattdessen w&auml;hlt man im VBA-Editor in der linken Combobox des Codefensters den Steuerelementnamen aus und bekommt dann in der rechten Combobox die Ereignisse pr&auml;sentiert. W&auml;hlt man eines davon aus, entsteht automatisch der Rumpf f&uuml;r die passende Prozedur.<\/p>\n<p>Die Namen der in einen Frame eingebetteten Steuerelemente werden sie jedoch in diesen Auswahlfeldern vergeblich suchen, da sie untergeordnete Steuerelemente darstellen. Um dennoch Ereignisprozeduren f&uuml;r sie schreiben zu k&ouml;nnen, m&uuml;ssen Sie passende Objektvariablen im Code anlegen.<\/p>\n<p><b>Quellcode 2: Objektvariable ctlText1 WithEvents an MSForms-Steuerelement Textbox1 binden<\/b><\/p>\n<pre>Private WithEvents ctlTxt1 As MSForms.TextBox\r\nPrivate Sub Form_Load()\r\n    Set ctlTxt1 = _        ctlFra-me.Object.Controls(\"Textbox1\")\r\nEnd Sub\r\nPrivate Sub ctlTxt1_MouseDown(ByVal Button _    As Integer, ByVal Shift As Integer, _    ByVal x As Single, ByVal y As Single)\r\n    MsgBox \"Textbox Mousedown\"\r\nEnd Sub<\/pre>\n<p>Die Routine Form_Load aus Quellcode 2 wird beim Laden des Formulars ausgef&uuml;hrt. Es weist der im Modulkopf deklarierten Objektvariablen ctlTxt1 das dem Frame-Steuerelement untergeordnete Steuerelement Textbox1 zu:<\/p>\n<pre>ctlFrame.Object.Controls(\"Textbox1\")<\/pre>\n<p>Da die Variable mit dem Schl&uuml;sselwort WithEvents (&#8222;mit Ereignissen&#8220;) deklariert ist, zeigt das rechte Kombinationsfeld des Codefensters die passenden Ereignisse an, wenn das Steuerelement im linken Kombinationsfeld ausgew&auml;hlt ist.<\/p>\n<p>Quellcode 2 enth&auml;lt au&szlig;erdem eine Ereignisprozedur f&uuml;r das im Frame enthaltene Textfeld: Es sorgt daf&uuml;r, dass beim Klick in das Textfeld eine Meldung angezeigt wird &#8211; probieren Sie es einfach einmal aus.<\/p>\n<h3>Multipage statt Register<\/h3>\n<p>Schaltfl&auml;che 4 startet das Formular frmMultipage. Es enth&auml;lt das Multipage-Steuerelement der MSForms-Bibliothek, das dem Register-Steuerelement von Access entspricht, und zeigt eine von dessen der Spezialit&auml;ten: Jede Registerseite kann ein anderes Hintergrundbild anzeigen.<\/p>\n<p>Die Bilder werden dabei im Load-Ereignis des Formulars geladen. Man kann sie zwar auch im Formularentwurf &uuml;ber die Eigenschaft Picture und einen Dialog zur Bilddatei-Auswahl in das Steuerelement einf&uuml;gen, es hat sich jedoch gezeigt, dass sie dabei nicht zuverl&auml;ssig gespeichert werden.<\/p>\n<p>Neben diesem Feature l&auml;sst sich das Multipage-Element flexibler formatieren als das Access-Registerkartensteuerelement. Sie f&uuml;gen diesem Steuerelement neue Seiten hinzu, indem Sie doppelt darauf klicken und dann im Kontextmen&uuml; den Eintrag &#8222;Einf&uuml;gen&#8220; ausw&auml;hlen.<\/p>\n<p><IMG height=\"170\" src=\"..\/fileadmin\/_temp_\/{3196FE61-0CE0-4B25-BD78-2FCA39D6F9AC}\/pic007.png\" width=\"269\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Neue Seiten in das Multipage-Element einf&uuml;gen<\/span><\/b><\/p>\n<h3>Frame im Frame<\/h3>\n<p>Mit einem Klick auf Schaltfl&auml;che 5 &ouml;ffnen Sie ein Formular, das eine Anwendungsm&ouml;glichkeit f&uuml;r das MSForms-Frame zeigt. ctlFrame enth&auml;lt ein weiteres Frame, dem zwei weitere Steuerelemente untergeordnet sind: ein Bezeichnungsfeld und ein Bild-Element. Beim Klick auf die Schaltfl&auml;che Bilder zeigen f&uuml;llt sich das Pseudo-Unterformular mit der Vorschau auf Bilddateien im Anwendungsverzeichnis. Der VBA-Code hierf&uuml;r hat gerade einmal 20 Zeilen! Sein Herzst&uuml;ck sind die zwei Methoden Copy und Paste des Objekts Frame.Controls. Der Ablauf der Prozedur sieht so aus:<\/p>\n<p>Zuerst wird das untergeordnete Frame in die Zwischenablage kopiert:<\/p>\n<pre>ctlFrame.Object.Controls.Copy<\/pre>\n<p>Das f&uuml;hrt dazu, dass nicht nur dieses Frame, sondern auch alle darin enthaltenen Steuerelemente kopiert werden! Anschlie&szlig;end durchsucht die Routine das Anwendungsverzeichnis mit der VBA-Funktion Dir() und l&auml;dt jede gefundene Datei mit LoadPicture:<\/p>\n<pre>Set oPic = LoadPicture(sPath & \"\\\" & sFile<\/pre>\n<p>Das funktioniert nat&uuml;rlich nur f&uuml;r Bilddateien. Deshalb sorgt ein On Error Resume Next vor dieser Zeile daf&uuml;r, dass Fehler aufgrund ung&uuml;ltiger Dateien nicht angezeigt werden. Die folgende Zeile pr&uuml;ft dann, ob die Bilddatei erfolgreich geladen wurde:<\/p>\n<pre>If Not oPic Is Nothing Then ...<\/pre>\n<p>In diesem Fall &#8211; und das ist der Clou der Geschichte &#8211; wird nun der in der Zwischenablage befindliche Satz von Steuerelementen in das Frame &uuml;bernommen:<\/p>\n<pre>ctlFrame.Paste<\/pre>\n<p>Anschlie&szlig;end stellt die Routine einige Eigenschaften der neu eingef&uuml;gten Steuerelemente ein: Das Bezeichnungsfeld zeigt den Dateinamen an (Caption), das Image-Element wird mit dem in der Datei enthaltenen Bild gef&uuml;llt, und mit der Top-Eigenschaft wird das neue Frame so positioniert, dass es unterhalb des zuvor angelegten erscheint. Eine Schleife sorgt daf&uuml;r, dass alle im Verzeichnis enthaltenen Dateien eingelesen werden.<\/p>\n<p>Dieses Verfahren zeigt, wie man zur Laufzeit neue Steuerelemente erzeugen kann &#8211; und das auch noch auf einfachste Weise per Copy &#038; Paste und anschlie&szlig;endes Anpassen.<\/p>\n<h3>Dynamische Steuerelemente<\/h3>\n<p>Die Schaltfl&auml;chen 6 und 7 des Switchboards &ouml;ffnen zwei weitere UserForms, die die M&ouml;glichkeiten zum dynamischen Erzeugen von MSForms-Steuerelementen ausf&uuml;hrlicher demonstrieren.<\/p>\n<p>UserForm2 produziert bei Mausklick auf die Schaltfl&auml;che Neue Elemente erzeugen aus dem Nichts verschiedene Steuerelemente und ordnet diese reihenweise an.<\/p>\n<p>UserForm3 ist komplett leer, wenn Sie es im VBA-Editor aufrufen. Beim Start &uuml;ber die Schaltfl&auml;che 7 des Switchboards weist ihm die &ouml;ffentliche Prozedur FillForm jedoch ein zuvor erzeugtes Recordset zu. Diese Prozedur erzeugt dann aus dessen Feldern automatisch alle ben&ouml;tigten Steuerelemente, um seine Inhalte in einer Art Endlosformular zu pr&auml;sentieren.<\/p>\n<p>Die dazu notwendigen Techniken werden im folgenden Kapitel genauer erl&auml;utert.<\/p>\n<p>Die weiter oben vorgestellte Copy and Paste-Methode bietet eine einfache M&ouml;glichkeit, neue Steuerelemente in einem Frame oder einem UserForm zu generieren. Sie erfordert allerdings einen Satz der gew&uuml;nschten Steuerelemente als &#8222;Kopiervorlage&#8220;. Diese lassen sich jedoch zur Laufzeit von Grund auf neu erzeugen. Das Verfahren ist fast identisch zur Vorgehensweise in Formularen unter Visual Basic 6.<\/p>\n<p>Neue MSForms-Steuerelemente k&ouml;nnen in den folgenden Elementen\/Steuerelementen erzeugt werden:<\/p>\n<li>UserForm<\/li>\n<li>Frame<\/li>\n<li>Page-Element des Multipage-Steuerelements<\/li>\n<p>Jedes der genannten Elemente besitzt eine Controls-Auflistung, die als Startpunkt zum Generieren neuer Steuerelementen dient.<\/p>\n<p>Ein einfaches Beispiel ist das Erzeugen eines Bezeichnungsfeldes in einem UserForm. Dazu sind die folgenden Anweisungen erforderlich:<\/p>\n<pre>Dim oCtl As MSForms.Control\r\nSet oCtl = Me.Controls.Add( _\r\n\"Forms.Label.1\", \"Bez1\", True)<\/pre>\n<p>Hier wird zun&auml;chst die Variable oCtl als allgemeines Control-Objekt der MSForms-Library deklariert. Sie kann dann auf beliebige Arten von Steuerelementen verweisen. Me verweist genauso wie bei Access-Formularen auf das UserForm. Dessen Controls-Objekt kennt die Methode Add. Sie erwartet als Parameter lediglich die ProgID, also die Klassenbezeichnung eines MSForms-Steuerelements &#8211; die &uuml;brigen beiden Parameter sind optional. Damit gleicht sie der Methode CreateObject von VBA.<\/p>\n<p>In der Tat l&auml;sst sich auch damit ein MSForms-Objekt instanzieren, wie folgende im Direktfenster abgesetzte Anweisung zeigt:<\/p>\n<pre> Typename(CreateObject(\"Forms.Label.1\"))<\/pre>\n<p>Die Ausgabe dieser Anweisung lautet Label. Die beiden zus&auml;tzlichen Parameter der Add-Methode sind der Name des neuen Steuerelements &#8211; hier Bez1 &#8211; und ein Boolescher Wert, der angibt, ob das Steuerelement direkt sichtbar sein soll. Den Codeausschnitt oben h&auml;tte man auch so schreiben k&ouml;nnen:<\/p>\n<pre>Dim oCtl As MSForms.Control\r\nSet oCtl = _\r\n    Me.Controls.Add(\"Forms.Label.1\")\r\noCtl.Name = \"Bez1\"\r\noCtl.Visible = True<\/pre>\n<p>Hier zeigt sich auch, wie mit dem im Ursprungszustand erzeugten Control weiter zu verfahren ist. Nach dem Anlegen im UserForm hat es einige Standardeigenschaften, die per Code ge&auml;ndert werden m&uuml;ssen. Zum Beispiel wird es automatisch in der linken oberen Ecke des Containers platziert.  Unser Bezeichnungsfeld wird also nun mit Eigenschaftswerten ausgestattet:<\/p>\n<pre>With oCtl\r\n    .Visible = True\r\n    .Top = 10  ''Pixel\r\n    .Left = 20  ''Pixel\r\n    .Caption = \"Beschreibung\"\r\n    .Fontname = \"Arial\"\r\nEnd With<\/pre>\n<p>Die Eigenschaften der jeweiligen Steuerelemente entnehmen Sie dem Objektkatalog, nachdem Sie dort die MSForms-Bibliothek ausgew&auml;hlt haben. Es empfiehlt sich dabei, &uuml;ber das Kontextmen&uuml; die Option Versteckte Elemente anzeigen zu aktivieren. In unserem Label-Objekt wurde zum Beispiel die versteckte Eigenschaft Fontname gesetzt.<\/p>\n<p>Nach dem gleichen Schema lassen sich auch alle anderen Steuerelemente erzeugen. Man muss dazu nur deren Klassenbezeichnung kennen. Tab. 1 enth&auml;lt die Gesamtliste der ProgIDs.<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Steuerelement<\/b><\/p>\n<\/td>\n<td>\n<p><b>Klassenbezeichnung<\/b><\/p>\n<\/td>\n<\/tr>\n<p>Bezeichnungsfeld<\/p>\n<p>Forms.Label.1<\/p>\n<p>Bildelement<\/p>\n<p>Forms.Image.1<\/p>\n<p>Bildlaufleiste<\/p>\n<p>Forms.ScrollBar.1<\/p>\n<p>Drehfeld<\/p>\n<p>Forms.SpinButton.1<\/p>\n<p>Kombinationsfeld<\/p>\n<p>Forms.ComboBox.1<\/p>\n<p>Kontrollk&auml;stchen<\/p>\n<p>Forms.CheckBox.1<\/p>\n<p>Listenfeld<\/p>\n<p>Forms.ListBox.1<\/p>\n<p>Optionsfeld<\/p>\n<p>Forms.OptionButton.1<\/p>\n<p>Rahmen<\/p>\n<p>Forms.Frame.1<\/p>\n<p>Register (&uuml;berfl.)<\/p>\n<p>Forms.TabStrip.1<\/p>\n<p>Registerseiten<\/p>\n<p>Forms.MultiPage.1<\/p>\n<p>Schaltfl&auml;che<\/p>\n<p>Forms.CommandButton.1<\/p>\n<p>Textfeld<\/p>\n<p>Forms.TextBox.1<\/p>\n<p>Umschaltfeld<\/p>\n<p>Forms.ToggleButton.1<\/p>\n<\/table>\n<p><b>Tab. 1: Steuerelemente und Klassenbezeichnungen<\/b><\/p>\n<p>Die m&ouml;glichen Eigenschaften dieser Elemente gehen aus dem Objektkatalog hervor. Damit Sie nicht raten m&uuml;ssen, was sich hinter den Bezeichnungen verbirgt oder wie die genaue Syntax einer dort eingebauten Methode aussieht, markieren Sie die Eigenschaft und dr&uuml;cken F1. Die VBA-Hilfe liefert n&auml;mlich zu allen Elementen eine ausf&uuml;hrliche Beschreibung. Eine Schilderung auch nur der wichtigsten Features w&uuml;rde den hier verf&uuml;gbaren Raum sprengen.<\/p>\n<h3>Beispiel-UserForms<\/h3>\n<p>Zur&uuml;ck zu den beiden UserForms der Demo-Datenbank: Der VBA-Code der UserForm frmUserForm2 enth&auml;lt die Ereignisprozedur cmdNewCtls_Click. Diese erzeugt hintereinander in Schleifen diverse Controls im Frame1 und versieht diese mit Eigenschaftswerten.<\/p>\n<p>Interessant ist hier noch der Scroll-Bereich f&uuml;r das UserForm. Nachdem die Controls angelegt wurden, dann sind sie in der UserForm eventuell nicht alle sichtbar, weil sie au&szlig;erhalb des sichtbaren Bereichs platziert wurden. Deshalb ist das UserForm mit einem horizontalen Scrollbalken ausgestattet. Seine Einstellung ScrollWidth gibt an, um wie viele Pixel man den sichtbaren Bereich verschieben kann. Sinnvoll ist es hier, in etwa denselben Wert wie f&uuml;r die Breite des enthaltenen Frames zu nehmen:<\/p>\n<pre>Me!Frame1.Width = 780   ''Pixel!\r\nMe.ScrollWidth = 792<\/pre>\n<p>&uuml;brigens sind alle Ma&szlig;e in der MSForms-Bibliothek in Pixels anzugeben, nicht in Twips wie in Access (ein Pixel = 15 Twips bei 96dpi Bildschirmaufl&ouml;sung).<\/p>\n<p>Auch das frmUserForm1 der Beispieldatenbank ist zun&auml;chst weitgehend leer und enth&auml;lt lediglich ein Frame namens SubWnd. Dieses wird dann &uuml;ber die &ouml;ffentliche Methode FillForm mit Steuerelementen best&uuml;ckt.<\/p>\n<p>Die Prozedur erwartet ein beliebiges DAO-Recordset als Parameter. Die Routine durchl&auml;uft die Fields-Auflistung des angegebenen Recordsets und bestimmt den Datentyp der Felder. Beim Typ Boolean erzeugt sie eine Checkbox, in allen anderen F&auml;llen eine Textbox. Deren Value-Eigenschaften f&uuml;llt die Routine dann mit den Field-Werten des Recordsets. F&uuml;r die Spaltenk&ouml;pfe kommen Labels zum Einsatz, deren Caption-Eigenschaften sich aus den Namen der Felder des Recordsets ergeben. <\/p>\n<p>Zum Schluss berechnet die Routine anhand der Zahl der Felder und Datens&auml;tze den Scrollbereich des Formulars und stellt dessen Eigenschaften entsprechend ein. Das Ergebnis ist eine Darstellung des Recordsets in einer Art Endlosformular. Beachten Sie dabei, dass f&uuml;r jede Zelle der Tabelle ein eigenes Steuerelement angelegt wird. Ergo kann auch jede Zelle sp&auml;ter individuell formatiert werden.<\/p>\n<p>Jedes Steuerelement ist ein eigenes Windows-Fenster. Damit wird auch klar, dass dies eine ressourcenfressende Angelegenheit ist. Das UserForm eignet sich nicht f&uuml;r die Anzeige von Recordsets mit Tausenden von Datens&auml;tzen. Ein Test mit 3000 Datens&auml;tzen und zw&ouml;lf Feldern hat zwar ergeben, dass auch das m&ouml;glich ist, die Verarbeitung wird dann aber au&szlig;erordentlich z&auml;h. Irgendwann sprengt der Bedarf an Ressourcen das Speicherlimit des Windows-GDI. Prinzipiell scheint aber die Zahl an Steuerelementen, die ein UserForm aufnehmen kann, nicht begrenzt zu sein.<\/p>\n<p>Die Initialize-Prozedur des UserForms sollte Sie &uuml;brigens nicht irritieren. Sie arbeitet mit API-Funktionen, um dem Formular bestimmte Fenstereigenschaften zu verpassen. Immerhin k&ouml;nnen Sie daran erkennen, dass MSForms-Steuerelemente, da sie alle ein Fenster-Handle besitzen, mit API-Funktionen ver&auml;ndert werden k&ouml;nnen &#8211; im Gegensatz zu Access-Steuerelementen. Es ist allerdings nicht ganz einfach, an diese Handles zu gelangen, wie diese Zeile zeigt:<\/p>\n<pre>GetParent(GetParent(SubWnd.[_GethWnd]))<\/pre>\n<p>Mit den Elementen der von Office grunds&auml;tzlich installierten MSForms-Bibliothek l&auml;sst sich die Benutzeroberfl&auml;che einer Access-Datenbank deutlich aufwerten. Gerade die beiden zuletzt beschriebenen UserForms der Beispieldatenbank zeigen, wie flexibel MSForms und deren Steuerelemente eingesetzt werden k&ouml;nnen, wenn sie dynamisch zur Laufzeit erzeugt werden. Bei Ihren eigenen Versuchen, die Benutzeroberfl&auml;che mit diesen Steuerelementen zu erg&auml;nzen, helfen Ihnen die Sektion MSForms in der VBA-Hilfe und der VBA-Objektkatalog weiter.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MSFormsDemo.zip<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/6EA55EEE-A05C-4A48-B989-A33FD5ABF4E4\/aiu_376.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Access-Entwickler sucht st&auml;ndig nach neuen Mitteln, die Oberfl&auml;che seiner Anwendungen an-sprechender und funktioneller zu gestalten. ActiveX-Steuerelemente zum Nachr&uuml;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 &#8211; und ist quasi Bestandteil von Access. Und das Beste: Diese Steuerelemente lassen sich sogar zur Laufzeit anlegen!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662006,66042006,44000023],"tags":[],"class_list":["post-55000376","post","type-post","status-publish","format-standard","hentry","category-662006","category-66042006","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Dynamische Steuerelemente - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamische Steuerelemente\" \/>\n<meta property=\"og:description\" content=\"Der Access-Entwickler sucht st&auml;ndig nach neuen Mitteln, die Oberfl&auml;che seiner Anwendungen an-sprechender und funktioneller zu gestalten. ActiveX-Steuerelemente zum Nachr&uuml;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!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:04:26+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dynamische Steuerelemente\",\"datePublished\":\"2021-02-11T21:04:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/\"},\"wordCount\":3768,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/84ab0e9cfff1418fb288b16f3128ffbf\",\"articleSection\":[\"2006\",\"4\\\/2006\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/\",\"name\":\"Dynamische Steuerelemente - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/84ab0e9cfff1418fb288b16f3128ffbf\",\"datePublished\":\"2021-02-11T21:04:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/84ab0e9cfff1418fb288b16f3128ffbf\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/84ab0e9cfff1418fb288b16f3128ffbf\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Steuerelemente\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamische Steuerelemente\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dynamische Steuerelemente - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/","og_locale":"de_DE","og_type":"article","og_title":"Dynamische Steuerelemente","og_description":"Der Access-Entwickler sucht st&auml;ndig nach neuen Mitteln, die Oberfl&auml;che seiner Anwendungen an-sprechender und funktioneller zu gestalten. ActiveX-Steuerelemente zum Nachr&uuml;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!","og_url":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:04:26+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dynamische Steuerelemente","datePublished":"2021-02-11T21:04:26+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/"},"wordCount":3768,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf","articleSection":["2006","4\/2006","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/","url":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/","name":"Dynamische Steuerelemente - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf","datePublished":"2021-02-11T21:04:26+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/84ab0e9cfff1418fb288b16f3128ffbf"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Steuerelemente\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dynamische Steuerelemente"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000376"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000376\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000376"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}