{"id":55001063,"date":"2016-12-01T00:00:00","date_gmt":"2020-05-22T13:34:51","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1063"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dynamische_Listenfeldspalten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/","title":{"rendered":"Dynamische Listenfeldspalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Listenfelder sind tolle Steuerelemente. Mit ihnen k&ouml;nnen Sie Daten schnell zur Auswahl bereitstellen. Allerdings haben sie einen Makel: Sie erlauben keine automatische &auml;nderung der Spaltenbreite zur Laufzeit &#8211; zumindest nicht mit Bordmitteln. Dieser Beitrag zeigt, wie Sie in Zusammenhang mit den Verankern-Eigenschaften von Formularen zumindest ein klein wenig Flexibilit&auml;t aus den ansonsten recht statischen Listenfelder herausholen.<\/b><\/p>\n<h2>Beispiel Kundenliste<\/h2>\n<p>Als Beispiel f&uuml;r diesen Beitrag verwenden wir die Tabelle <b>tblKunden <\/b>der Suedsturm-Datenbank. Die Daten dieser Tabelle sollen in einem Listenfeld namens <b>lstKunden <\/b>angezeigt werden. Daher stellen wir die Datensatzherkunft dieses Steuerelements auf eine Abfrage ein, die wie in Bild 1 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_002.png\" alt=\"Datensatzherkunft des Listenfeldes lstKunden\" width=\"649,559\" height=\"343,4339\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datensatzherkunft des Listenfeldes lstKunden<\/span><\/b><\/p>\n<p>Diese Abfrage liefert die Felder <b>Kunde-ID<\/b>, <b>KundenCode<\/b>, <b>Firma<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>der Tabelle <b>tblKunden <\/b>sortiert nach dem Inhalt des Feldes <b>Firma<\/b>. Die Eigenschaften <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen<\/b>, <b>Trennlinien <\/b>und <b>Bildlaufleisten <\/b>dieses Formulars stellen wir auf <b>Nein <\/b>ein. Das Formular sieht in der Entwurfsansicht wie in Bild 2 aus. Es enth&auml;lt lediglich das Listenfeld <b>lstKunden <\/b>als Steuerelement.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_001.png\" alt=\"Das Formular frmKunden mit dem Listenfeld zur Anzeige der Kunden in der Entwurfsansicht\" width=\"499,6607\" height=\"349,3938\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das Formular frmKunden mit dem Listenfeld zur Anzeige der Kunden in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Das Listenfeld soll alle f&uuml;nf Felder der als Datensatzherkunft verwendeten Abfrage nutzen, also legen wir f&uuml;r die Eigenschaft <b>Spaltenanzahl <\/b>den Wert <b>5 <\/b>fest.<\/p>\n<p>Die Eigenschaft <b>Spaltenbreiten <\/b>stellen wir auf den Wert <b>0cm;2cm;5cm;2cm;4cm <\/b>ein. Damit legen wir fest, dass das erste Feld der Datensatzherkunft, also <b>KundeID<\/b>, nicht im Listenfeld angezeigt wird. Die &uuml;brigen Felder erscheinen in der jeweils angegebenen Breite, wie Bild 3 zeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_003.png\" alt=\"Die Formularansicht entspricht noch nicht unseren W&uuml;nschen.\" width=\"499,6607\" height=\"349,3938\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Formularansicht entspricht noch nicht unseren W&uuml;nschen.<\/span><\/b><\/p>\n<p>Dies ist allerdings noch l&auml;ngst nicht die Ansicht, die wir uns w&uuml;nschen. In der Abbildung haben wir die Gr&ouml;&szlig;e des Formulars bereits ge&auml;ndert, was sich aber aktuell noch nicht auf die Gr&ouml;&szlig;e des Listenfeldes auswirkt. Dieses sollte sich eigentlich analog zum Rest des Formulars vergr&ouml;&szlig;ern. Damit dies im n&auml;chsten Anlauf gelingt, stellen wir die Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>auf den Wert <b>Beide <\/b>ein. Au&szlig;erdem korrigieren Sie den dabei automatisch ge&auml;nderten Wert dieser beiden Eigenschaften f&uuml;r das Bezeichnungsfeld des Listenfeldes wieder auf <b>Links <\/b>und <b>Oben<\/b>.<\/p>\n<p>Nun passt es: Das Listenfeld wird automatisch vergr&ouml;&szlig;ert, wenn man das Formular anpasst (s. Bild 4). Leider ver&auml;ndert sich innerhalb des Listenfeldes aber nur die Breite der letzten Spalte. Sch&ouml;n w&auml;re es gewesen, wenn sich die Spalte mit der Firma automatisch entsprechend der Breite des Formulars angepasst h&auml;tte, damit ihre Inhalte komplett sichtbar sind.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_004.png\" alt=\"Nun wird zumindest das Listenfeld mit dem Formular vergr&ouml;&szlig;ert.\" width=\"499,6607\" height=\"349,3938\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Nun wird zumindest das Listenfeld mit dem Formular vergr&ouml;&szlig;ert.<\/span><\/b><\/p>\n<h2>Flexible Spalte &#8211; aber nur einmal<\/h2>\n<p>Damit kommen wir zum ersten notwendigen Schritt, wenn Sie daf&uuml;r sorgen wollen, dass genau eine Spalte immer mit dem Formular vergr&ouml;&szlig;ert oder verkleinert wird. In diesem stellen wir die Eigenschaft <b>Spaltenbreiten<\/b> auf einen neuen Wert ein, der wie folgt lautet (s. Bild 5):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_007.png\" alt=\"Einstellen der Spaltenbreiten f&uuml;r unseren Anwendungsfall\" width=\"499,6607\" height=\"347,9485\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Einstellen der Spaltenbreiten f&uuml;r unseren Anwendungsfall<\/span><\/b><\/p>\n<pre>0cm;2cm;;2cm;4cm<\/pre>\n<p>Was ist wichtig an dieser Stelle Dass Sie f&uuml;r die Spalte, deren Breite flexibel eingestellt werden soll, keinen numerischen Wert angeben, sondern den Platz zwischen den entsprechenden Semikola (<b>;<\/b>) einfach freilassen.<\/p>\n<p>Nun erhalten Sie die gew&uuml;nschte Ansicht (s. Bild 6), aber nur unter einer Voraussetzung: Sie hatten das Formular zuvor ge&ouml;ffnet und bereits einmal auf eine gewisse Breite vergr&ouml;&szlig;ert und sind dann wieder zur Entwurfsansicht gewechselt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_008.png\" alt=\"Die Spalte mit der Firma wird auf die enthaltenen Daten optimiert.\" width=\"499,6607\" height=\"330,4911\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die Spalte mit der Firma wird auf die enthaltenen Daten optimiert.<\/span><\/b><\/p>\n<p>Wenn Sie es dann erneut in der Formularansicht &ouml;ffnen, wird die Spalte <b>Firma <\/b>so breit angezeigt, dass es genau den Rest der Breite des Listenfeldes minus der Spaltenbreite der &uuml;brigen Felder einnimmt.<\/p>\n<p>Wenn Sie das Formular nun komplett schlie&szlig;en und wieder &ouml;ffnen, erhalten Sie nicht nur den alten Zustand &#8211; es ist noch &uuml;bler: Das Feld <b>Firma<\/b> erh&auml;lt nun noch weniger Platz, n&auml;mlich wiederum die Gesamtbreite des Formulars minus der f&uuml;r die &uuml;brigen Spalten fix eingestellten Breiten (s. Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_009.png\" alt=\"Beim erneuten &ouml;ffnen bekommt die Spalte Firma nun leider noch weniger Platz ab.\" width=\"424,7115\" height=\"275,7239\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Beim erneuten &ouml;ffnen bekommt die Spalte Firma nun leider noch weniger Platz ab.<\/span><\/b><\/p>\n<h2>Dauerhafte flexible Spalte<\/h2>\n<p>Nun kommt Schritt zwei der notwendigen &auml;nderungen f&uuml;r eine flexible Spaltenbreite im Listenfeld: Wir f&uuml;gen dem Formular eine Ereignisprozedur f&uuml;r das Ereignis <b>Bei Gr&ouml;&szlig;en&auml;nderung <\/b>hinzu, welche die folgende Anweisung ausf&uuml;hrt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Resize()\r\n     Me!lstKunden.ColumnWidths = Me!lstKunden.ColumnWidths\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis &uuml;berzeugt: Von nun an &auml;ndert sich die Breite der Spalte <b>Firma<\/b> immer, sobald wir am rechten Rand des Formulars ziehen und so die Breite des Listenfeldes &auml;ndern (s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_010.png\" alt=\"Mit einer kleinen Ereignisprozedur passt sich die Spaltenbreite des Feldes Firma immer der Listenfeldbreite minus den &uuml;brigen fixen Spaltenbreiten an.\" width=\"649,559\" height=\"203,0367\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Mit einer kleinen Ereignisprozedur passt sich die Spaltenbreite des Feldes Firma immer der Listenfeldbreite minus den &uuml;brigen fixen Spaltenbreiten an.<\/span><\/b><\/p>\n<h2>Flexible Spalte selbst festlegen<\/h2>\n<p>Wir gehen noch einen Schritt weiter: W&auml;hrend bisher die flexible Spalte fest durch den Eintrag in die Eigenschaft <b>Spaltenbreiten <\/b>vorgegeben war, wollen wir diesen nun durch den Benutzer anpassen lassen. Dazu soll dieser einfach die entsprechende Spalte anklicken k&ouml;nnen und dann die Breite dieser Spalte durch Anpassen der Formularbreite vergr&ouml;&szlig;ern oder verkleinern. Um zu &uuml;berpr&uuml;fen, welche Spalte aktuell die flexible Spaltenbreite aufweist, zeigen wir ihren Namen in einem Textfeld namens <b>txtDynamischeSpalte <\/b>an (die neue Version des Formulars samt Textfeld finden Sie in Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_011.png\" alt=\"Neues Formular, neues Textfeld zur Anzeige der aktuell ver&auml;nderbaren Spalte\" width=\"424,7115\" height=\"308,0899\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Neues Formular, neues Textfeld zur Anzeige der aktuell ver&auml;nderbaren Spalte<\/span><\/b><\/p>\n<p>Was nun folgt, ist das Ergebnis einiger Experimente und der Verwendung des <b>Maustaste auf<\/b>-Ereignisses. Vorab die Idee, die hinter dieser Prozedur steckt: Aktuell ist genau eine Spalte durch &auml;nderung der Breite des Formulars anpassbar.<\/p>\n<p>Dies geschieht erstens dadurch, dass Ver&auml;nderungen der Formularbreite durch die Einstellung des Wertes <b>Beide <\/b>f&uuml;r das Steuerelement <b>lstKunden <\/b>die Listenfeldbreite ver&auml;ndert. Die oben vorgestellte Ereignisprozedur, die durch das Ereignis <b>Bei Gr&ouml;&szlig;en&auml;nderung <\/b>ausgel&ouml;st wird, sorgt dann daf&uuml;r, dass die Eigenschaft <b>Spaltenbreiten <\/b>des Listenfeldes bei jeder &auml;nderung der Formularbreite aktualisiert wird. So wird immer die Spalte, f&uuml;r die keine feste Breite festgelegt wurde, so angepasst, dass sie der Breite des Listenfeldes minus der Breite der &uuml;brigen Spalten entspricht.<\/p>\n<p>Nun wollen wir daf&uuml;r sorgen, dass der Benutzer durch einen einfachen Mausklick auf eine der Spalten die angeklickte Spalte zur flexibel einstellbaren Spalte machen kann. Das hei&szlig;t: Zu Beginn ist beispielsweise die Spalte <b>Firma <\/b>flexibel einstellbar. Dann klickt der Benutzer auf die Spalte <b>Vorname <\/b>und &auml;ndert dann die Formularbreite. Nun &auml;ndert sich nicht mehr automatisch die Breite der Spalte <b>Firma<\/b>, sondern die der Spalte <b>Vorname<\/b>! Dazu sind einige Verrenkungen n&ouml;tig, aber wenn man l&auml;nger mit Access arbeitet, wei&szlig; man, dass man fast alles erreichen kann, wenn man nur ein wenig Zeit und Hirnschmalz investiert.<\/p>\n<p>Der Plan sieht so aus: Der Benutzer klickt auf die Spalte, die er zur flexibeln Spalte machen m&ouml;chte. Dadurch l&ouml;st er das Ereignis <b>Bei Maustaste auf <\/b>aus. Dieses Ereignis liefert mit seinen Parametern beispielsweise den Wert der X-Koordinate der Position, die der Benutzer angeklickt hat:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstKunden_MouseUp(Button<span style=\"color:blue;\"> As Integer<\/span>, Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)<\/pre>\n<p><!--30percent--><\/p>\n<p>Damit wollen wir nun alle Spalten durchlaufen und deren Start-X-Koordinate und End-X-Koordinate ermitteln. Wenn wir eine Spalte finden, f&uuml;r die der Wert des Parameters <b>X <\/b>der angeklickten Position zwischen Start- und Endkoordinate der Spalte liegt, haben wir bereits die angeklickte Spalte entdeckt.<\/p>\n<p>Nun m&uuml;ssen wir nur noch den Wert der Eigenschaft <b>Spaltenbreiten <\/b>(unter VBA: <b>ColumnWidths<\/b>) so &auml;ndern, dass nicht mehr die Spalte <b>Firma <\/b>als flexible Spalte markiert ist (hier etwa mit <b>0cm;2cm;;2cm;2cm<\/b>), sondern nun die Spalte <b>Vorname<\/b>, also etwa mit dem Wert <b>0cm;2cm;5cm;;2cm <\/b>f&uuml;r die Eigenschaft <b>ColumnWidths<\/b>. Dabei m&uuml;ssen wir nat&uuml;rlich zuvor ermitteln, wie breit die bis dahin flexibel anpassbare Spalte <b>Firma <\/b>gewesen ist. Diesen Wert tragen wir dann f&uuml;r <b>ColumnWidths <\/b>dort ein, wo sich zuvor ein Loch zwischen zwei Semikola befand, und entfernen die fixe Spaltenbreite f&uuml;r die nun als flexibel festgelegte Spalte.<\/p>\n<p>Dazu verwenden wir ein paar Hilfsfunktionen, denn ein paar der gesuchten Werte sind nicht allzu einfach zu ermitteln &#8211; zum Beispiel k&ouml;nnen Sie zwar immer mit der <b>Width<\/b>-Eigenschaft die Breite des Listenfeld-Steuerelements ermitteln, aber dies liefert immer nur die beim &ouml;ffnen des Formulars festgelegte und in den Eigenschaften definierte Breite. Die <b>Width<\/b>-Eigenschaft &auml;ndert sich aber etwa w&auml;hrend des Verbreiterns des Formulars und der damit verbundenen &auml;nderung der Breite des Listenfeldes nicht. Wir m&uuml;ssen also einen anderen Weg finden, um die Breite des Listenfeldes nach &auml;nderung der Breite des Formulars zu ermitteln.<\/p>\n<p>Doch schauen wir uns zun&auml;chst einmal an, wie die Prozedur <b>lstKunden_MouseUp <\/b>abl&auml;uft (s. Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstKunden_MouseUp(Button<span style=\"color:blue;\"> As Integer<\/span>, Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     <span style=\"color:blue;\">Dim <\/span>lngPositionStart<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngPositionEnd<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngWidth<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>varWidth<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngListboxWidth<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strColumnWidthsNew<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lst<span style=\"color:blue;\"> As <\/span>ListBox\r\n     <span style=\"color:blue;\">Set<\/span> lst = Me!lstKunden\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(lst.RowSource)\r\n     lngListboxWidth = Listenfeldbreite(lst, Me)\r\n     lst.ColumnWidths = SemikolonErgaenzen(lst.ColumnWidths, lst.ColumnCount)\r\n     For Each fld In rst.Fields\r\n         varWidth = <span style=\"color:blue;\">Split<\/span>(lst.ColumnWidths, \";\")(i)\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(varWidth) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             lngWidth = varWidth\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             lngWidth = FlexibleSpalteBreite(lst, lngListboxWidth)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         lngPositionStart = lngPositionEnd\r\n         lngPositionEnd = lngPositionStart + lngWidth\r\n         i = i + 1\r\n         <span style=\"color:blue;\">If <\/span>X &gt;= lngPositionStart And X &lt; lngPositionEnd<span style=\"color:blue;\"> Then<\/span>\r\n             Me!txtDynamischeSpalte = fld.Name\r\n             strColumnWidths<span style=\"color:blue;\">New<\/span> = strColumnWidths<span style=\"color:blue;\">New<\/span> & \";\"\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             strColumnWidths<span style=\"color:blue;\">New<\/span> = strColumnWidths<span style=\"color:blue;\">New<\/span> & lngWidth & \";\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> fld\r\n     strColumnWidths<span style=\"color:blue;\">New<\/span> = <span style=\"color:blue;\">Left<\/span>(strColumnWidthsNew, <span style=\"color:blue;\">Len<\/span>(strColumnWidths<span style=\"color:blue;\">New<\/span>) - 1)\r\n     strColumnWidths<span style=\"color:blue;\">New<\/span> = SemikolonErgaenzen(strColumnWidthsNew, lst.ColumnCount)\r\n     lst.ColumnWidths = strColumnWidths<span style=\"color:blue;\">New<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur, die beim Anklicken einer Listenfeldspalte ausgel&ouml;st wird<\/span><\/b><\/p>\n<p>Die Prozedur deklariert drei Objekte der DAO-Bibliothek mit den Typen <b>Database<\/b>, <b>Recordset <\/b>und <b>Field<\/b>. Au&szlig;erdem ben&ouml;tigen wir zwei Variablen, mit denen wir die Start- und die Endkoordinate der aktuell untersuchten Spalte des Listenfeldes speichern k&ouml;nnen (<b>lngPositionStart<\/b>, <b>lngPositionEnd<\/b>). Die Variablen <b>lngWidth <\/b>und <b>varWidth <\/b>sowie <b>lngListboxWidth <\/b>ben&ouml;tigen wir zur Ermittlung verschiedener Breiten. Fehlt noch die Laufvariable <b>i<\/b>, eine <b>String<\/b>-Variable namens <b>strColumnWidthsNew <\/b>zum Speichern des zu aktualisierenden Wertes f&uuml;r die Eigenschaft <b>ColumnWidths <\/b>nach Auswahl einer neuen Spalte als flexible Spalte sowie eine Variable namens <b>lst<\/b>, mit der wir das betroffene Listenfeld referenzieren (es ist &uuml;bersichtlicher, immer <b>lst <\/b>zu schreiben als beispielsweise <b>Me!lstKunden<\/b>). Die erste richtige Anweisung tr&auml;gt dann auch gleich den Verweis auf das Listenfeld <b>lstKunden <\/b>in die Variable <b>lst <\/b>ein.<\/p>\n<p>Danach f&uuml;llt die Prozedur die Variable <b>db <\/b>mit einem Verweis auf das aktuelle <b>Database<\/b>-Objekt und erstellt ein neues Recordset auf Basis der Datensatzherkunft des Listenfeldes, die wir aus der Eigenschaft <b>RowSource <\/b>des Steuerelements ermitteln. Dieses Recordset ist unsere Basis, um auf die den einzelnen Spalten zugrunde liegenden Felder zugreifen zu k&ouml;nnen.<\/p>\n<h2>Listenfeldbreite ermitteln<\/h2>\n<p>Nun folgt die erste H&uuml;rde: Wir wollen die Listenfeldbreite ermitteln. Wozu ben&ouml;tigen wir diese Nun: Durch den Wert <b>0cm;2cm;;2cm;2cm <\/b>f&uuml;r die Eigenschaft <b>ColumnWidths <\/b>beziehungsweise <b>Spaltenbreiten <\/b>des Listenfeldes haben wir ja festgelegt, dass es eine Spalte gibt, welche den verbleibenden Platz nach Abzug der Spaltenbreiten f&uuml;r die &uuml;brigen Spalten einnimmt (der Leerraum zwischen den beiden aufeinanderfolgenden Semikola). Wenn wir nun nach der Auswahl einer anderen Spalte als flexible Spalte der vorherigen flexiblen Spalte eine Breite zuweisen wollen, m&uuml;ssen wir diese Breite zun&auml;chst ermitteln.<\/p>\n<p>Das sollte eigentlich ganz leicht gehen: Wir nehmen die Listenfeldbreite und subtrahieren die in <b>ColumnWidths<\/b> angegebenen Spaltenbreiten. Allerdings gibt es ein Problem: Wenn wir die Listenfeldbreite mit <b>lst.Width <\/b>abfragen, erhalten wir immer den gleichen Wert &#8211; egal, wie breit wir das Formular und somit auch das Listenfeld aufgezogen haben. Klar: Der Wert wurde im Entwurf festgelegt und wird nur dynamisch in Abh&auml;ngigkeit von der Formularbreite ge&auml;ndert. Also m&uuml;ssen wir einen kleinen Umweg gehen, um die Listenfeldbreite zum jeweils aktuellen Zeitpunkt zu ermitteln. Dazu ziehen wir die Breite des Formulars (<b>Me.Width<\/b>) zur Entwurfszeit sowie die aktuelle Breite des Formulars hinzu, die wir mit <b>Me.InsideWidth <\/b>ermitteln. Und <b>InsideWidth <\/b>liefert immer die aktuelle Breite! Dies veranschaulicht Bild 10. Hier sehen Sie oben das Formular im Zustand gleich nach dem &ouml;ffnen. Die Listenfeldbreite und die Formularbreite entsprechen den Werten, die Sie mit den jeweiligen <b>Width<\/b>-Eigenschaften ermitteln k&ouml;nnen. Wenn Sie dann das Formular verbreitern, bleiben die Werte f&uuml;r <b>frm.Width <\/b>und <b>lst.Width <\/b>erhalten, da diese aus der Definition des Formulars ermittelt werden. <b>frm.InsideWidth <\/b>liefert jedoch die aktuelle Breite des Formulars. Wie aber gelangen wir an die Listenbreite<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_1063_012.png\" alt=\"Ermittlung der Listenfeldbreite zur Laufzeit\" width=\"649,559\" height=\"338,7318\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Ermittlung der Listenfeldbreite zur Laufzeit<\/span><\/b><\/p>\n<p>Zur Ermittlung der Breite des Listenfeldes verwenden wir die kleine Hilfsfunktion <b>Listenfeldbreite<\/b>, der wir einen Verweis auf das Listenfeld und auf das aktuelle Formular &uuml;bergeben:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>Listenfeldbreite(lst<span style=\"color:blue;\"> As <\/span>ListBox, _\r\n         frm<span style=\"color:blue;\"> As <\/span>Form)<span style=\"color:blue;\"> As Long<\/span>\r\n     Listenfeldbreite = _\r\n         frm.InsideWidth - frm.Width + lst.Width\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Funktion ermittelt mit <b>frm.Width &#8211; lst.Width <\/b>den Gesamtabstand des Listenfeldes zum linken und zum rechten Rand des Formulars, also die Differenz der Breite. Diesen Wert zieht sie dann von der aktuellen Breite des Formulars ab. Wer sich an die Mathematik-Grundlagen erinnert, wei&szlig; auch, dass man a &#8211; (b &#8211; c) in a &#8211; b + c umwandeln kann &#8211; und dies ergibt dann unseren Ausdruck <b>frm.InsideWidth &#8211; frm.Width + lst.Width <\/b>als aktuelle Listenfeldbreite. Diesen Wert tr&auml;gt die aufrufende Ereignisprozedur dann in die Variable <b>lngListboxWidth <\/b>ein.<\/p>\n<p>Manchmal kommt es vor, dass die hintere Spalte als flexible Spalte ausgew&auml;hlt und dieser Zustand gespeichert wird &#8211; dann lautet der Wert f&uuml;r die Spaltenbreiten etwa <b>0;2;2;2;;<\/b>. Gespeichert wird aber <b>0;2;2;2;, <\/b>ohne das hintere Semikolon. Wir ben&ouml;tigen aber den Ausdruck mit allen Semikola, weshalb wir eventuell fehlende Elemente durch die Funktion aus Listing 2 erg&auml;nzen. Die Funktion erwartet den Wert der Eigenschaft <b>ColumnWidths <\/b>sowie die Anzahl der Spalten aus der Eigenschaft <b>ColumnCount<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>SemikolonErgaenzen(ByVal strColumnWidths<span style=\"color:blue;\"> As String<\/span>, ByVal lngColumnCount<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Len<\/span>(strColumnWidths) - <span style=\"color:blue;\">Len<\/span>(<span style=\"color:blue;\">Replace<\/span>(strColumnWidths, \";\", \"\")) &lt; lngColumnCount\r\n         strColumnWidths = strColumnWidths & \";\"\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     SemikolonErgaenzen = strColumnWidths\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Erg&auml;nzen fehlender Semikola<\/span><\/b><\/p>\n<p>Sie durchl&auml;uft so lange eine <b>Do While<\/b>-Schleife und h&auml;ngt darin jeweils ein Semikolon an <b>strColumnWidths <\/b>an, bis die Anzahl der Elemente der Anzahl der Spalten entspricht. Das Ergebnis der Funktion landet wieder in der Eigenschaft <b>ColumnWidths <\/b>des Listenfeldes aus <b>lst<\/b>.<\/p>\n<p>Dann startet die Prozedur eine <b>For Each<\/b>-Schleife &uuml;ber alle Felder der Datensatzherkunft des Listenfeldes, welche von der Eigenschaft <b>Fields <\/b>des <b>Recordset<\/b>-Objekts <b>rst <\/b>geliefert werden. Hier tr&auml;gt die folgende Anweisung die Breite f&uuml;r die aktuelle Spalte aus der Eigenschaft <b>ColumnWidths <\/b>in die Variable <b>varWidth <\/b>ein. Dazu wandeln wir <b>lst.ColumnWidths<\/b>, also etwa <b>0;2;;2;2 <\/b>mit der <b>Split<\/b>-Funktion in ein Array um und ermitteln daraus das Element, dessen Index dem aktuellen Wert der Laufvariablen <b>i <\/b>entspricht.<\/p>\n<p>Beim ersten Durchlauf hat <b>i <\/b>den Wert <b>0<\/b>, also wird <b>varWidth <\/b>mit dem Wert <b>0 <\/b>gef&uuml;llt. Warum aber verwenden wir eine <b>Variant<\/b>-Variable, wo die Spaltenbreite doch offensichtlich ein Zahlenwert ist Nun: In unserem Beispiel gelangen wir mit der dritten Spalte an eine leere Zeichenkette. W&uuml;rden wir diese etwa an eine <b>Long<\/b>-Variable &uuml;bergeben, erhielten wir eine entsprechende Fehlermeldung. Nun speichern wir den Wert also zuerst in einer <b>Variant<\/b>-Variablen, um den Inhalt anschlie&szlig;end zu untersuchen &#8211; und zwar in einer <b>If&#8230;Then<\/b>-Bedingung, welche die L&auml;nge des Inhalts von <b>varWidth <\/b>pr&uuml;ft. Ist diese nicht <b>0<\/b>, tragen wir den Wert von <b>varWidth <\/b>in die <b>Long<\/b>-Variable <b>lngWidth <\/b>ein. Anderenfalls rufen wir die Funktion <b>FlexibleSpalteBreite <\/b>auf, welche die aktuelle Breite der flexiblen Spalte berechnen soll.<\/p>\n<h2>Breite der flexiblen Spalte ermitteln<\/h2>\n<p>Diese Funktion erwartet einen Verweis auf das Listenfeld sowie die aktuelle Listenfeldbreite als Parameter (s. Listing 3). Sie &uuml;bertr&auml;gt den Wert des Parameters <b>lngListenfeldbreite <\/b>in die Variable <b>lngWidthFlex<\/b>. Dann durchl&auml;uft sie eine <b>For&#8230;Next<\/b>-Schleife &uuml;ber alle Werte von <b>0 <\/b>bis zur Anzahl der Listenfeldspalten minus <b>1<\/b>, wobei diese aus der Eigenschaft <b>ColumnCount <\/b>ermittelt wird.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>FlexibleSpalteBreite(lst<span style=\"color:blue;\"> As <\/span>ListBox, lngListenfeldbreite<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>j<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngWidthFlex<span style=\"color:blue;\"> As Long<\/span>\r\n     lngWidthFlex = lngListenfeldbreite\r\n     For j = 0 To lst.ColumnCount - 1\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(<span style=\"color:blue;\">Split<\/span>(lst.ColumnWidths, \";\")(j)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             lngWidthFlex = lngWidthFlex - <span style=\"color:blue;\">Split<\/span>(lst.ColumnWidths, \";\")(j)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> j\r\n     FlexibleSpalteBreite = lngWidthFlex\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Ermitteln der Breite der flexiblen Spalte<\/span><\/b><\/p>\n<p>F&uuml;r jeden Durchlauf ermitteln wir wieder mit der <b>Split<\/b>-Funktion das Array der einzelen Elemente der Eigenschaft <b>ColumnWidths <\/b>(also etwa <b>0cm;2cm;;2cm;2cm<\/b> &#8211; was aber intern in einer anderen Einheit gespeichert wird) und pr&uuml;fen dabei, ob die L&auml;nge des Elements nicht <b>0 <\/b>ist. Ist der Wert ungleich <b>0<\/b>, subtrahieren wir ihn zum aktuellen Wert der Variablen <b>lngWidthFlex<\/b>.<\/p>\n<p>Nachdem wir so alle Spaltenbreiten von der Gesamtbreite des Listenfeldes subtrahiert haben, sollte die Breite der flexiblen Spalte in der Variablen <b>lngWidthFlex <\/b>&uuml;brig bleiben. Der Wert von <b>lngWidthFlex <\/b>ist auch der R&uuml;ckgabewert der Funktion und wird in der Variablen <b>lngWidth <\/b>im zweiten Teil der <b>If&#8230;Then<\/b>-Bedingung der aufrufenden Ereignisprozedur gespeichert.<\/p>\n<p>Nun ermitteln wir die Start- und die Endkoordinaten der aktuellen Spalte auf der X-Achse. Der Startpunkt des ersten Elements wird mit <b>lngPositionStart = lngPositionEnd <\/b>ermittelt, wobei <b>lngPositionEnd <\/b>noch den Wert <b>0 <\/b>enth&auml;lt und <b>lngPositionStart <\/b>nun somit auch. Danach ermitteln wir die Endposition &uuml;ber den Ausdruck <b>lngPositionStart + lngWidth<\/b>. Nach dem Erh&ouml;hen der Laufvariablen <b>i <\/b>um den Wert <b>1 <\/b>pr&uuml;fen wir, ob sich die Position, auf die der Benutzer geklickt hat, der aktuell in der <b>For Each<\/b>-Schleife &uuml;ber alle Spalten\/Felder des Listenfeldes, innerhalb der mit <b>lngPositionStart <\/b>und <b>lngPositionEnd <\/b>markierten Grenzen befindet:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>X &gt;= lngPositionStart And X &lt; lngPositionEnd<span style=\"color:blue;\"> Then<\/span>\r\n    ...<\/pre>\n<p>Falls ja, tr&auml;gt die Prozedur zun&auml;chst den Namen der aktuellen flexiblen Spalte in das Textfeld <b>txtDynamischeSpalte <\/b>ein. Au&szlig;erdem wird der neue Ausdruck f&uuml;r die Eigenschaft <b>Spaltenbreiten <\/b>beziehungsweise <b>ColumnWidths <\/b>in der Variablen <b>strColumnWidthsNew <\/b>um ein Semikolon erweitert. Hat der Benutzer nicht auf die aktuell durchlaufene Spalte geklickt, sondern in eine andere, f&uuml;gt die Prozedur die Breite der aktuellen Spalte aus <b>lngWidth <\/b>gefolgt von einem Semikolon zu <b>strColumnWidthsNew <\/b>hinzu. Auf diese Weise stellt die Schleife den neuen Wert f&uuml;r die Eigenschaft <b>ColumnWidths <\/b>zusammen.<\/p>\n<p>Da mit jedem Durchlauf auch ein abschlie&szlig;endes Semikolon angef&uuml;gt wird, dieses aber in den meisten F&auml;llen &uuml;berfl&uuml;ssig ist (au&szlig;er, die letzte Spalte ist die flexible Spalte), wird dieses noch abgetrennt. Sollte die letzte Spalte doch die flexible Spalte sein, erg&auml;nzt der folgende Aufruf der bereits weiter oben beschriebenen Funktion <b>SemikolonErgaenzen <\/b>wieder das abschlie&szlig;ende Semikolon.<\/p>\n<p>Schlie&szlig;lich tr&auml;gt die Ereignisprozedur den Wert von <b>strColumnWidthsNew <\/b>in die Eigenschaft <b>ColumnWidths <\/b>des betroffenen Listenfeldes ein.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag hat gezeigt, dass man immer wieder noch ein wenig mehr aus den eingebauten Steuerelementen von Access herausholen kann. Das dynamische Anpassen der Spaltenbreiten eines Listenfeldes beim Anpassen der Formularbreite gibt dem Listenfeld etwa mehr Flexibilit&auml;t als zuvor.<\/p>\n<p>Wenn Sie die L&ouml;sung f&uuml;r eigene Formulare und Listenfelder nutzen wollen, k&ouml;nnen Sie die Anzeige der flexiblen Spalte im Textfeld auch weglassen. Grunds&auml;tzlich kann man nat&uuml;rlich schlecht erkennen, dass die aktuell angeklickte Spalte beim &auml;ndern der Formularbreite angepasst wird.<\/p>\n<p>Daher beschr&auml;nkt sich der Nutzen dieser Erweiterung des Listenfeldes wohl auf Anwendungen f&uuml;r den Eigengebrauch &#8211; aber vielleicht f&auml;llt Ihnen ja eine M&ouml;glichkeit ein, wie man dem Benutzer dies als intuitiv zu bedienendes Feature verkaufen kann <\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DynamischeListenfeldspalte.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/8680481B-F3A6-4774-BD87-AAA486C593EA\/aiu_1063.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Listenfelder sind tolle Steuerelemente. Mit ihnen k&ouml;nnen Sie Daten schnell zur Auswahl bereitstellen. Allerdings haben sie einen Makel: Sie erlauben keine automatische &Auml;nderung der Spaltenbreite zur Laufzeit &#8211; zumindest nicht mit Bordmitteln. Dieser Beitrag zeigt, wie Sie in Zusammenhang mit den Verankern-Eigenschaften von Formularen zumindest ein klein wenig Flexibilit&auml;t aus den ansonsten bez&uuml;glich der Spaltenbreiten recht statischen Listenfelder herausholen.<\/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":[662016,66062016,44000023],"tags":[],"class_list":["post-55001063","post","type-post","status-publish","format-standard","hentry","category-662016","category-66062016","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Dynamische Listenfeldspalten - 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_Listenfeldspalten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamische Listenfeldspalten\" \/>\n<meta property=\"og:description\" content=\"Listenfelder sind tolle Steuerelemente. Mit ihnen k&ouml;nnen Sie Daten schnell zur Auswahl bereitstellen. Allerdings haben sie einen Makel: Sie erlauben keine automatische &Auml;nderung der Spaltenbreite zur Laufzeit - zumindest nicht mit Bordmitteln. Dieser Beitrag zeigt, wie Sie in Zusammenhang mit den Verankern-Eigenschaften von Formularen zumindest ein klein wenig Flexibilit&auml;t aus den ansonsten bez&uuml;glich der Spaltenbreiten recht statischen Listenfelder herausholen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T13:34:51+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b\" \/>\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=\"17\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_Listenfeldspalten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dynamische Listenfeldspalten\",\"datePublished\":\"2020-05-22T13:34:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/\"},\"wordCount\":3033,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/168ca3390d924715ad334e364e20259b\",\"articleSection\":[\"2016\",\"6\\\/2016\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/\",\"name\":\"Dynamische Listenfeldspalten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/168ca3390d924715ad334e364e20259b\",\"datePublished\":\"2020-05-22T13:34:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/168ca3390d924715ad334e364e20259b\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/168ca3390d924715ad334e364e20259b\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dynamische_Listenfeldspalten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamische Listenfeldspalten\"}]},{\"@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 Listenfeldspalten - 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_Listenfeldspalten\/","og_locale":"de_DE","og_type":"article","og_title":"Dynamische Listenfeldspalten","og_description":"Listenfelder sind tolle Steuerelemente. Mit ihnen k&ouml;nnen Sie Daten schnell zur Auswahl bereitstellen. Allerdings haben sie einen Makel: Sie erlauben keine automatische &Auml;nderung der Spaltenbreite zur Laufzeit - zumindest nicht mit Bordmitteln. Dieser Beitrag zeigt, wie Sie in Zusammenhang mit den Verankern-Eigenschaften von Formularen zumindest ein klein wenig Flexibilit&auml;t aus den ansonsten bez&uuml;glich der Spaltenbreiten recht statischen Listenfelder herausholen.","og_url":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T13:34:51+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dynamische Listenfeldspalten","datePublished":"2020-05-22T13:34:51+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/"},"wordCount":3033,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b","articleSection":["2016","6\/2016","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/","url":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/","name":"Dynamische Listenfeldspalten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b","datePublished":"2020-05-22T13:34:51+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/168ca3390d924715ad334e364e20259b"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dynamische_Listenfeldspalten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dynamische Listenfeldspalten"}]},{"@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\/55001063","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=55001063"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001063\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}