{"id":55000793,"date":"2011-10-01T00:00:00","date_gmt":"2020-05-22T21:57:36","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=793"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dateiauswahl_per_Kombinationsfeld","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/","title":{"rendered":"Dateiauswahl per Kombinationsfeld"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es gibt verschiedene Varianten, eine Datei oder ein Verzeichnis per Dateidialog auszuw&auml;hlen. Wer jedoch schon einmal mit einer Linux-Shell oder auch mit dem MS-Dos-Fenster gearbeitet hat, wei&szlig;, dass sich Verzeichnisse und Dateien auch rein tastaturgesteuert eingeben lassen. Was liegt da n&auml;her, als eine effiziente und schnelle M&ouml;glichkeit zum Ausw&auml;hlen von Verzeichnis- und Dateinamen zu bauen, die ausschlie&szlig;lich per Tastatur bedient werden kann Dieser Beitrag zeigt, wie Sie ein herk&ouml;mmliches Kombinationsfeld zur Dateiauswahl einsetzen.<\/b><\/p>\n<p>Datei- und Verzeichnisauswahl mit einem Kombinationsfeld &#8211; wie soll das denn funktionieren Nun, es ist ganz einfach: Der Benutzer kann f&uuml;r das jungfr&auml;uliche Kombinationsfeld eines der vorhanden Laufwerke ausw&auml;hlen (s. Bild 1). Das erledigt er, indem er entweder einen der Eintr&auml;ge des Kombinationsfeldes ausw&auml;hlt oder indem er den Anfangsbuchstaben eintippt (beispielsweise <b>c<\/b>) und dann die <b>Tabulator<\/b>-Taste bet&auml;tigt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/DateiauswahlPerKombifeld-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Die <a id=\"anker-43-anchor\" name=\"anker-43-anchor\" \/>Auswahl eines der Laufwerke des aktuellen Rechners &#8230;<\/span><\/b><\/p>\n<p>Daraufhin wird der Laufwerkspfad vervollst&auml;ndigt (auf <b>c:\\<\/b>) und die Liste neu gef&uuml;llt &#8211; diesmal mit allen in der ersten Ebene unterhalb dieses Pfades enthaltenen Verzeichnissen und Dateien (s. Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/DateiauswahlPerKombifeld-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: &#8230; f&uuml;hrt zur Anzeige aller untergeordneten Verzeichnisse und Dateien.<\/span><\/b><\/p>\n<p>Der Benutzer kann nun die Anfangsbuchstaben des gew&uuml;nschten Eintrags eintippen oder auch mit den <b>Nach oben<\/b>&#8211; und <b>Nach unten<\/b>-Tasten einen der Listeneintr&auml;ge ausw&auml;hlen. Gibt er einen oder mehrere Buchstaben ein, springt die Markierung in der Liste automatisch zum n&auml;chsten passenden Eintrag &#8211; dies ist Standardverhalten des Kombinationsfeldes. W&auml;hlt er mit den Cursortasten oder mit der Maus einen der Listeneintr&auml;ge aus, wird dieser als aktueller Text des Kombinationsfeldes eingetragen.<\/p>\n<p>Als Folge der Auswahl eines weiteren Unterordners werden wiederum die darin enthaltenen Verzeichnisse angezeigt &#8211; bis Sie irgendwann beim Zielordner angekommen, zum Beispiel im Access-Add-In-Verzeichnis (s. Bild 3).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/DateiauswahlPerKombifeld-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Ausstattung eines Kombinationsfeldes mit einer Wertliste<\/span><\/b><\/p>\n<p>Wenn Sie mal &uuml;ber das Ziel hinausgeschossen sind und ein oder mehrere Verzeichnisebenen weiter nach oben gelangen m&ouml;chten, haben Sie zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie w&auml;hlen gerade mit den Cursortasten einen Eintrag der Liste aus, dann wird der aktuelle Wert komplett markiert. Ein Klick auf die L&ouml;schen-Taste f&uuml;hrt zum L&ouml;schen des zuletzt hinzugef&uuml;gten Verzeichnisses.<\/li>\n<li class=\"aufz-hlung\">Oder Sie befinden sich gerade im Eingabemodus des Kombinationsfeldes. Dann k&ouml;nnen Sie entweder mit der <b>L&ouml;schen<\/b>-Taste zeichenweise oder mit <b>Strg + L&ouml;schen<\/b> elementweise l&ouml;schen (jeweils etwa bis zum n&auml;chsten Leerzeichen oder Backslash).<\/li>\n<\/ul>\n<p><b>Programmierung des Kombinationsfeldes<\/b><\/p>\n<p>Den Startpunkt und die einfachste H&uuml;rde auf dem Weg zu einem Kombinationsfeld mit dieser Sonderausstattung ist die Anzeige der Laufwerke beim &Ouml;ffnen des Formulars. Dies erledigen wir in der Prozedur, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird. Die Prozedur liest mit der Funktion <b>GetDrives <\/b>die Liste aller Laufwerke ein und weist diese dem Kombinationsfeld als Recordset zu:<\/p>\n<pre>Private Sub Form_Load()\r\n    Set Me!cboDateiname.Recordset = GetDrives\r\nEnd Sub<\/pre>\n<p><b>Kombinationsfeld f&uuml;llen<\/b><\/p>\n<p>Wenn Sie ein Kombinationsfeld auf Basis von Daten f&uuml;llen m&ouml;chten, die nicht aus einer Tabelle oder Abfrage stammen, haben Sie mehrere M&ouml;glichkeiten. Die erste und naheliegendste ist die Verwendung einer Wertliste. Dies bedeutet, dass Sie die Eigenschaft <b>Herkunftsart<\/b> des Kombinationsfeldes auf den Wert <b>Wertliste <\/b>einstellen (s. Bild 4) und per VBA eine Zeichenkette zusammenstellen, deren einzelne Eintr&auml;ge durch das Semikolon voneinander getrennt werden. Diese Vorgehensweise haben wir beim Erstellen dieser L&ouml;sung auch lange verwendet, bis sich irgendwann einmal der gro&szlig;e Nachteil beim Einsatz von Wertlisten als Datenherkunft bemerkbar machte: Die Anzahl der enthaltenen Zeichen ist n&auml;mlich begrenzt. Aufgefallen ist dies beim Einlesen der Dateien eines Verzeichnis mit den Fotografien von 2010 &#8211; und mehr als 1.000 Dateinamen inklusive Pfadangaben waren dann doch etwas viel f&uuml;r eine Wertliste.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/DateiauswahlPerKombifeld-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Mit dem Kombinationsfeld arbeiten Sie sich bis in tiefste Verzeichnisebenen vor.<\/span><\/b><\/p>\n<p>Zum Gl&uuml;ck gibt es noch weitere Varianten, zum Beispiel die Verwendung eines ADODB-Recordsets. Dieses kann man im Gegensatz zu DAO-Recordsets auch ohne Datenherkunft definieren und quasi in der Luft mit Daten f&uuml;llen.<\/p>\n<p>Es gibt dabei auch nicht besonders viel zu beachten &#8211; Sie m&uuml;ssen nur die Eigenschaft <b>LockType <\/b>des zu erstellenden <b>Recordset<\/b>-Objekts auf den Wert <b>adLockOptimistic <\/b>einstellen. Aus unerfindlichen Gr&uuml;nden zeigt das Kombinationsfeld nur dann Werte an!<\/p>\n<p><b>Laufwerke einlesen<\/b><\/p>\n<p>Das Zusammenstellen der Liste der Laufwerke &uuml;bernimmt die Funktion <b>GetDrives<\/b>. Diese sieht wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-52-anchor\">Listing 1<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Zusammenstellen der Liste aller Laufwerke des aktuellen Rechners<\/p>\n<pre>Private Function GetDrives() As adodb.Recordset\r\n    Dim objDrive As Scripting.Drive\r\n    Set rst = New adodb.Recordset\r\n    With rst\r\n        .LockType = adLockOptimistic\r\n        .Fields.Append &quot;Pfad&quot;, adVarWChar, 500\r\n        .Open\r\n        For Each objDrive In objFSO.Drives\r\n            .AddNew\r\n            !Pfad = objDrive.DriveLetter &amp; &quot;:\\&quot;\r\n            .Update\r\n        Next objDrive\r\n    End With\r\n    Set GetDrives = rst\r\nEnd Function<\/pre>\n<p>Die Funktion erstellt zun&auml;chst ein neues Objekt des Typs <b>ADODB.Recordset<\/b>. Die Objektvariable hierf&uuml;r wird im Kopf des Moduls wie folgt deklariert:<\/p>\n<pre>Dim rst As ADODB.Recordset<\/pre>\n<p>Nach der Erzeugung des Objekts mit der <b>New<\/b>-Methode stellt die Prozedur die besagte Eigenschaft <b>LockType <\/b>auf <b>adLockOptimistic <\/b>ein. Au&szlig;erdem h&auml;ngt es das Feld Pfad an die Tabelle an. Das Feld hat den Datentyp <b>adVarWChar <\/b>und soll maximal 500 Zeichen lang sein (wenn Sie l&auml;ngere Pfade erwarten, vergr&ouml;&szlig;ern Sie diesen Wert entsprechend). Dann &ouml;ffnet es die Datensatzgrupp und durchl&auml;uft alle Elemente der <b>Drives<\/b>-Auflistung des <b>FileSystemObject<\/b>-Objekts (weitere Informationen siehe Beitrag <b>Dateisystem im Griff mit dem FileSystemObject<\/b>, <b>www.access-im-unternehmen.de\/794<\/b>).<\/p>\n<p>Dabei wird jeweils ein neuer Datensatz mit AddNew erzeugt, das Feld Pfad mit dem Namen des aktuellen Laufwerkbuchstabens gef&uuml;llt (erg&auml;nzt um die Zeichenfolge :\\) und der Datensatz gespeichert. Der Verweis auf die Datensatzgruppe wird schlie&szlig;lich als R&uuml;ckgabewert der Funktion festgelegt.<\/p>\n<p><b>FileSystemObject bereitstellen<\/b><\/p>\n<p>Das in dieser Funktion verwendete Objekt <b>objFSO <\/b>wird nicht global deklariert und beim Laden des Formulars instanziert, sondern durch eine Funktion bereitgestellt. Zun&auml;chst einmal wird eine Objektvariable zum Zwischenspeichern des <b>FileSystemObject<\/b>-Objekts im Kopf der Prozedur deklariert:<\/p>\n<pre>Dim m_FSO As FileSystemObject<\/pre>\n<p>Die Funktion <b>objFSO <\/b>pr&uuml;ft zun&auml;chst, ob <b>m_FSO <\/b>nicht leer ist und somit bereits instanziert wurde. Falls nicht (oder falls die Objektvariable etwa durch einen nicht behandelten Laufzeitfehler gel&ouml;scht wurde), instanziert Sie das Objekt erneut und weist es der Variablen <b>m_FSO <\/b>zu. Egal, ob frisch erstellt oder noch vorhanden, wird dieses dann dem R&uuml;ckgabewert <b>objFSO <\/b>der gleichnamigen Funktion zugewiesen:<\/p>\n<pre>Function objFSO() As FileSystemObject\r\n    If m_FSO Is Nothing Then\r\n        Set m_FSO = New FileSystemObject\r\n    End If\r\n    Set objFSO = m_FSO\r\nEnd Function<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Verzeichnis ausw&auml;hlen<\/p>\n<p>Wenn der Benutzer nun einen entsprechenden Buchstaben in das Kombinationsfeld eintippt, zeigt die Liste alle Eintr&auml;ge an, die mit diesem Buchstaben beginnen (im schlechtesten Fall also gar keinen). Nat&uuml;rlich kann der Benutzer das Kombinationsfeld auch einfach durch einen Klick auf die Schaltfl&auml;che rechts oder mit der Schaltfl&auml;che <b>F4 <\/b>&ouml;ffnen.<\/p>\n<p>Um direkt die in diesem Laufwerk enthaltenen Verzeichnisse anzuzeigen, muss der Benutzer entweder einen konkreten Eintrag der Kombinationsfeldliste ausw&auml;hlen oder aber den Laufwerksbuchstaben eingeben und die Tabulatortaste bet&auml;tigen.<\/p>\n<p>Die Eingabe einzelner Zeichen soll unber&uuml;cksichttigt bleiben, lediglich auf das L&ouml;schen von Zeichen reagiert die L&ouml;sung. Dies ist wichtig, damit die Datensatzherkunft des Kombinationsfeldes aktualisiert wird, wenn der Benutzer eine Verzeichnisebene komplett l&ouml;scht: Das Recordset des Kombinationsfeldes muss dann aktualisiert werden. Das gleiche soll auch passieren, wenn der Benutzer einzelne Zeichen bis zum vorherigen Backslash l&ouml;scht. Sobald das Backslash-Zeichen erreicht ist, soll das Kombinationsfeld entsprechend aktualisiert werden, sodass es die Unterverzeichnisse des nun angegebenen Verzeichnisses anzeigt.<\/p>\n<p><!--30percent--><\/p>\n<p>Die hier wichtigen Ereignisse, also das Bet&auml;tigen der <b>Tab<\/b>-Taste oder der <b>L&ouml;schen<\/b>-Taste, fangen wir mit einer Prozedur ab, die durch das Ereignis <b>Bei Taste <\/b>ab ausgel&ouml;st wird (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-60-anchor\">Listing 2<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 2: Reagieren auf das Bet&auml;tigen der Tabulator- oder der L&ouml;schen-Taste<\/p>\n<pre>Private Sub cboDateiname_KeyDown(KeyCode As Integer, Shift As Integer)\r\n    Dim strFolder As String\r\n    Dim bolAllesMarkiert As Boolean\r\n    Dim bolBackslashErreicht As Boolean\r\n    Select Case KeyCode\r\n        Case 8 ''L&ouml;schen\r\n            With Me!cboDateiname\r\n                If Len(.Text) &gt; 0 Then\r\n                    bolAllesMarkiert = .SelLength = Len(.Text)\r\n                    bolBackslashErreicht = .SelStart = Len(.Text) And InStrRev(.Text, &quot;\\&quot;) = Len(.Text) - 1\r\n                    If bolAllesMarkiert Then\r\n                        .Text = Mid(.Text, 1, InStrRev(Left(.Text, Len(.Text) - 1), &quot;\\&quot;))\r\n                        .SelLength = Len(.Text)\r\n                        If Len(.Text) &gt; 0 Then\r\n                            Set .Recordset = GetFoldersAndFiles(.Text)\r\n                            .Dropdown\r\n                        End If\r\n                        KeyCode = 0\r\n                    Else\r\n                        If bolBackslashErreicht Then\r\n                            .Text = Mid(.Text, 1, InStrRev(Left(.Text, Len(.Text) - 1), &quot;\\&quot;))\r\n                            .SelLength = Len(.Text)\r\n                            If Len(.Text) &gt; 0 Then\r\n                                Set .Recordset = GetFoldersAndFiles(.Text)\r\n                                .Dropdown\r\n                            End If\r\n                            KeyCode = 0\r\n                        End If\r\n                    End If\r\n                End If\r\n            End With\r\n        Case 9 ''Tabulator\r\n            With Me!cboDateiname\r\n                If Len(.Text) &gt; 0 Then\r\n                    strFolder = .Text\r\n                    .SelStart = Len(.Text)\r\n                    If objFSO.FolderExists(strFolder) Then\r\n                        If Not Right(strFolder, 1) = &quot;\\&quot; Then\r\n                            strFolder = strFolder &amp; &quot;\\&quot;\r\n                        End If\r\n                    Else\r\n                        strFolder = Left(strFolder, InStrRev(strFolder, &quot;\\&quot;))\r\n                    End If\r\n                    .SelStart = Len(strFolder)\r\n                    If objFSO.FolderExists(strFolder) Then\r\n                        Set .Recordset = GetFoldersAndFiles(strFolder)\r\n                        .Dropdown\r\n                        KeyCode = 0\r\n                    End If\r\n                Else\r\n                    Set .Recordset = GetDrives\r\n                    .Dropdown\r\n                End If\r\n            End With\r\n        End Select\r\nEnd Sub<\/pre>\n<p>Diese Prozedur pr&uuml;ft in einem <b>Select Case<\/b>-Konstrukt, ob eine der beiden Tasten mit dem Wert <b>8 <\/b>(<b>L&ouml;schen<\/b>) oder <b>9 <\/b>(<b>Tabulator<\/b>) f&uuml;r den Parameter <b>Keycode <\/b>bet&auml;tigt wurde.<\/p>\n<p><b>Reagieren auf die Tabulator-Taste<\/b><\/p>\n<p>Wenn der Benutzer die Tabulator-Taste bet&auml;tigt, soll immer der aktuelle Wert erg&auml;nzt werden &#8211; soweit es sich dabei um einen g&uuml;ltigen Verzeichnisnamen handelt. Wenn Sie also wie Bild 6. Dazu pr&uuml;ft die Prozedur <b>Form_KeyDown <\/b>im <b>Select Case<\/b>-Zweig mit dem Wert <b>9 <\/b>zun&auml;chst, ob das Kombinationsfeld &uuml;berhaupt einen Wert enth&auml;lt. Falls nicht, soll das Kombinationsfeld einfach mit den Laufwerken gef&uuml;llt und aufgeklappt werden.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/DateiauswahlPerKombifeld-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Bei Bet&auml;tigen der Tabulator-Taste soll dieser Wert ausgew&auml;hlt werden und das Kombinationsfeld die Eintr&auml;ge der folgenden Ebene anzeigen.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/DateiauswahlPerKombifeld-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Die Auswahlliste nach Bet&auml;tigen der Tabulator-Taste<\/span><\/b><\/p>\n<p>Die Prozedur speichert dann zun&auml;chst den aktuell angezeigten Text in der Variablen <b>strFolder<\/b> und pr&uuml;ft, ob dieser Wert bereits einem vorhandenen Verzeichnis entspricht. Falls ja, testet die Prozedur noch, ob der Ausdruck von einem Backslash beendet wird. Falls nicht, wird dieses Zeichen noch an den aktuellen Ausdruck angeh&auml;ngt. Dieser Ausdruck dient dann als Kriterium f&uuml;r das Erweitern der Liste des Kombinationsfeldes.<\/p>\n<p>Sollte das Kombinationsfeld keinen g&uuml;ltigen Pfad enthalten, weil der Teil hinter dem letzten Backslash nicht identifiziert wurde, wird der Ausdruck bis zum letzten Backslash als Basis f&uuml;r das F&uuml;llen des Kombinationsfeldes eingesetzt. Bei einem Ausdruck wie <b>c:\\Daten\\blablub<\/b>, bei dem <b>blablub <\/b>kein g&uuml;ltiges Verzeichnis ist, enth&auml;lt <b>strFolder <\/b>also anschlie&szlig;end den Wert <b>c:\\Daten\\<\/b>. Damit der Benutzer anschlie&szlig;end hinter dem letzten g&uuml;ltigen und vollst&auml;ndigen Verzeichnis weiterschreiben kann, wird die Einf&uuml;gemarke an das Ende des in strFolder gespeicherten Ausdrucks gesetzt (<b>.SelStart = Len(strFolder)<\/b>).<\/p>\n<p>Auf Basis dieses Pfades als Parameter wird dann die Funktion <b>GetFoldersAndFiles <\/b>aufgerufen (siehe unten). Sie liefert ein Recordset mit allen Pfadangaben, die zum aktuellen Verzeichnis f&uuml;hren und allen Unterverzeichnissen und Dateinamen, um die der aktuelle Ausdruck erg&auml;nzt werden k&ouml;nnte.<\/p>\n<p>Schlie&szlig;lich wird noch die <b>Dropdown<\/b>-Methode aufgerufen, um das Kombinationsfeld mit den gefundenen Pfadangaben auszuklappen und zur Auswahl anzubieten und der Wert von <b>KeyCode <\/b>auf <b>0 <\/b>eingestellt, damit die Wirkung der Tabulator-Taste aufgehoben wird.<\/p>\n<p><b>Reagieren auf die L&ouml;schen-Taste<\/b><\/p>\n<p>Falls der Benutzer die <b>L&ouml;schen<\/b>-Taste bet&auml;tigt, kann unter verschiedenen Bedingungen eine Reaktion erforderlich sein. Es gibt die folgenden M&ouml;glichkeiten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Der komplette Inhalt des Kombinationsfeldes ist markiert: Der Ausdruck wird bis zum vorherigen Backslash gel&ouml;scht, das Kombinationsfeld aktualisiert und aufgeklappt.<\/li>\n<li class=\"aufz-hlung\">Die Einf&uuml;gemarke befindet sich am Ende des Ausdrucks und nach dem L&ouml;schen des letzten Zeichens ist ein Backslash das letzte Zeichen. Dann wird das Kombinationsfeld ebenfalls aktualisiert und aufgeklappt.<\/li>\n<\/ul>\n<p>Um entsprechend auf diese beiden Konstellationen zu reagieren, werden die Werte <b>True <\/b>oder <b>False <\/b>in Boolean-Variablen namens <b>bolAllesMarkiert <\/b>und <b>bolBackslashErreicht <\/b>geschrieben.<\/p>\n<p><b>bolAllesMarkiert <\/b>wird auf <b>True <\/b>eingestellt, wenn der enthaltene Text eine L&auml;nge gr&ouml;&szlig;er als <b>0 <\/b>besitzt und die L&auml;nge des selektierten Textes der gesamten Textl&auml;nge entspricht. Die Variable <b>bolBackslashErreicht <\/b>soll mit <b>True <\/b>gef&uuml;llt werden, wenn sich die Einf&uuml;gemarke am Ende des Textes befindet und wenn das n&auml;chste zu l&ouml;schende Zeichen ein Backslash ist. Wenn dieser Teil der Prozedur aufgerufen wird, wurde ja noch kein Zeichen gel&ouml;scht, der Text lautet also etwa auf <b>c:\\Daten\\P<\/b>.Der Benutzer hat bereits auf die <b>L&ouml;schen<\/b>-Taste geklickt, sonst w&auml;ren wir nicht in diesem Zweig der <b>Select Case<\/b>-Anweisung dieser Prozedur gelandet. Das <b>P <\/b>ist also prinzipiell weg, aber wir m&uuml;ssen nat&uuml;rlich trotzdem den Ausdruck inklusive dieses Zeichens untersuchen, das es ja noch nicht gel&ouml;scht wurde. Wir pr&uuml;fen also, ob die Fundstelle des ersten Backslash-Zeichens von hinten aus der L&auml;nge des Textes minus <b>1<\/b> entspricht! Damit h&auml;tten wir bereits die beiden Variablen <b>bolAllesMarkiert <\/b>oder <b>bolBackslashErreicht <\/b>gef&uuml;llt.<\/p>\n<p>Hat <b>bolAllesMarkiert <\/b>den Wert <b>True<\/b>, soll der Teil bis zum ersten Backslash von hinten gel&ouml;scht werden, bei <b>c:\\Daten\\Programme <\/b>bleibt also <b>c:\\Daten <\/b>&uuml;ber. Die Einf&uuml;gemarke wird ganz nach hinten gesetzt, das Kombinationsfeld mit <b>GetFoldersAndFiles <\/b>gef&uuml;llt und aufgeklappt. Au&szlig;erdem wird <b>KeyCode <\/b>gleich <b>0 <\/b>gesetzt, damit das Bet&auml;tigen der <b>L&ouml;schen<\/b>-Taste als erledigt betrachtet werden kann.<\/p>\n<p>Wurden hingegen durch das L&ouml;schen einzelner Zeichen ein Backslash-Zeichen erreicht, wird ebenfalls der Teil hinter diesem Backslash-Zeichen gel&ouml;scht (alse nur das sowieso zu l&ouml;schende Zeichen), die Einf&uuml;gemarke an das Ende des aktuellen Ausdrucks gesetzt, das Kombinationsfeld aktualisiert und ausgeklappt.<\/p>\n<p><b>Kombinationsfeld mit Verzeichnissen und Dateien f&uuml;llen<\/b><\/p>\n<p>Die Prozedur <b>GetFoldersAndFiles <\/b>ist das Arbeitstier dieser L&ouml;sung (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-61-anchor\">Listing 3<\/a><\/span>). Sie erwartet die Angabe eines Verzeichnisses, zu dem die folgenden Informationen in ein Recordset gef&uuml;llt werden sollen:<\/p>\n<p class=\"listingueberschrift\">Listing 3: Ermitteln des Recordsets f&uuml;r das Kombinationsfeld<\/p>\n<pre>Public Function GetFoldersAndFiles(strFolder As String) As adodb.Recordset\r\n    Dim objFolder As Scripting.Folder\r\n    Dim objFile As Scripting.File\r\n    Dim objParentFolder As Scripting.Folder\r\n    Dim intPosition As String\r\n    Set rst = New adodb.Recordset\r\n    With rst\r\n        .LockType = adLockOptimistic\r\n        .Fields.Append &quot;Pfad&quot;, adVarWChar, 500\r\n        .Open\r\n        Set objParentFolder = objFSO.GetFolder(strFolder)\r\n        intPosition = InStr(strFolder, &quot;\\&quot;)\r\n        Do While Not intPosition = 0\r\n            .AddNew\r\n            !Pfad = Mid(strFolder, 1, intPosition)\r\n            .Update\r\n            intPosition = InStr(intPosition + 1, strFolder, &quot;\\&quot;)\r\n        Loop\r\n        On Error Resume Next\r\n        For Each objFolder In objParentFolder.SubFolders\r\n            .AddNew\r\n            !Pfad = objFolder.Path &amp; &quot;\\&quot;\r\n            .Update\r\n        Next objFolder\r\n        For Each objFile In objParentFolder.Files\r\n            .AddNew\r\n            !Pfad = objFile.Path\r\n            .Update\r\n        Next objFile\r\n    End With\r\n    Select Case Err.Number\r\n        Case 70, 92\r\n            MsgBox &quot;Die Unterverzeichnisse konnten nicht eingelesen werden.&quot;\r\n        Case 0\r\n        Case Else\r\n            MsgBox &quot;Fehler &quot; &amp; Err.Number &amp; &quot;, &quot; &amp; Err.Description\r\n    End Select\r\n    On Error GoTo 0\r\n    Set GetFoldersAndFiles = rst\r\nEnd Function<\/pre>\n<ul>\n<li class=\"aufz-hlung\">Laufwerk des Verzeichnisses, etwa <b>c:\\<\/b>,<\/li>\n<li class=\"aufz-hlung\">das Verzeichnis selbst, also etwa <b>c:\\Daten\\Buecher\\Access 2010<\/b>,<\/li>\n<li class=\"aufz-hlung\">alle Verzeichnisse zwischen der Laufwerksangabe und dem angegebenen Verzeichnis, also <b>c:\\Daten <\/b>und <b>c:\\Daten\\Buecher<\/b>,<\/li>\n<li class=\"aufz-hlung\">alle direkten Unterverzeichnisse des angegebenen Verzeichnisses und<\/li>\n<li class=\"aufz-hlung\">alle Dateien im angegebenen Verzeichnis.<\/li>\n<\/ul>\n<p>Es gibt zwar eine modulweit deklarierte <b>Recordset<\/b>-Variable, die man theoretisch leeren k&ouml;nnte, aber es geht vermutlich schneller, dieses Variable mit einem neuen Recordset zu f&uuml;llen.<\/p>\n<p>Dies geschieht auf die gleiche Weise, wie es schon in der Prozedur <b>GetDrives <\/b>erledigt wurde &#8211; durch Erzeugen des Recordsets, Einstellen der Eigenschaft <b>LockType <\/b>auf <b>acLockOptimistic <\/b>und hinzuf&uuml;gen des Feldes <b>Pfad<\/b>.<\/p>\n<p>Dann f&uuml;llt die Prozedur die <b>Folder<\/b>-Variable <b>objParentFolder <\/b>mit einem Verweis auf den mit dem Parameter <b>strFolder <\/b>&uuml;bergebenen Verzeichnis. Diesen Verweis erhalten Sie mithilfe der Methode <b>GetFolder <\/b>des <b>FileSystemObject<\/b>-Objekts. <\/p>\n<p>Im ersten Teil ermittelt die Prozedur das Laufwerk und alle <b>Parent<\/b>-Verzeichnisse des aktuellen Verzeichnisses. Dazu speichert sie zun&auml;chst die Position des ersten Backslash-Zeichens des Verzeichnisses, in der Regel also das hinter dem Laufwerksbuchstaben. Nun werden solange neue Datens&auml;tze im Recordset angelegt, bis die Prozedur kein weiteres Backslash-Zeichen mehr findet.<\/p>\n<p>Als Wert des Feldes <b>Pfad <\/b>wird dabei jeweils der Ausdruck bis zum aktuell gefundenen Backslash-Zeichen eingetragen. Bei einem Verzeichnis wie <b>c:\\Daten\\Buecher\\Access2010\\ <\/b>landen also nacheinander die Eintr&auml;ge <b>c:\\<\/b>, <b>c:\\Daten\\<\/b>, <b>c:\\Daten\\Buecher\\ <\/b>und <b>c:\\Daten\\Buecher\\Access2010\\ <\/b>in den ersten Datens&auml;tzen des Recordsets.<\/p>\n<p>Dann durchl&auml;uft eine <b>For Each<\/b>-Schleife alle <b>Folder<\/b>-Elemente der <b>SubFolders<\/b>-Auflistung des in <b>objParentFolder <\/b>gespeicherten aktuellen <b>Folder<\/b>-Objekts. Hier werden also alle Unterverzeichnisse durchlaufen. Dabei legt die Prozedur jeweils einen neuen Datensatz im Recordset an und tr&auml;gt den Pfad zum Verzeichnis samt Verzeichnisnamen in das Feld <b>Pfad <\/b>ein.<\/p>\n<p>Genau das Gleiche geschieht auch f&uuml;r die im mit objParentFolder referenzierten Verzeichnis enthaltenen File-Elemente. Jede in diesem Verzeichnis enthaltene Datei wird so als neuer Datensatz in das Recordset eingetragen.<\/p>\n<p><b>Fehler beim Untersuchen eines Verzeichnisses<\/b><\/p>\n<p>Bei manchen Verzeichnissen wie etwa gesch&uuml;tzten Systemverzeichnissen verweigern die Methoden des <b>FileSystemObject<\/b>-Objekts den Dienst. Beim Versuch, auf die in einem solchen Verzeichnis enthaltenen Unterverzeichnisse oder Dateien zuzugreifen, wird ein Fehler ausgel&ouml;st, zum Beispiel der Fehler 70 (Zugriff verweigert). In diesem Fall erscheint ein entsprechender Hinweis.<\/p>\n<p>Schlie&szlig;lich weist die Funktion seinem R&uuml;ckgabeparameter GetFoldersAndFiles den Verweis auf das Recordset zu.<\/p>\n<p><b>&Ouml;ffnen der Laufwerk-Liste beim Leeren des Feldes<\/b><\/p>\n<p>F&uuml;r das Leeren des Kombinationsfeldes gibt es mehrere M&ouml;glichkeiten. Dies geschieht, wenn Sie mit der L&ouml;schen-Taste nacheinander alle Zeichen l&ouml;schen, aber Sie k&ouml;nnen es auch komplett markieren und die Entfernen-Taste bet&auml;tigen. Damit die Liste des Kombinationsfeldes in einem solchen Fall wieder mit den Laufwerkbuchstaben gef&uuml;llt wird, haben wir noch eine Prozedur angelegt, die durch das &auml;ndern des Inhalts des Kombinationsfeldes ausgel&ouml;st wird.<\/p>\n<p>Sie sieht wie folgt aus und stellt lediglich das Recordset-Objekt wieder auf das Ergebnis der Funktion <b>GetDrives <\/b>ein und klappt das Kombinationsfeld auf &#8211; und das nur, wenn das Kombinationsfeld eine Zeichenkette der L&auml;nge <b>0 <\/b>enth&auml;lt:<\/p>\n<pre>Private Sub cboDateiname_Change()\r\n    With Me!cboDateiname\r\n        If Len(.Text) = 0 Then\r\n            Set .Recordset = GetDrives\r\n            .Dropdown\r\n        End If\r\n    End With\r\nEnd Sub<\/pre>\n<p><b>Verlassen des Kombinationsfeldes nur mit g&uuml;ltigem Verzeichnis<\/b><\/p>\n<p>Schlie&szlig;lich kann es geschehen, dass der Benutzer das Kombinationsfeld verl&auml;sst, ohne ein g&uuml;ltiges Verzeichnis oder eine g&uuml;ltige Datei ausgew&auml;hlt zu haben. In diesem Fall soll eine entsprechende Meldung erscheinen.<\/p>\n<p>Dieses Verhalten erreichen wir, indem wir die Eigenschaft <b>Nur Listeneintr&auml;ge <\/b>auf <b>Ja <\/b>einstellen und dann eine <b>Bei Fehler<\/b>-Ereignisprozedur wie die aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-59-anchor\">Listing 4<\/a><\/span> hinzuf&uuml;gen.<\/p>\n<p class=\"listingueberschrift\">Listing 4: Fehlermeldung bei Angabe nicht vorhandener Verzeichnisse oder Dateien<\/p>\n<pre>Private Sub Form_Error(DataErr As Integer, Response As Integer)\r\n    Select Case DataErr\r\n        Case 2237\r\n            MsgBox &quot;Bitte w&auml;hlen Sie ein g&uuml;ltiges Verzeichnis oder eine g&uuml;ltige Datei aus.&quot;\r\n            Response = acDataErrContinue\r\n        Case 0\r\n        Case Else\r\n            MsgBox &quot;Fehler &quot; &amp; DataErr &amp; &quot;, &quot; &amp; AccessError(DataErr)\r\n    End Select\r\nEnd Sub<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Funktion wiederverwendbar machen<\/p>\n<p>Wenn Sie die Dateiauswahl-Funktion dieses Beitrags f&uuml;r weitere Formulare oder Anwendungen verf&uuml;gbar machen wollen, sollten Sie die beschriebenen Ereignisprozeduren nicht jedesmal kopieren, sondern diese in eine Klasse exportieren, die Sie dann beim Laden des betroffenen Formulars instanzieren und mit den entsprechenden Informationen versehen.<\/p>\n<p>Wir haben das bereits f&uuml;r Sie erledigt und der Beispieldatenbank ein Klassenmodul namens <b>clsFileAndFolderCombobox <\/b>hinzugef&uuml;gt. Wir haben dieses auch noch um eine weitere Funktion erg&auml;nzt, mit der Sie ein Standardverzeichnis f&uuml;r das Kombinationsfeld festlegen k&ouml;nnen.<\/p>\n<p>Dies ist auch ein Feature der meisten Dateiauswahl-Dialoge &#8211; Sie k&ouml;nnen dort festlegen, welches Verzeichnis dort gleich beim &Ouml;ffnen angezeigt werden soll.<\/p>\n<p>Wenn Sie ein Kombinationsfeld mit der Dateiauswahl-Funktion ausstatten m&ouml;chten, brauchen Sie nur die Klasse <b>clsFileAndFolderCombobox <\/b>zum VBA-Projekt hinzuzuf&uuml;gen.<\/p>\n<p>Danach legen Sie eine Prozedur an, die durch das Ereignis <b>Beim Laden <\/b>ausgel&ouml;st wird und erg&auml;nzen diese wie folgt:<\/p>\n<pre>Private Sub Form_Load()\r\n    Set objFileAndFolderCombobox = New clsFileAndFolderCombobox\r\n    With objFileAndFolderCombobox\r\n        .DefaultFolder = CurrentProject.Path\r\n        Set .FileAndFolderComboBox = Me!cboKlasse\r\n    End With\r\nEnd Sub<\/pre>\n<p>Nat&uuml;rlich m&uuml;ssen Sie im Kopf des Klassenmoduls noch eine Objektvariable f&uuml;r die Instanz der Klasse <b>clsFileAndFolderCombobox <\/b>deklarieren:<\/p>\n<pre>Dim objFileAndFolderCombobox As clsFileAndFolderCombobox<\/pre>\n<p>Die Prozedur erzeugt zun&auml;chst eine neue Instanz der Klasse und weist dieser dann zuerst den Standardordner (<b>DefaultFolder<\/b>) und dann einen Verweis auf das mit der Funktion auszustattende Kombinationsfeld zu. Das muss in dieser Reihenfolge geschehen, sonst meckert die Klasse bei der ersten Nutzung.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieses Kombinationsfeld ist jetzt schon das aktuelle Lieblingstool des Autors und wird nun erstmal in einigen Anwendungen gegen bestehende Dateiauswahl-Dialoge ausgetauscht.<\/p>\n<p>Es gibt noch Ausbaupotential: So k&ouml;nnte man festlegen, dass nur Verzeichnisse oder nur Dateien ausgew&auml;hlt werden. Im letzteren Fall k&ouml;nnten Sie einen Filter f&uuml;r die Dateiauswahl vorgeben, damit beispielsweise nur <b>.mdb<\/b>-Dateien angezeigt werden. Oder Sie f&uuml;gen die M&ouml;glichkeit hinzu, dass der Benutzer auch noch nicht vorhandene Dateien angeben kann, um einen Speicherdateinamen zu ermitteln.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DateiauswahlPerKombifeld.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{575CBB9F-AE00-40E0-A0CB-320AD29035C3}\/aiu_793.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt verschiedene Varianten, eine Datei oder ein Verzeichnis per Dateidialog auszuw&auml;hlen. Wer jedoch schon einmal mit einer Linux-Shell oder auch mit dem MS-Dos-Fenster gearbeitet hat, wei&szlig;, dass sich Verzeichnisse und Dateien auch rein tastaturgesteuert eingeben lassen. Was liegt da n&auml;her, als eine effiziente und schnelle M&ouml;glichkeit zum Ausw&auml;hlen von Verzeichnis- und Dateinamen zu bauen, die ausschlie&szlig;lich per Tastatur bedient werden kann Dieser Beitrag zeigt, wie Sie ein herk&ouml;mmliches Kombinationsfeld zur Dateiauswahl einsetzen.<\/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":[662011,66052011,44000023],"tags":[],"class_list":["post-55000793","post","type-post","status-publish","format-standard","hentry","category-662011","category-66052011","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>Dateiauswahl per Kombinationsfeld - 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\/Dateiauswahl_per_Kombinationsfeld\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dateiauswahl per Kombinationsfeld\" \/>\n<meta property=\"og:description\" content=\"Es gibt verschiedene Varianten, eine Datei oder ein Verzeichnis per Dateidialog auszuw&auml;hlen. Wer jedoch schon einmal mit einer Linux-Shell oder auch mit dem MS-Dos-Fenster gearbeitet hat, wei&szlig;, dass sich Verzeichnisse und Dateien auch rein tastaturgesteuert eingeben lassen. Was liegt da n&auml;her, als eine effiziente und schnelle M&ouml;glichkeit zum Ausw&auml;hlen von Verzeichnis- und Dateinamen zu bauen, die ausschlie&szlig;lich per Tastatur bedient werden kann Dieser Beitrag zeigt, wie Sie ein herk&ouml;mmliches Kombinationsfeld zur Dateiauswahl einsetzen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:57:36+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dateiauswahl per Kombinationsfeld\",\"datePublished\":\"2020-05-22T21:57:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/\"},\"wordCount\":3036,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/06f289bba83244dfb602471a4d4456fe\",\"articleSection\":[\"2011\",\"5\\\/2011\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/\",\"name\":\"Dateiauswahl per Kombinationsfeld - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/06f289bba83244dfb602471a4d4456fe\",\"datePublished\":\"2020-05-22T21:57:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/06f289bba83244dfb602471a4d4456fe\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/06f289bba83244dfb602471a4d4456fe\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateiauswahl_per_Kombinationsfeld\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dateiauswahl per Kombinationsfeld\"}]},{\"@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":"Dateiauswahl per Kombinationsfeld - 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\/Dateiauswahl_per_Kombinationsfeld\/","og_locale":"de_DE","og_type":"article","og_title":"Dateiauswahl per Kombinationsfeld","og_description":"Es gibt verschiedene Varianten, eine Datei oder ein Verzeichnis per Dateidialog auszuw&auml;hlen. Wer jedoch schon einmal mit einer Linux-Shell oder auch mit dem MS-Dos-Fenster gearbeitet hat, wei&szlig;, dass sich Verzeichnisse und Dateien auch rein tastaturgesteuert eingeben lassen. Was liegt da n&auml;her, als eine effiziente und schnelle M&ouml;glichkeit zum Ausw&auml;hlen von Verzeichnis- und Dateinamen zu bauen, die ausschlie&szlig;lich per Tastatur bedient werden kann Dieser Beitrag zeigt, wie Sie ein herk&ouml;mmliches Kombinationsfeld zur Dateiauswahl einsetzen.","og_url":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:57:36+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dateiauswahl per Kombinationsfeld","datePublished":"2020-05-22T21:57:36+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/"},"wordCount":3036,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe","articleSection":["2011","5\/2011","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/","url":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/","name":"Dateiauswahl per Kombinationsfeld - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe","datePublished":"2020-05-22T21:57:36+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/06f289bba83244dfb602471a4d4456fe"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dateiauswahl_per_Kombinationsfeld\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dateiauswahl per Kombinationsfeld"}]},{"@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\/55000793","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=55000793"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000793\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}