{"id":55001332,"date":"2021-12-01T00:00:00","date_gmt":"2021-12-10T07:39:35","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1332"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Formulare_per_VBA_erstellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/","title":{"rendered":"Formulare per VBA erstellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Warum sollte man Formulare per VBA erstellen, wenn Microsoft Access doch die gute alte, etwas in die Jahre gekommene Entwurfsansicht daf&uuml;r bereitstellt Ganz einfach: Weil es f&uuml;r den effizient arbeitenden Access-Entwickler immer wieder Aufgaben gibt, die er einfach nicht von Hand erledigen m&ouml;chte. Oder weil der Access-Entwickler immer wiederkehrende Aufgaben in ein Access-Add-In oder ein COM-Add-In auslagern m&ouml;chte. Und dort gibt es nun einmal keine Entwurfsansicht &#8211; dort ist VBA-Code gefragt, um neue Formulare zu erstellen und die gew&uuml;nschten Steuerelemente auf das Formular zu bringen. Dieser Beitrag liefert alle Techniken, die zum Erstellen von Formularen und zum Ausstatten mit Steuerelementen notwendig sind.<\/b><\/p>\n<h2>Neues, leeres Formular erstellen<\/h2>\n<p>Mit einer ersten Funktion wollen wir ein neues, leeres Formular mit einem vorher festgelegten Namen erstellen. Das erledigt die Funktion <b>CreateNewForm<\/b>. Diese erwartet als Parameter den Namen, den das Formular nach dem Erstellen erhalten soll:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateNewForm(strName<span style=\"color:blue;\"> As String<\/span>) \r\n     <span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form\r\n     <span style=\"color:blue;\">Dim <\/span>strNameTemp<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> frm = CreateForm()\r\n     strNameTemp = frm.Name\r\n     DoCmd.Close acForm, frm.Name, acSaveYes\r\n     DoCmd.Rename strName, acForm, strNameTemp\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur deklariert Variablen f&uuml;r das neue <b>Form<\/b>-Element (<b>frm<\/b>) und f&uuml;r den tempor&auml;ren von Access beim Erstellen vergebenen Namen (<b>strNameTemp<\/b>). Dann erstellt es mit der <b>CreateForm<\/b>-Funktion ein neues Formular. <b>CreateForm <\/b>liefert einen Verweis auf das neu erstellte <b>Form<\/b>-Objekt zur&uuml;ck, welches wir mit der Variablen <b>frm <\/b>referenzieren. Wir w&uuml;rden nun gern den Namen des Formulars einstellen, aber das ist nicht ohne weiteres m&ouml;glich: Die Eigenschaft <b>Name <\/b>des <b>Form<\/b>-Objekts ist n&auml;mlich schreibgesch&uuml;tzt. Wie also dem Formular den gew&uuml;nschten Namen geben Klar: Wir k&ouml;nnten es einfach nach dem Speichern und Schlie&szlig;en umbenennen, daf&uuml;r gibt es die <b>DoCmd.Rename<\/b>-Methode. Allerdings erwartet die auch den vorherigen Namen des Formulars, und den kennen wir nicht. Allerdings k&ouml;nnen wir diesen zuvor mit <b>frm.Name <\/b>auslesen und speichern ihn in der Variablen <b>strNameTemp<\/b>. Danach schlie&szlig;en wir dann das Formular mit der Methode <b>DoCmd.Close <\/b>und den Parametern <b>acForm <\/b>f&uuml;r den Objekttyp, <b>frm.Name <\/b>f&uuml;r den Namen des zu schlie&szlig;enden Objekts und <b>acSaveYes<\/b>, damit die &Auml;nderungen an dem neu erstellten Formular ohne R&uuml;ckfrage gespeichert werden.<\/p>\n<p>Nach dem Schlie&szlig;en rufen wir dann <b>DoCmd.Rename <\/b>auf und &uuml;bergeben mit dem ersten Parameter den neuen Namen, mit dem zweiten den Objekttyp (<b>acForm<\/b>) und mit dem dritten den vorherigen Objektnamen.<\/p>\n<p>Rufen wir diese Prozedur nun wie folgt auf, legt dies ein neues, leeres Formular unter dem angegebenen Namen an, das direkt im Navigationsbereich erscheint:<\/p>\n<pre>CreateNewForm \"frmNeuesFormular\"<\/pre>\n<h2>Formular bereits vorhanden<\/h2>\n<p>Wenn man diese Prozedur zwei Mal hintereinander mit dem gleichen Formularnamen aufruft, erh&auml;lt man die Meldung aus Bild 1. Diese wird durch den Versuch ausgel&ouml;st, dem neuen Formular den Namen eines bereits vorhandenen Formulars zu &uuml;bergeben. Dem k&ouml;nnen wir bereits zuvor vorbeugen, indem wir abfragen, ob bereits ein Formular dieses Namens vorhanden ist. Ob ein Formular bereits vorhanden ist, k&ouml;nnen wir auf verschiedene Arten pr&uuml;fen. Wir k&ouml;nnten zum Beispiel versuchen, es zu &ouml;ffnen, oder wir durchlaufen eine der Auflistungen der Formulare.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_1332_001.png\" alt=\"Meldung beim Versuch, einem Formular einen bereits vorhandenen Namen zu geben\" width=\"699,559\" height=\"118,8857\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Meldung beim Versuch, einem Formular einen bereits vorhandenen Namen zu geben<\/span><\/b><\/p>\n<p>Wir w&auml;hlen letztere Variante. Die Funktion hei&szlig;t <b>ExistsForm <\/b>und erwartet den Formularnamen als Parameter. Sie liefert das Ergebnis als Booleanwert zur&uuml;ck. Hier deklarieren wir f&uuml;r die Formulare eine Variable des Typs <b>AccessObject<\/b>. Warum nun <b>AccessObject <\/b>und nicht <b>Form<\/b> wie oben in der Prozedur <b>CreateNewForm<\/b> Weil die dort verwendete Funktion <b>CreateForm <\/b>ein Objekt des Typs <b>Form <\/b>erstellt, die Auflistung <b>CurrentProject.AllForms<\/b>, die wir durchsuchen wollen, jedoch Elemente des Typs <b>AccessObjects <\/b>liefert.<\/p>\n<p>Mit <b>objForm <\/b>durchlaufen wir in einer <b>For Each<\/b>-Schleife alle Elemente der Auflistung <b>CurrentProject.AllForms <\/b>und pr&uuml;fen, ob das aktuell mit <b>objForm <\/b>referenzierte Formular den mit <b>strForm <\/b>&uuml;bergebenen Namen hat. Falls ja, stellen wir den Funktionswert auf <b>True <\/b>ein und verlassen die Funktion. Wenn die Funktion alle Elemente aus <b>CurrentProject.AllForms <\/b>durchl&auml;uft, ohne dass das passende Formular gefunden wird, liefert sie den R&uuml;ckgabewert <b>False <\/b>(also den Standardwert f&uuml;r R&uuml;ckgabewerte des Datentyps <b>Boolean<\/b>):<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>ExistsForm(strForm<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objForm<span style=\"color:blue;\"> As <\/span>AccessObject\r\n     For Each objForm In CurrentProject.AllForms\r\n         <span style=\"color:blue;\">If <\/span>objForm.Name = strForm<span style=\"color:blue;\"> Then<\/span>\r\n             ExistsForm = <span style=\"color:blue;\">True<\/span>\r\n             <span style=\"color:blue;\">Exit Function<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objForm\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<h2>Formular neu erstellen<\/h2>\n<p>Wenn das Formular bereits existiert, k&ouml;nnen wir den Benutzer fragen, ob das vorhandene Formular &uuml;berschrieben werden soll. Ist das der Fall, l&ouml;schen wir das Formular und erstellen es neu. Dazu erweitern wir die Prozedur <b>CreateNewForm <\/b>wie in Listing 1. Hier f&uuml;gen wir direkt hinter der Deklaration der Variablen einen Aufruf der Funktion <b>ExistsForm <\/b>ein.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>CreateNewForm(strName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form\r\n     <span style=\"color:blue;\">Dim <\/span>strNameTemp<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span>ExistsForm(strName)<span style=\"color:blue;\"> Then<\/span>\r\n         If <span style=\"color:blue;\">MsgBox<\/span>(\"Formular ''\" & strName & \"'' ist bereits vorhanden. &Uuml;berschreiben\", vbYesNo + vbExclamation, _\r\n                 \"Formular &uuml;berschreiben\") = vbYes Then\r\n             <span style=\"color:blue;\">If <\/span>DeleteForm(strName) = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">Exit Function<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">Exit Function<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> frm = CreateForm()\r\n     strNameTemp = frm.Name\r\n     frm.Visible = <span style=\"color:blue;\">True<\/span>\r\n     DoCmd.Close acForm, frm.Name, acSaveYes\r\n     DoCmd.Rename strName, acForm, strNameTemp\r\n     CreateNewForm = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Erstellen eines neuen Formulars<\/span><\/b><\/p>\n<p>Liefert diese den Wert <b>True<\/b>, dann zeigen wir ein Meldungsfenster an, das den Benutzer fragt, ob er das Formular &uuml;berschreiben m&ouml;chte. Falls ja, rufen wir eine Funktion namens <b>DeleteForm <\/b>auf (siehe weiter unten) und &uuml;bergeben den Namen des zu l&ouml;schenden Formulars. Diese k&ouml;nnte fehlschlagen, weil beispielsweise das zu l&ouml;schende Formular gerade ge&ouml;ffnet ist. In diesem Fall soll die Prozedur einfach verlassen werden &#8211; die passende Fehlermeldung soll die Funktion <b>DeleteForm <\/b>liefern. Wenn der Benutzer die Frage, ob das vorhandene Formular gel&ouml;scht werden soll, mit <b>Nein <\/b>antwortet, soll die Prozedur auch verlassen werden.<\/p>\n<p>Nur wenn das Formular noch nicht existiert oder gel&ouml;scht werden konnte, werden die anschlie&szlig;enden Schritte zum Erstellen des neuen Formulars ausgef&uuml;hrt.<\/p>\n<h2>L&ouml;schen eines vorhandenen Formulars<\/h2>\n<p>Wenn das Formular bereits vorhanden ist und der Benutzer es &uuml;berschreiben m&ouml;chte, m&uuml;ssen wir es l&ouml;schen. Dazu haben wir die Funktion <b>DeleteForm <\/b>definiert, die den Namen des zu l&ouml;schenden Formulars entgegennimmt und einen <b>Boolean<\/b>-Wert zur&uuml;ckliefert.<\/p>\n<p>Die Funktion probiert bei deaktivierter eingebauter Fehlerbehandlung aus, ob das Formular mit <b>DoCmd.DeleteObject <\/b>gel&ouml;scht werden kann. Falls ja, erh&auml;lt die Funktion den R&uuml;ckgabewert <b>True<\/b>. Anderenfalls gibt die Funktion die entsprechende Fehlermeldung aus <b>Err.Description <\/b>aus und gibt den Standardwert <b>False <\/b>als Funktionsergebnis an die aufrufende Prozedur zur&uuml;ck:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DeleteForm(strName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     DoCmd.DeleteObject acForm, strName\r\n     <span style=\"color:blue;\">If <\/span>Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n         DeleteForm = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> Err.Description, <span style=\"color:blue;\">vbCr<\/span>itical + vbOKOnly, _\r\n             \"L&ouml;schen fehlgeschlagen\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Damit haben wir bereits eine Funktion zum Erstellen eines neuen Formulars, das allerdings noch komplett leer ist und f&uuml;r das wir auch noch keine Eigenschaften eingestellt haben.<\/p>\n<h2>Formular weiterverarbeiten<\/h2>\n<p>Nun stehen zwei Aufgaben an: Die erste ist das Einstellen verschiedener Eigenschaften f&uuml;r das Formular. Die zweite ist das Erstellen von Steuerelementen im Formular. Letzteres beschreibt der Beitrag <b>Steuerelemente erstellen <\/b>(<b>www.access-im-unternehmen.de\/1336<\/b>). Um die Eigenschaften k&uuml;mmern wir uns jetzt gleich.<\/p>\n<p>Um Eigenschaften einstellen zu k&ouml;nnen, ben&ouml;tigen wir einen Verweis auf das Formular in der Entwurfsansicht. Das hei&szlig;t also, dass wir das Formular auch &ouml;ffnen m&uuml;ssen. Da stellt sich die Frage: K&ouml;nnten wir mit der Funktion <b>CreateNewForm<\/b> nicht direkt einen Verweis auf das neu erstellte und in der Formularansicht ge&ouml;ffnete Formular zur&uuml;ckgeben Das k&ouml;nnten wir tun, wir m&uuml;ssten dazu das Formular allerdings auch in dieser Funktion wieder &ouml;ffnen.<\/p>\n<p>Das Schlie&szlig;en ist dort unbedingt n&ouml;tig, da wir es sonst nicht umbenennen k&ouml;nnen. Da wir nicht wissen, ob und wie das Formular nach dem Erstellen direkt weiterverarbeitet werden soll, geben wir einfach nur einen Boolean-Wert zur&uuml;ck, der angibt, ob das Formular erfolgreich erstellt wurde.<\/p>\n<h2>Eigenschaften des Formulars einstellen<\/h2>\n<p>In der Prozedur, welche die Funktion <b>CreateNewForm <\/b>aufgerufen hat, k&ouml;nnen wir nun das Formular in der Entwurfsansicht &ouml;ffnen und die gew&uuml;nschten &Auml;nderungen vornehmen.<\/p>\n<p>Wie bereits erw&auml;hnt, wollen wir uns in diesem Beitrag zun&auml;chst um das Einstellen der verschiedenen Eigenschaften des Formulars k&uuml;mmern und schauen uns diese dabei im Detail an. Das &Ouml;ffnen gestalten wir wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_CreateNewForm()\r\n     <span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form\r\n     <span style=\"color:blue;\">Dim <\/span>strForm<span style=\"color:blue;\"> As String<\/span>\r\n     strForm = \"frmNeuesFormular\"\r\n     <span style=\"color:blue;\">If <\/span>CreateNewForm(strForm) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         DoCmd.OpenForm strForm, acDesign\r\n         <span style=\"color:blue;\">Set<\/span> frm = Forms(strForm)\r\n         <span style=\"color:blue;\">With<\/span> frm\r\n             ''Eigenschaften einstellen\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier schreiben wir den Namen des zu erstellenden Formulars direkt in eine Variable, weil wir diesen mehr als einmal ben&ouml;tigen und anschlie&szlig;ende &Auml;nderungen so nur an einer Stelle erfolgen m&uuml;ssen. Dann erstellen wir das neue Formular mit der Funktion <b>CreateNewForm<\/b>.<\/p>\n<p>Ist dies erfolgreich, &ouml;ffnen wir das neu erstellte Formular mit <b>DoCmd.OpenForm <\/b>in der Entwurfsansicht. Dazu stellen wir den zweiten Parameter <b>View<\/b> auf <b>acDesign <\/b>ein.<\/p>\n<p>Damit wir danach komfortabel die Eigenschaften des Formulars einstellen k&ouml;nnen, referenzieren wir das Formular dann &uuml;ber die <b>Forms<\/b>-Auflistung und den Namen des Formulars mit der <b>Form<\/b>-Variablen <b>frm<\/b>. F&uuml;r <b>frm <\/b>stellen wir dann die nachfolgend beschriebenen Eigenschaften ein.<\/p>\n<h2>Einstellungen f&uuml;r die Titelleiste<\/h2>\n<p>Die Titelleiste des Formulars (siehe Bild 2) verwendet gleich mehrere Eigenschaften.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_1332_002.png\" alt=\"Elemente der Titelleiste eines Formulars\" width=\"524,559\" height=\"224,8109\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Elemente der Titelleiste eines Formulars<\/span><\/b><\/p>\n<ul>\n<li>Die Titelleiste des Formulars stellen wir mit der Eigenschaft <b>Caption <\/b>ein.<\/li>\n<li>Ob das Formular das gleiche Icon anzeigen soll wie die Hauptanwendung, legen Sie &uuml;brigens nicht mit einer Formular-Eigenschaft fest, sondern in den Access-Optionen mit der Option <b>Als Formular- und Berichtssymbol verwenden<\/b>. Dies gilt dann f&uuml;r alle Formulare und Berichte.<\/li>\n<li>Ob die <b>Schlie&szlig;en<\/b>-Schaltfl&auml;che aktiviert ist, stellen sie mit der Eigenschaft <b>CloseButton <\/b>ein. Legen Sie den Wert auf False fest, wird die Schaltfl&auml;che ausgegraut dargestellt und der Benutzer kann sie nicht bet&auml;tigen.<\/li>\n<li>Die Schaltfl&auml;chen in der Titelleiste zum Minimieren und Maximieren des Fensters k&ouml;nnen Sie &uuml;ber die Benutzeroberfl&auml;che mit der Eigenschaft <b>MinMaxSchaltfl&auml;chen <\/b>einstellen, &uuml;ber VBA mit <b>MinMaxButtons<\/b>. Die m&ouml;glichen Werte sind: <b>0 <\/b>(<b>Keine<\/b>), <b>1 <\/b>(<b>Min vorhanden<\/b>), <b>2 <\/b>(<b>Max vorhanden<\/b>) oder <b>3 <\/b>(<b>Beide vorhanden<\/b>).<\/li>\n<li>Die Eigenschaft <b>Mit Systemfeldmen&uuml; <\/b>(<b>ControlBox<\/b>) stellt ein, ob &uuml;berhaupt Steuerelemente in der Titelleiste angezeigt werden sollen. Falls nicht, sieht die Titelleiste wie in Bild 3 aus.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_1332_005.png\" alt=\"Titelleiste nur mit &Uuml;berschrift\" width=\"499,5589\" height=\"165,5681\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Titelleiste nur mit &Uuml;berschrift<\/span><\/b><\/p>\n<\/ul>\n<h2>Abmessungen<\/h2>\n<p>Die Abmessungen des Formulars wie die H&ouml;he und die Breite stellen Sie mit Eigenschaften f&uuml;r verschiedene Elemente ein. Die <b>Breite <\/b>ist eine Formular-Eigenschaft, diese entspricht der VBA-Eigenschaft <b>Width<\/b>. Eine Eigenschaft namens <b>H&ouml;he <\/b>beziehungsweise <b>Height <\/b>vermissen wir allerdings im Eigenschaftenblatt. Der Grund ist einfach: Ein Formular kann mehrere Bereiche enthalten, die jeweils eine eigene H&ouml;he haben &#8211; zum Beispiel der Detailbereich oder Formularkopf und -Fu&szlig;. Die Einstellungen dieser Bereiche besprechen wir weiter unten.<\/p>\n<h2>Standardansicht<\/h2>\n<p>Die Standardansicht stellt die Eigenschaft <b>DefaultView <\/b>ein. Diese nimmt die Werte der Enumeration <b>acDefView<\/b> entgegen: <\/p>\n<ul>\n<li><b>acDefViewContinuous <\/b>(<b>1<\/b>): Endlosformular<\/li>\n<li><b>acDefViewDatasheet <\/b>(<b>2<\/b>): Datenblatt<\/li>\n<li><b>acDefViewSingle <\/b>(<b>0<\/b>): Einzelnes Formular<\/li>\n<li><b>acDefViewSplitForm <\/b>(<b>5<\/b>): Geteiltes Formular <\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Beispiel zum Einstellen der Eigenschaft <b>Standardansicht <\/b>auf <b>Datenblatt<\/b>:<\/p>\n<pre>frm.DefaultView = acViewDatasheet<\/pre>\n<h2>Erlaubte Ansichten einstellen<\/h2>\n<p>Wenn Sie verhindern wollen, dass die Benutzer zwischen verschiedenen Ansichten wechseln, nutzen Sie die Eigenschaft <b>ViewsAllowed <\/b>dazu.<\/p>\n<p>M&ouml;gliche Werte:<\/p>\n<ul>\n<li><b>0<\/b>: Formularansicht und Datenblattansicht m&ouml;glich<\/li>\n<li><b>1<\/b>: Kein Wechsel von der Formularansicht zur Datenblattansicht m&ouml;glich<\/li>\n<li><b>2<\/b>: Kein Wechsel von der Datenblattansicht zur Formularansicht m&ouml;glich<\/li>\n<\/ul>\n<h2>Sichtbarkeit<\/h2>\n<p>Mit der Eigenschaft <b>Sichtbar <\/b>(<b>Visible<\/b>) k&ouml;nnen Sie das Formular ein- und ausblenden.<\/p>\n<h2>Eigenschaften f&uuml;r geteilte Formulare<\/h2>\n<p>Wenn das Formular &uuml;ber die Eigenschaft <b>DefaultView <\/b>als geteiltes Formular angezeigt wird, werden die folgenden Eigenschaften ausgewertet:<\/p>\n<ul>\n<li><b>Gr&ouml;&szlig;e des geteilten Formulars <\/b>(<b>SplitFormSize<\/b>) gibt je nach der mit <b>SplitFormOrientation <\/b>gew&auml;hlten Position die H&ouml;he oder Breite des Detailbereichs des geteilten Formulars an. Diese wird im Eigenschaftenblatt in Zentimeter und unter VBA in Twips angegeben.<\/li>\n<li><b>Ausrichtung des geteilten Formulars <\/b>(<b>SplitFormOrientation<\/b>): Gibt an, wo das Datenblatt angezeigt werden soll. Es gibt die folgenden Werte: <b>acDatasheetOnBottom <\/b>(<b>1<\/b>), <b>acDatasheetOnLeft <\/b>(<b>2<\/b>), <b>acDatasheetOnRight <\/b>(<b>3<\/b>) und <b>acDatasheetOnTop <\/b>(<b>0<\/b>).<\/li>\n<li><b>Teilerleiste des geteilten Formulars <\/b>(<b>SplitFormSplitterBar<\/b>): Gibt an, ob die Leiste zwischen den beiden Formularbereichen angezeigt werden soll. Wenn der Benutzer die H&ouml;he\/Breite der Bereiche nicht anpassen k&ouml;nnen soll, stellen Sie diese Eigenschaft auf <b>False <\/b>ein.<\/li>\n<li><b>Datenblatt des geteilten Formulars <\/b>(<b>SplitFormDatasheet<\/b>): Hier k&ouml;nnen Sie festlegen, ob Bearbeitungen im Datenblatt zul&auml;ssig sein sollen. Es gibt die beiden Werte <b>Bearbeitungen zulassen <\/b>(<b>acDatasheetAllowEdits<\/b>) oder <b>Schreibgesch&uuml;tzt <\/b>(<b>acDatasheetReadOnly<\/b>.).<\/li>\n<li><b>Drucken des geteilten Formulars <\/b>(<b>SplitFormPrinting<\/b>): Hiermit legen Sie fest, welcher Bereich des geteilten Formulars im Fall der F&auml;lle gedruckt werden soll. Die Eigenschaft nimmt die Werte <b>Nur Datenblatt <\/b>(<b>acGridOnly<\/b>) oder <b>Nur Formular <\/b>(<b>acFormOnly<\/b>) entgegen.<\/li>\n<li><b>Position der Teilerleiste speichern <\/b>(<b>SaveSplitterBarPosition<\/b>): Legt fest, ob die Position der Teilerleiste gespeichert werden soll, wenn diese beim Bearbeiten des ge&ouml;ffneten Formulars mit der Maus verschoben wurde. Beim Schlie&szlig;en wird dann abgefragt, ob die Position so wie ge&auml;ndert erhalten werden soll.<\/li>\n<\/ul>\n<h2>Einstellungen f&uuml;r die Anzeige des Formulars<\/h2>\n<p>Die folgenden Einstellungen blenden verschiedene Formularelemente ein- oder aus, au&szlig;erdem enthalten sie Informationen &uuml;ber den Zustand zu modalen und Popup-Fenstern.<\/p>\n<p>Die nachfolgend beschriebenen Elemente finden Sie teilweise im Screenshot aus Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_1332_004.png\" alt=\"Ein- und ausblendbare Elemente im Formular\" width=\"474,5589\" height=\"263,7303\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ein- und ausblendbare Elemente im Formular<\/span><\/b><\/p>\n<ul>\n<li><b>Automatisch zentrieren <\/b>(<b>AutoCenter<\/b>): Legt fest, ob das Formular beim &Ouml;ffnen automatisch im Access-Fenster zentriert werden soll.<\/li>\n<li><b>Datensatzmarkierer <\/b>(<b>RecordSelectors<\/b>): Aktiviert die Anzeige des Datensatzmarkierers (siehe Screenshot unter 1)<\/li>\n<li><b>Navigationsschaltfl&auml;chen <\/b>(<b>NavigationButtons<\/b>): Aktiviert die Anzeige der Navigationsschaltfl&auml;chen (siehe Screenshot unter 3).<\/li>\n<li><b>Navigationsbeschriftung <\/b>(<b>NavigationCaption<\/b>): Stellt die Beschriftung der Navigationsschaltfl&auml;chen ein. Diese Beschriftung wird dort angezeigt, wo normalerweise <b>Datensatz: <\/b>steht (siehe Screenshot unter 2).<\/li>\n<li><b>Trennlinien <\/b>(<b>DividingLines<\/b>): Legt fest, ob im Endlosformular Trennlinien zwischen den Datens&auml;tzen angezeigt werden.<\/li>\n<li><b>Bildlaufleisten <\/b>(<b>ScrollBars<\/b>): Stellt ein, ob Bildlaufleisten angezeigt werden sollen. Es gibt die folgenden Einstellungen: <b>0<\/b>: <b>Nein<\/b>, <b>1<\/b>: <b>Nur horizontal<\/b>, <b>2<\/b>: <b>Nur vertikal <\/b>und <b>3<\/b>: <b>In beide Richtungen<\/b> (siehe Screenshot unter 4)<\/li>\n<li><b>Rahmenart <\/b>(<b>BorderStyle<\/b>): Gibt an, welche Rahmenart f&uuml;r Titelzeile, Formularrahmen et cetera verwendet werden soll. Es gibt die Werte <b>0 <\/b>(<b>Keine<\/b>), <b>1 <\/b>(<b>Extra d&uuml;nn<\/b>), <b>2 <\/b>(<b>Ver&auml;nderbar<\/b>) und <b>3 <\/b>(<b>Dialog<\/b>).<\/li>\n<\/ul>\n<p>Au&szlig;erdem gibt es noch zwei Eigenschaften, welche beide auf <b>True <\/b>eingestellt werden, wenn Sie das Formular mit <b>DoCmd.OpenForm <\/b>mit dem Wert <b>acDialog <\/b>f&uuml;r den Parameter <b>WindowMode <\/b>&ouml;ffnen:<\/p>\n<pre>DoCmd.OpenForm \"frmBeispiel\", WindowMode:=acDialog<\/pre>\n<p>Die Eigenschaften lauten <b>Popup <\/b>(im Eigenschaftenblatt und unter VBA) und <b>Modal <\/b>(nur unter VBA verf&uuml;gbar). Wenn Sie ein Formular wie oben &ouml;ffnen, weisen diese beiden Eigenschaften beide den Wert <b>True <\/b>auf. Wenn Sie beide beim Erstellen auf True einstellen, wird das Formular immer als modaler Dialog ge&ouml;ffnet.<\/p>\n<h2>Ribbon und Men&uuml;s<\/h2>\n<p>Auch zum Festlegen des Ribbons, das mit einem Formular angezeigt werden soll und zu den Men&uuml;s, die mit Access 2003 abgek&uuml;ndigt wurden, gibt es einige Eigenschaften. Das Ribbon eines Formulars stellen Sie mit der Eigenschaft <b>Name des Men&uuml;bands <\/b>(<b>RibbonName<\/b>) ein. Hier geben Sie den Namen eines der Eintr&auml;ge der Tabelle <b>USysRegInfo <\/b>ein. Die &uuml;brigen Eigenschaften wollen wir nur der Vollst&auml;ndigkeit halber erw&auml;hnen. Mit <b>Men&uuml;leiste <\/b>(<b>MenuBar<\/b>) und <b>Symbolleiste <\/b>(<b>Toolbar<\/b>) geben Sie die mit einem Formular anzuzeigenden Men&uuml;s an. Die Eigenschaft <b>Kontextmen&uuml;leiste <\/b>(<b>ShortcutMenuBar<\/b>) hingegen k&ouml;nnen Sie auch unter Access 2007 und neuer noch verwenden. Voraussetzung ist, dass Sie beispielsweise mit dem folgenden Code eine solche Kontextmen&uuml;leiste erstellt haben:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n<span style=\"color:blue;\">Dim <\/span>cbc<span style=\"color:blue;\"> As <\/span>CommandBarButton\r\nOn Error Resume <span style=\"color:blue;\">Next<\/span>\r\nCommandBars(\"cbrKontextmenue\").Delete\r\n<span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">Set<\/span> cbr = CommandBars.Add(\"cbrKontextmenue\",  msoBarPopup, False, <span style=\"color:blue;\">True<\/span>)\r\n<span style=\"color:blue;\">Set<\/span> cbc = cbr.Controls.Add(msoControlButton)\r\n<span style=\"color:blue;\">With<\/span> cbc\r\n     .Caption = \"Beispielbutton\"\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Danach k&ouml;nnen Sie das Kontextmen&uuml; aus der Liste im Eigenschaftenblatt ausw&auml;hlen und es auch der Eigenschaft <b>ShortCutMenuBar <\/b>zuweisen:<\/p>\n<pre>frm.ShortCutMenuBar = \"cbrKontextmenue\"<\/pre>\n<p>Mit der Eigenschaft <b>Kontextmen&uuml; <\/b>(<b>ShortcutMenu<\/b>) legen Sie fest, ob das Formular &uuml;berhaupt ein Kontextmen&uuml; anzeigen soll. Damit deaktivieren Sie sowohl eingebaute als auch benutzerdefinierte Kontextmen&uuml;s.<\/p>\n<h2>Dateneinstellungen<\/h2>\n<p>Die Eigenschaft <b>Datensatzquelle <\/b>(<b>RecordSource<\/b>) stellt die Tabelle oder Abfrage ein, deren Daten im Formular angezeigt werden k&ouml;nnen.<\/p>\n<p>Mit der Eigenschaft <b>Zyklus <\/b>(<b>Cycle<\/b>) stellen Sie ein, ob beim Verlassen des letzten Feldes zum ersten Feld der Aktivierreihenfolge oder umgekehrt etwa mit der Tabulator- oder der Eingabetaste der Datensatz gewechselt werden soll. Die Eigenschaft kann die Werte <b>0 <\/b>(<b>Alle Datens&auml;tze<\/b>),  <b>1 <\/b>(<b>Aktueller Datensatz<\/b>) und <b>2 <\/b>(<b>Aktuelle Seite<\/b>) annehmen.<\/p>\n<p>Die Eigenschaft <b>Standardwerte abrufen <\/b>(<b>FetchDefaults<\/b>) gibt an, ob Standardwerte f&uuml;r Datens&auml;tze schon vor dem Speichern angezeigt werden sollen.<\/p>\n<h2>Datenoperationen erlauben oder verbieten<\/h2>\n<p>Die folgenden Eigenschaften dienen dazu, verschiedene Operationen mit Daten zu erlauben oder zu unterbinden:<\/p>\n<ul>\n<li><b>Daten eingeben <\/b>(<b>DataEntry<\/b>): Legt fest, ob das Formular beim &Ouml;ffnen nur einen neuen, leeren Datensatz anzeigt (<b>True<\/b>) oder ob alle Datens&auml;tze angezeigt werden sollen (<b>False<\/b>).<\/li>\n<li><b>Anf&uuml;gen zulassen <\/b>(<b>AllowAdditions<\/b>): Legt fest, ob neue Datens&auml;tze hinzugef&uuml;gt werden k&ouml;nnen.<\/li>\n<li><b>L&ouml;schen zulassen <\/b>(<b>AllowDeletions<\/b>): Legt fest, ob Datens&auml;tze gel&ouml;scht werden k&ouml;nnen.<\/li>\n<li><b>Bearbeitungen zulassen <\/b>(<b>AllowEdits<\/b>): Legt fest, ob Datens&auml;tze bearbeitet werden k&ouml;nnen.<\/li>\n<li><b>Filter zulassen <\/b>(<b>AllowFilters<\/b>): Legt fest, ob Filter gesetzt werden d&uuml;rfen.<\/li>\n<li><b>Recordsettyp <\/b>(<b>RecordsetType<\/b>): Legt den Recordset-Typ f&uuml;r das Formular fest. Kann die folgenden Werte annehmen: <b>0 <\/b>(Dynaset), <b>1 <\/b>(Dynaset mit inkonsistenten Updates) und <b>2 <\/b>(Snapshot)<\/li>\n<li><b>Datens&auml;tze sperren <\/b>(<b>RecordLocks<\/b>): Gibt an, ob Datens&auml;tze beim Bearbeiten gesperrt werden sollen. M&ouml;gliche Werte: <b>Keine Sperrungen <\/b>(<b>0<\/b>), <b>Alle Datens&auml;tze <\/b>(<b>1<\/b>) oder <b>Bearbeiteter Datensatz <\/b>(<b>2<\/b>).<\/li>\n<\/ul>\n<h2>Filter und Sortierung<\/h2>\n<p>Zum Filtern und Sortieren gibt es diese Eigenschaften:<\/p>\n<ul>\n<li><b>Filter <\/b>(<b>Filter<\/b>): Gibt einen Filterausdruck an, der auf die Daten des Formulars angewendet werden soll.<\/li>\n<li><b>FilterOn <\/b>gibt es nur als VBA-Eigenschaft, aber nicht im Eigenschaftenblatt. Sie m&uuml;ssen es per VBA auf <b>True <\/b>einstellen, damit der in Filter angegebene Filterausdruck angewendet wird. Wenn Sie einen Filter f&uuml;r die Eigenschaft im Eigenschaftenblatt angeben, wird <b>FilterOn <\/b>automatisch auf <b>True <\/b>eingestellt.<\/li>\n<li><b>Beim Laden filtern <\/b>(<b>FilterOnLoad<\/b>): Legt fest, ob der mit <b>Filter <\/b>angegebene Filter direkt beim Laden ausgel&ouml;st werden soll.<\/li>\n<li><b>Sortiert nach <\/b>(<b>OrderBy<\/b>): Erwartet einen Ausdruck, der die Felder enth&auml;lt, nach denen sortiert werden soll, sowie die Angabe der Sortierung (<b>ASC <\/b>oder <b>DESC<\/b>).<\/li>\n<li><b>OrderByOn<\/b>: gibt es nur als VBA-Eigenschaft, aber nicht im Eigenschaftenblatt. Sie m&uuml;ssen es per VBA auf <b>True <\/b>einstellen, damit der in <b>OrderBy <\/b>angegebene Sortierausdruck angewendet wird. Wenn Sie eine Sortierung f&uuml;r die Eigenschaft im Eigenschaftenblatt angeben, wird <b>OrderByOn <\/b>automatisch auf <b>True <\/b>eingestellt.<\/li>\n<li><b>Beim Laden sortieren <\/b>(<b>OrderByOnLoad<\/b>): Legt fest, ob die mit <b>OrderBy <\/b>angegebene Sortierung direkt beim Laden ausgel&ouml;st werden soll.<\/li>\n<\/ul>\n<h2>Ansichten zulassen<\/h2>\n<p>Die folgenden Eigenschaften erlauben oder unterbinden verschiedene Ansichten von Formularen:<\/p>\n<ul>\n<li><b>Formularansicht zulassen <\/b>(<b>AllowFormView<\/b>): Legt fest, ob die Formularansicht m&ouml;glich ist.<\/li>\n<li><b>Datenblattansicht zulassen <\/b>(<b>AllowDatasheetView<\/b>): Legt fest, ob die Datenblattansicht zul&auml;ssig ist.<\/li>\n<li><b>Layoutansicht zulassen <\/b>(<b>AllowLayoutView<\/b>): Legt fest, ob die Layoutansicht zul&auml;ssig ist.<\/li>\n<\/ul>\n<h2>Bilder<\/h2>\n<p>Sie k&ouml;nnen dem Formular &uuml;ber die Schaltfl&auml;che mit den drei Punkten neben der Eigenschaft <b>Bild <\/b>eine Bilddatei zuweisen. Diese wird anschlie&szlig;end in der Tabelle <b>MSysResources <\/b>gespeichert, sodass es auch in anderen Formularen direkt durch &uuml;ber die Eigenschaft <b>Bild <\/b>gew&auml;hlt werden kann. Anschlie&szlig;end k&ouml;nnen Sie das Bild mit den folgenden Eigenschaften einstellen und seine Ansicht anpassen:<\/p>\n<ul>\n<li><b>Bild <\/b>(<b>Picture<\/b>): Legt fest, welches Bild im Formular angezeigt werden soll.<\/li>\n<li><b>Bildtyp <\/b>(<b>PictureType<\/b>): Kann die folgenden Werte annehmen: <b>Eingebettet <\/b>(<b>0<\/b>): Das Bild wird im Formularcode eingebettet, was verh&auml;ltnism&auml;&szlig;ig viel Speicherplatz in der Datenbank beansprucht, <b>Verkn&uuml;pft <\/b>(<b>1<\/b>): Verkn&uuml;pft die Bilddatei von der Festplatte und <b>Freigegeben <\/b>(<b>2<\/b>): Zeigt eine Bilddatei aus der Tabelle <b>MSysResources <\/b>an.<\/li>\n<li><b>Bild nebeneinander <\/b>(<b>PictureTiling<\/b>): Gibt an, ob das Bild mehrfach angezeigt werden soll.<\/li>\n<li><b>Bildausrichtung <\/b>(<b>PictureAlignment<\/b>): Kann die Werte <b>Links oben <\/b>(<b>0<\/b>), <b>Rechts oben <\/b>(<b>1<\/b>), <b>Mitte <\/b>(<b>2<\/b>), <b>Links unten <\/b>(<b>3<\/b>), <b>Rechts unten <\/b>(<b>4<\/b>) oder <b>Formularmitte <\/b>(<b>5<\/b>) annehmen.<\/li>\n<li><b>Bildgr&ouml;&szlig;enmodus <\/b>(<b>PictureSizeMode<\/b>): <b>Abschneiden <\/b>(<b>0<\/b>), <b>Dehnen <\/b>(<b>1<\/b>), <b>Zoomen <\/b>(<b>3<\/b>), <b>Horizontal dehnen <\/b>(<b>4<\/b>), <b>Vertikal dehnen <\/b>(<b>5<\/b>)<\/li>\n<\/ul>\n<h2>Gr&ouml;&szlig;eneinstellungen<\/h2>\n<p>Mit der Eigenschaft <b>Gr&ouml;&szlig;e anpassen <\/b>(<b>AutoResize<\/b>) legen Sie fest, ob das Formular automatisch an die Gr&ouml;&szlig;e des im Entwurf sichtbaren Bereichs angepasst wird oder ob das Formular die Gr&ouml;&szlig;e annehmen soll, die es beim letzten Schlie&szlig;en hatte.<\/p>\n<p>Mit der Eigenschaft <b>An Bildschirmgr&ouml;&szlig;e anpassen <\/b>(<b>FitToScreen<\/b>) stellen Sie ein, ob die Breite des Formulars auf die Breite des Bildschirm reduziert wird. Die Eigenschaft <b>Verschiebbar <\/b>(<b>Moveable<\/b>) gibt an, ob der Benutzer das Formular verschieben k&ouml;nnen soll.<\/p>\n<h2>Eigenschaften f&uuml;r Unterdatenbl&auml;tter<\/h2>\n<p>Wenn Sie im Formular Unterdatenbl&auml;tter anzeigen wollen, k&ouml;nnen Sie diese mit verschiedenen Eigenschaften einstellen:<\/p>\n<ul>\n<li><b>Unterdatenblatt erweitert <\/b>(<b>SubdatasheetExpanded<\/b>): Gibt an, ob die Unterdatenbl&auml;tter direkt aufgeklappt angezeigt werden sollen.<\/li>\n<li><b>Unterdatenblatth&ouml;he <\/b>(<b>SubdatasheetHeight<\/b>): Gibt die H&ouml;he der Unterdatenbl&auml;tter an.<\/li>\n<\/ul>\n<h2>Eigenschaften zum Drucken<\/h2>\n<p>Man kann nicht nur Berichte drucken, sondern auch den Inhalt von Formularen. Auch wenn das nicht g&auml;ngig ist, hier die m&ouml;glichen Eigenschaften daf&uuml;r:<\/p>\n<ul>\n<li><b>Drucklayout <\/b>(<b>LayoutForPrint<\/b>): Stellt ein, ob beim Drucken eines Formulars <b>Druckerschriftarten <\/b>(<b>True<\/b>) oder <b>Bildschirmschriftarten <\/b>(<b>False<\/b>) verwendet werden sollen.<\/li>\n<li><b>Ausrichtung <\/b>(<b>Orientation<\/b>): Kann die folgenden Werte annehmen: <b>Von links nach rechts <\/b>(<b>0<\/b>) oder <b>Von rechts nach links <\/b>(<b>1<\/b>)<\/li>\n<li><b>Standardpapierformat verwenden <\/b>(<b>UseDefaultPaperSize<\/b>): Gibt an, ob das Standardpapierformat des Druckers verwendet wird (<b>True<\/b>) oder das im Formularentwurf angegebene Papierformat (<b>False<\/b>).<\/li>\n<li><b>Schneller Laserdruck <\/b>(<b>FastLaserPrinting<\/b>): Wenn aktiviert, werden Linien beim Drucken durch Unterstriche (<b>_<\/b>) und vertikale Striche (<b>|<\/b>) ersetzt.<\/li>\n<li><b>PrtMip<\/b>: Enth&auml;lt einige Eigenschaften f&uuml;r das Drucken von Formularen.<\/li>\n<\/ul>\n<h2>Eigenschaften f&uuml;r den Entwurf<\/h2>\n<p>Die beiden Eigenschaften <b>Raster X <\/b>(<b>GridX<\/b>) und <b>Raster Y <\/b>(<b>GridY<\/b>) geben an, wie viele Unterteilungen pro K&auml;stchen in der Entwurfsansicht zum Ausrichten von Steuerelementen vorgesehen werden sollen.<\/p>\n<p>Der Wert kann von 1 bis 64 reichen.<\/p>\n<h2>Eigenschaften f&uuml;r die Onlinehilfe<\/h2>\n<p>Mit der Eigenschaft <b>Hilfedatei <\/b>(<b>HelpFile<\/b>) k&ouml;nnen Sie eine Hilfedatei angeben, mit <b>Hilfekontext-ID <\/b>(<b>HelpContextID<\/b>) legen Sie die ID fest, unter der in dieser Datei Hilfe f&uuml;r das aktuelle Formular zu finden ist.<\/p>\n<h2>Eigenschaften f&uuml;r die Datenblattansicht<\/h2>\n<p>F&uuml;r die Datenblattansicht gibt es einige spezielle Eigenschaften:<\/p>\n<ul>\n<li><b>DatasheetFontName<\/b>: Schriftart in der Datenblattansicht<\/li>\n<li><b>DatasheetFontHeight<\/b>: Schriftgr&ouml;&szlig;e in der Datenblattansicht<\/li>\n<li><b>DatasheetFontWeight<\/b>: Schriftdicke in der Datenblattansicht<\/li>\n<li><b>DatasheetFontItalic<\/b>: Angabe, ob die Schrift in der Datenblattansicht kursiv ist<\/li>\n<li><b>DatasheetFontUnderline<\/b>: Angabe, ob die Schrift in der Datenblattansicht unterstrichen ist<\/li>\n<li><b>DatasheetGridlinesBehavior<\/b>: Aussehen der Gitternetzlinien, es gibt die Werte <b>acGridlinesNone <\/b>(keine Gitternetzlinien), <b>acGridlinesHoriz <\/b>(nur horizontale Gitternetzlinien), <b>acGridlinesVert <\/b>(nur vertikale Gitternetzlinien) und <b>acGridlinesBoth <\/b>(Horizontale und vertikale Gitternetzlinien).<\/li>\n<li><b>DatasheetGridlinesColor <\/b>Farbe der Gitternetzlinien im Datenblatt<\/li>\n<li><b>DatasheetCellsEffect<\/b>: Effekt der Zellen im Datenblatt mit den Werten <b>acEffectNormal<\/b>&nbsp;&nbsp;&nbsp;&nbsp;(Standardeinstellung), <b>acEffectRaised <\/b>(erh&ouml;hte Darstellung) und <b>acEffectSunken <\/b>(vertiefte Darstellung)<\/li>\n<li><b>DatasheetForeColor<\/b>: Farbe f&uuml;r den Text in der Datenblattansicht<\/li>\n<li><b>ShowGrid<\/b>: Gibt an, ob Gitternetzlinien angezeigt werden.<\/li>\n<li><b>DatasheetBackColor<\/b>: Hintergrundfarbe der Zellen im Datenblatt<\/li>\n<li><b>DatasheetAlternateBackColor<\/b>: Alternierende Hintergrundfarbe der Zellen im Datenblatt<\/li>\n<li><b>DatasheetBorderLineStyle<\/b>: Gibt die Linienart f&uuml;r die Rahmen im Datenblatt an. Kann die Werte <b>0 <\/b>(transparent), <b>1 <\/b>(Einfarbig), <b>2 <\/b>(Dashes), <b>3 <\/b>(Kurze Strichlinien), <b>4 <\/b>(Punkte), <b>5 <\/b>(Wenige Punkte), <b>6 <\/b>(Dash-dot), <b>7 <\/b>(Dash-dot-dot) oder <b>8 <\/b>(Doppelt durchgezogen) annehmen.<\/li>\n<li><b>HorizontalDatasheetGridlineStyle<\/b>: Gibt die Linienart f&uuml;r die horizontalen Linien im Datenblatt an. Kann die Werte <b>0 <\/b>(transparent), <b>1 <\/b>(Einfarbig), <b>2 <\/b>(Dashes), <b>3 <\/b>(Kurze Strichlinien), <b>4 <\/b>(Punkte), <b>5 <\/b>(Wenige Punkte), <b>6 <\/b>(Dash-dot) oder <b>7 <\/b>(Dash-dot-dot) annehmen.<\/li>\n<li><b>VerticalDatasheetGridlineStyle<\/b>: Gibt die Linienart f&uuml;r die vertikalen Linien im Datenblatt an. Kann die Werte <b>0 <\/b>(transparent), <b>1 <\/b>(Einfarbig), <b>2 <\/b>(Dashes), <b>3 <\/b>(Kurze Strichlinien), <b>4 <\/b>(Punkte), <b>5 <\/b>(Wenige Punkte), <b>6 <\/b>(Dash-dot) oder <b>7 <\/b>(Dash-dot-dot) annehmen. <\/li>\n<li><b>DatasheetColumnHeaderUnderlineStyle<\/b>: Gibt die Linienart f&uuml;r die Linien zwischen Spalten&uuml;berschriften und Daten im Datenblatt an. Kann die Werte <b>0 <\/b>(transparent), <b>1 <\/b>(Einfarbig), <b>2 <\/b>(Dashes), <b>3 <\/b>(Kurze Strichlinien), <b>4 <\/b>(Punkte), <b>5 <\/b>(Wenige Punkte), <b>6 <\/b>(Dash-dot), <b>7 <\/b>(Dash-dot-dot) oder <b>8 <\/b>(Doppelt durchgezogen) annehmen.<\/li>\n<li><b>RowHeight<\/b>: Zeilenh&ouml;he in der Datenblattansicht<\/li>\n<\/ul>\n<h2>Weitere Eigenschaften<\/h2>\n<p>Einige Eigenschaften lassen sich nicht den &uuml;brigen Kategorien zuordnen:<\/p>\n<ul>\n<li><b>Marke <\/b>(<b>Tag<\/b>): Kann zus&auml;tzliche Informationen speichern, die Sie von beliebiger Stelle abrufen k&ouml;nnen. <\/li>\n<li><b>Hwnd<\/b>: Liefert das Handle f&uuml;r das Formular-Objekt.<\/li>\n<li><b>Palettenherkunft <\/b>(<b>PaletteSource<\/b>): Gibt eine Farbpalette an, die f&uuml;r das Formular verwendet werden soll.<\/li>\n<li><b>Painting<\/b>: Gibt an, ob die Anzeige des Formulars aktualisiert werden soll. Diese Eigenschaft kann man beispielsweise auf <b>False <\/b>einstellen, wenn ansonsten starkes Flackern auftreten w&uuml;rde &#8211; man darf nur nicht vergessen, sie wieder auf <b>True <\/b>einzustellen, damit nachfolgende &Auml;nderungen noch angezeigt werden.<\/li>\n<\/ul>\n<h2>Klassenmodul hinzuf&uuml;gen<\/h2>\n<p>Eine wichtige Voraussetzung f&uuml;r das Anlegen von Formularereignissen ist das Vorhandensein eines Klassenmoduls f&uuml;r das Formular. F&uuml;gen Sie per Benutzeroberfl&auml;che eine Ereignisprozedur hinzu, stellt dies automatisch die Eigenschaft <b>HasModule <\/b>auf den Wert <b>True <\/b>ein (normalerweise steht dieser auf <b>False<\/b>, da ein frisch angelegtes Formular noch kein Klassenmodul hat). Manchmal ist es sinnvoll, diese Eigenschaft auf <b>True <\/b>einzustellen, auch wenn Sie keine Ereignisprozeduren im Klassenmodul des Formulars selbst unterbringen wollen. Wenn Sie jedoch Ereignisprozeduren f&uuml;r das Formular oder dessen Steuerelemente in einer anderen Klasse implementieren wollen (Stichwort <b>WithEvents<\/b>), dann muss das Formular ein Klassenmodul haben.<\/p>\n<h2>Eigenschaften f&uuml;r Formularereignisse<\/h2>\n<p>Wenn Sie schon Formulare und Steuerelemente per Code anlegen, dann wollen Sie gegebenenfalls auch entsprechende Ereignisprozeduren f&uuml;r diese Elemente hinterlegen. Wie Sie Ereignisprozeduren hinzuf&uuml;gen, erfahren Sie im Beitrag <b>VBA-Projekte per VBA erstellen<\/b> (<b>www.access-im-unternehmen.de\/1337<\/b>).<\/p>\n<p>Im vorliegenden Beitrag lernen Sie die Eigenschaften kennen, die Sie einstellen m&uuml;ssen, damit &uuml;berhaupt eine Ereignisprozedur f&uuml;r ein bestimmtes Ereignis ausgef&uuml;hrt wird. Das bedeutet, dass Sie f&uuml;r die passende Ereigniseigenschaft den Wert <b>[Event Procedure] <\/b>hinterlegen, was im Eigenschaftenblatt der deutschsprachigen Version von Access dem Wert <b>[Ereignisprozedur] <\/b>entspricht. Bild 5 zeigt die Seite <b>Ereignis <\/b>des Eigenschaftenblatts.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_1332_003.png\" alt=\"Eigenschaftenblatt f&uuml;r die Ereignisse\" width=\"424,5589\" height=\"918,2085\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Eigenschaftenblatt f&uuml;r die Ereignisse<\/span><\/b><\/p>\n<p>Wenn Sie wollen, dass Access im Klassenmodul des Formulars (oder in anderen Klassen, die Ereignisse dieses Formulars implementieren) nach Ereignisprozeduren f&uuml;r ein Ereignis sucht, dann stellen Sie dies wie folgt ein. In diesem Beispiel wollen wir angeben, dass es eine Ereignisnisprozedur f&uuml;r das Ereignis <b>Beim Anzeigen <\/b>gibt:<\/p>\n<pre><span style=\"color:blue;\">With<\/span> frm\r\n     .OnCurrent = \"[Event Procedure]\"\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Die weiteren Ereigniseigenschaften des Formulars f&uuml;hren wir in den folgenden Abschnitten thematisch geordnet auf (jeweils mit der Eigenschaft aus dem Eigenschaftenblatt und dem Namen der Eigenschaft unter VBA):<\/p>\n<h2>Ereignisse f&uuml;r das &Ouml;ffnen, Schlie&szlig;en und Aktivieren<\/h2>\n<p>Rund um das &Ouml;ffnen, Schlie&szlig;en, Aktivieren, Deaktivieren und so weiter werden die folgenden Ereignisse ausgel&ouml;st:<\/p>\n<ul>\n<li><b>Bei Laden<\/b>: <b>OnLoad<\/b><\/li>\n<li><b>Beim &Ouml;ffnen<\/b>: <b>OnOpen<\/b> <\/li>\n<li><b>Beim Schlie&szlig;en<\/b>: <b>OnClose<\/b> <\/li>\n<li><b>Bei Fokuserhalt<\/b>: <b>OnGotFocus<\/b> <\/li>\n<li><b>Bei Fokusverlust<\/b>: <b>OnLostFocus<\/b> <\/li>\n<li><b>Bei Aktivierung<\/b>: <b>OnActivate<\/b> <\/li>\n<li><b>Bei Deaktivierung<\/b>: <b>OnDeactivate<\/b> <\/li>\n<li><b>Beim Entladen<\/b>: <b>OnUnload<\/b><\/li>\n<li><b>Bei Gr&ouml;&szlig;en&auml;nderung<\/b>: <b>OnResize<\/b> <\/li>\n<\/ul>\n<h2>Ereignisse f&uuml;r Mausaktionen<\/h2>\n<p>Beim Bet&auml;tigen der Maus k&ouml;nnen Sie folgende Ereignisse nutzen:<\/p>\n<ul>\n<li><b>Beim Klicken<\/b>: <b>OnClick<\/b><\/li>\n<li><b>Beim Doppelklicken<\/b>: <b>OnDblClick<\/b> <\/li>\n<li><b>Bei Maustaste ab<\/b>: <b>OnMouseDown<\/b> <\/li>\n<li><b>Bei Maustaste auf<\/b>: <b>OnMouseUp<\/b> <\/li>\n<li><b>Bei Mausbewegung<\/b>: <b>OnMouseMove<\/b> <\/li>\n<li><b>Bei Mausrad<\/b>: <b>OnMouseWheel<\/b> <\/li>\n<\/ul>\n<h2>Ereignisse f&uuml;r Tastaturaktionen<\/h2>\n<p>W&auml;hrend der Benutzung der Tastatur l&ouml;st Access die folgenden Ereignisse aus:<\/p>\n<ul>\n<li><b>Bei Taste auf<\/b>: <b>OnKeyUp<\/b> <\/li>\n<li><b>Bei Taste ab<\/b>: <b>OnKeyDown<\/b> <\/li>\n<li><b>Bei Taste<\/b>: <b>OnKeyPress<\/b> <\/li>\n<li><b>Tastenvorschau <\/b>(<b>KeyPreview<\/b>): Gibt an, ob Tastaturereignisse f&uuml;r das Formular vor den Tastaturereignissen f&uuml;r die Steuerelemente abgearbeitet werden sollen.<\/li>\n<\/ul>\n<h2>Ereignisse f&uuml;r Datenoperationen<\/h2>\n<p>Beim Eingeben, L&ouml;schen, &Auml;ndern und Filtern von Daten werden diese Ereignisse ausgel&ouml;st:<\/p>\n<ul>\n<li><b>Nach Aktualisierung<\/b>: <b>AfterUpdate<\/b> <\/li>\n<li><b>Vor Aktualisierung<\/b>: <b>BeforeUpdate<\/b> <\/li>\n<li><b>Vor Eingabe<\/b>: <b>BeforeInsert<\/b> <\/li>\n<li><b>Nach Einf&uuml;gung<\/b>: <b>AfterInsert<\/b> <\/li>\n<li><b>Vor L&ouml;schbest&auml;tigung<\/b>: <b>BeforeDelConfirm<\/b> <\/li>\n<li><b>Beim L&ouml;schen<\/b>: <b>OnDelete<\/b> <\/li>\n<li><b>Nach L&ouml;schbest&auml;tigung<\/b>: <b>AfterDelConfirm<\/b> <\/li>\n<li><b>Bei Ge&auml;ndert<\/b>: <b>OnDirty<\/b> <\/li>\n<li><b>Bei R&uuml;ckg&auml;ngig<\/b>: <b>OnUndo<\/b> <\/li>\n<li><b>Bei Filter<\/b>: <b>OnFilter<\/b> <\/li>\n<li><b>Bei angewendetem Filter<\/b>: <b>OnApplyFilter<\/b> <\/li>\n<\/ul>\n<h2>Ereignis f&uuml;r die Fehlerbehandlung<\/h2>\n<p>Beim Auftreten eines Fehlers l&ouml;st Access dieses Ereignis aus:<\/p>\n<ul>\n<li><b>OnError<\/b>: <b>Bei Fehler<\/b><\/li>\n<\/ul>\n<h2>Ereigniseigenschaften f&uuml;r Timer<\/h2>\n<p>Ist ein Zeitgeberintervall eingestellt, l&ouml;st Access in den angegebenen Abst&auml;nden dieses Ereignis aus:<\/p>\n<ul>\n<li><b>Bei Zeitgeber<\/b>: <b>OnTimer<\/b> <\/li>\n<li><b>Zeitgeberintervall<\/b>: <b>TimerInterval<\/b><\/li>\n<\/ul>\n<h2>Ereigniseigenschaften f&uuml;r die Pivot-Ansichten<\/h2>\n<p>Die Pivot-Ansichten werden f&uuml;r aktuelle Access-Versionen nicht mehr unterst&uuml;tzt, daher listen wir diese hier nur der Vollst&auml;ndigkeit halber auf:<\/p>\n<p><b>Bei Markierungs&auml;nderung <\/b>(<b>OnSelectionChange<\/b>), <b>Vor Rendern <\/b>(<b>BeforeRender<\/b>), <b>Nach Renderabschluss <\/b>(<b>AfterFinalRender<\/b>), <b>Nach Rendern <\/b>(<b>AfterRender<\/b>), <b>Nach Layout <\/b>(<b>AfterLayout<\/b>), <b>Vor Abfrage <\/b>(<b>BeforeQuery<\/b>), <b>Beim Verbinden <\/b>(<b>OnConnect<\/b>), <b>Beim Trennen <\/b>(<b>OnDisconnect<\/b>), <b>Bei Abfrage <\/b>(<b>OnQuery<\/b>), <b>Bei Daten&auml;nderung <\/b>(<b>OnDataChange<\/b>), <b>Bei Datengruppen&auml;nderung <\/b>(<b>OnDataSetChange<\/b>), <b>Bei Ansichts&auml;nderung <\/b>(<b>OnViewChange<\/b>), <b>Bei PivotTable-&Auml;nderung <\/b>(<b>PivotTableChange<\/b>), <b>Vor Quickinfo <\/b>(<b>BeforeScreenTip<\/b>)<\/p>\n<h2>Ereigniseigenschaften f&uuml;r die Office Web Components<\/h2>\n<p>Es gibt auch noch einige Ereigniseigenschaften, die f&uuml;r die Verwendung der Office Web Components gedacht sind.<\/p>\n<p>Auch diese werden jedoch in aktuellen Access-Versionen nicht mehr unterst&uuml;tzt:<\/p>\n<p><b>Bei Befehlsausf&uuml;hrung <\/b>(<b>CommandExecute<\/b>), <b>Bei Befehl vor Ausf&uuml;hrung <\/b>(<b>CommandBeforeExecute<\/b>), <b>Bei Befehl aktiviert <\/b>(<b>CommandEnabled<\/b>), <b>Bei Befehl mit H&auml;kchen <\/b>(<b>CommandChecked<\/b>)<\/p>\n<h2>Eigenschaften der verschiedenen Formularbereiche<\/h2>\n<p>Wie Sie weiter oben schon gelesen haben, gibt es zumindest einen Fall, wo wir nicht direkt mit den Eigenschaften des <b>Form<\/b>-Objekts arbeiten k&ouml;nnen, um das Formular anzupassen (und nein, damit sind nicht die Steuerelemente im Formular gemeint). Dabei handelt es sich um die verschiedenen Formularbereiche.<\/p>\n<p>Diese Bereiche referenzieren wir mit der Section-Eigenschaft, der wir die Konstante f&uuml;r den jeweiligen Bereich als Parameter &uuml;bergeben.<\/p>\n<p>Es gibt diese Konstanten:<\/p>\n<ul>\n<li><b>0 <\/b>(<b>acDetail<\/b>): Detailbereich<\/li>\n<li><b>1 <\/b>(<b>acHeader<\/b>): Formularkopfbereich<\/li>\n<li><b>2 <\/b>(<b>acFooter<\/b>): Formularfu&szlig;bereich<\/li>\n<li><b>3 <\/b>(<b>acPageHeader<\/b>): Seitenkopfbereich<\/li>\n<li><b>4 <\/b>(<b>acPageFooter<\/b>): Seitenfu&szlig;bereich<\/li>\n<\/ul>\n<p>Die Bereiche <b>Seitenkopfbereich <\/b>und <b>Seitenfu&szlig;bereich <\/b>werden nur beim Drucken erscheinen, und da wir keine Formulare, sondern nur Berichte drucken wollen, ber&uuml;cksichtigen wir diese Bereiche im Folgenden nicht mehr.<\/p>\n<h2>Formularkopf und Formularfu&szlig; hinzuf&uuml;gen<\/h2>\n<p>Stattdessen schauen wir uns an, wie wir Formularkopf und Formularfu&szlig; hinzuf&uuml;gen. Dies erledigen wir, indem wir beispielsweise der oben beschriebenen Prozedur nach dem Erstellen des Formulars die folgenden Zeilen hinzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">With<\/span> frm\r\n     RunCommand acCmdFormHdrFtr\r\n     .Section(acHeader).Visible = <span style=\"color:blue;\">True<\/span>\r\n     .Section(acFooter).Visible = <span style=\"color:blue;\">True<\/span>\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Die <b>RunCommand<\/b>-Anweisung f&uuml;gt die Bereiche initial hinzu, mit den beiden Einstellungen der <b>Visible<\/b>-Eigenschaft blenden Sie die Bereiche ein oder aus.<\/p>\n<p>Die Eigenschaften eines Bereichs wie beispielsweise des Detailbereichs finden Sie, wenn Sie die Kopfzeile des Bereichs anklicken (siehe Bild 6). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_1332_006.png\" alt=\"Eigenschaften des Detailbereichs\" width=\"649,559\" height=\"532,8415\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Eigenschaften des Detailbereichs<\/span><\/b><\/p>\n<p>Die Eigenschaften weisen wir dann zu, indem wir zuerst das entsprechende <b>Section<\/b>-Element referenzieren und dann die Eigenschaften angeben &#8211; wie in diesem Beispiel die H&ouml;he:<\/p>\n<pre><span style=\"color:blue;\">With<\/span> frm\r\n     RunCommand acCmdFormHdrFtr\r\n     .Section(acHeader).Visible = <span style=\"color:blue;\">True<\/span>\r\n     .Section(acFooter).Visible = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objSection = .Section(acHeader)\r\n     <span style=\"color:blue;\">With<\/span> objSection\r\n         .Height = 2000\r\n     End <span style=\"color:blue;\">With<\/span>\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Die &uuml;brigen Eigenschaften der einzelnen Bereiche sind schon bekannt beziehungsweise werden nur f&uuml;r das Drucken verwendet.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag liefert die grundlegenden Techniken zum Erstellen von Formularen per VBA. Anschlie&szlig;end folgt die Auflistung aller wichtigen Eigenschaften, die Sie ebenfalls beim Anlegen eines Formulars per VBA nutzen k&ouml;nnen, um das Formular direkt so zu gestalten, wie Sie es auch &uuml;ber die Entwurfsansicht erledigen k&ouml;nnen.<\/p>\n<p>In weiteren Beitr&auml;gen sehen wir uns an, wie Sie Berichte per VBA programmieren k&ouml;nnen: <b>Berichte per VBA erstellen <\/b>(<b>www.access-im-unternehmen.de\/1338<\/b>). Und nat&uuml;rlich wollen wir den Formularen und Berichten auch noch Steuerelemente zuweisen. Wie das f&uuml;r die wichtigsten Steuerelemente gelingt, lernen Sie im Beitrag <b>Steuerelemente per VBA erstellen <\/b>(<b>www.access-im-unternehmen.de\/1336<\/b>).<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FormularPerVBAErstellen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/499EACBE-343B-47CC-B022-90C27CE8F40F\/aiu_1332.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warum sollte man Formulare per VBA erstellen, wenn Microsoft Access doch die gute alte, etwas in die Jahre gekommene Entwurfsansicht daf&uuml;r bereitstellt Ganz einfach: Weil es f&uuml;r den effizient arbeitenden Access-Entwickler immer wieder Aufgaben gibt, die er einfach nicht von Hand erledigen m&ouml;chte. Oder weil der Access-Entwickler immer wiederkehrende Aufgaben in ein Access-Add-In oder ein COM-Add-In auslagern m&ouml;chte. Und dort gibt es nun einmal keine Entwurfsansicht &#8211; dort ist VBA-Code gefragt, um neue Formulare zu erstellen und die gew&uuml;nschten Steuerelemente auf das Formular zu bringen. Dieser Beitrag liefert alle Techniken, die zum Erstellen von Formularen und zum Ausstatten mit Steuerelementen notwendig sind.<\/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":[662021,66062021,44000023],"tags":[],"class_list":["post-55001332","post","type-post","status-publish","format-standard","hentry","category-662021","category-66062021","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>Formulare per VBA erstellen - 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\/Formulare_per_VBA_erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formulare per VBA erstellen\" \/>\n<meta property=\"og:description\" content=\"Warum sollte man Formulare per VBA erstellen, wenn Microsoft Access doch die gute alte, etwas in die Jahre gekommene Entwurfsansicht daf&uuml;r bereitstellt Ganz einfach: Weil es f&uuml;r den effizient arbeitenden Access-Entwickler immer wieder Aufgaben gibt, die er einfach nicht von Hand erledigen m&ouml;chte. Oder weil der Access-Entwickler immer wiederkehrende Aufgaben in ein Access-Add-In oder ein COM-Add-In auslagern m&ouml;chte. Und dort gibt es nun einmal keine Entwurfsansicht - dort ist VBA-Code gefragt, um neue Formulare zu erstellen und die gew&uuml;nschten Steuerelemente auf das Formular zu bringen. Dieser Beitrag liefert alle Techniken, die zum Erstellen von Formularen und zum Ausstatten mit Steuerelementen notwendig sind.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-10T07:39:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a\" \/>\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=\"26\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Formulare per VBA erstellen\",\"datePublished\":\"2021-12-10T07:39:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/\"},\"wordCount\":4935,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a1f277a7b3384e4e84976a36b5775b8a\",\"articleSection\":[\"2021\",\"6\\\/2021\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/\",\"name\":\"Formulare per VBA erstellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a1f277a7b3384e4e84976a36b5775b8a\",\"datePublished\":\"2021-12-10T07:39:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a1f277a7b3384e4e84976a36b5775b8a\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a1f277a7b3384e4e84976a36b5775b8a\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Formulare_per_VBA_erstellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Formulare per VBA erstellen\"}]},{\"@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":"Formulare per VBA erstellen - 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\/Formulare_per_VBA_erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Formulare per VBA erstellen","og_description":"Warum sollte man Formulare per VBA erstellen, wenn Microsoft Access doch die gute alte, etwas in die Jahre gekommene Entwurfsansicht daf&uuml;r bereitstellt Ganz einfach: Weil es f&uuml;r den effizient arbeitenden Access-Entwickler immer wieder Aufgaben gibt, die er einfach nicht von Hand erledigen m&ouml;chte. Oder weil der Access-Entwickler immer wiederkehrende Aufgaben in ein Access-Add-In oder ein COM-Add-In auslagern m&ouml;chte. Und dort gibt es nun einmal keine Entwurfsansicht - dort ist VBA-Code gefragt, um neue Formulare zu erstellen und die gew&uuml;nschten Steuerelemente auf das Formular zu bringen. Dieser Beitrag liefert alle Techniken, die zum Erstellen von Formularen und zum Ausstatten mit Steuerelementen notwendig sind.","og_url":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-12-10T07:39:35+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"26\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Formulare per VBA erstellen","datePublished":"2021-12-10T07:39:35+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/"},"wordCount":4935,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a","articleSection":["2021","6\/2021","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/","url":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/","name":"Formulare per VBA erstellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a","datePublished":"2021-12-10T07:39:35+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/a1f277a7b3384e4e84976a36b5775b8a"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Formulare_per_VBA_erstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Formulare per VBA erstellen"}]},{"@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\/55001332","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=55001332"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001332\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}