{"id":55000335,"date":"2017-08-01T00:00:00","date_gmt":"2020-01-24T15:59:42","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=335"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Datei_und_Verzeichnisoperationen_mit_der_Shell","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html","title":{"rendered":"Datei- und Verzeichnisoperationen mit der Shell"},"content":{"rendered":"<p class='introduction'>Zu den h&auml;ufigsten Aufgaben au&szlig;erhalb einer Access-Datenbankanwendung geh&ouml;rt sicher der Zugriff auf Dateien und Verzeichnisse. Ob Sie nun externe Daten exportieren oder importieren, Dokumente fernsteuern, oder Eigenschaften von Dateien ermitteln m&ouml;chten, all dies erfordert Navigation in Verzeichnissen und das Ansprechen von Dateien. Und das m&ouml;glicherweise auch noch innerhalb einer Netzwerkstruktur. Die VBA-Grundfunktionen machen es Ihnen da nicht immer leicht. &uuml;ber die Shell von Windows kommen Sie jedoch spielend zum Ziel.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1610_ShellObjekte.accdb<\/b><\/p>\n<h2>VBA-Funktionen f&uuml;r Dateien und Verzeichnisse<\/h2>\n<p>Die Klasse <b>FileSystem<\/b> der VBA-Bibliothek gibt im Objektkatalog eine nur d&uuml;rftige Liste von Methoden aus, &uuml;ber die verschiedene Datei- und Verzeichnisoperationen ausgef&uuml;hrt werden k&ouml;nnen. Dieses altehrw&uuml;rdige Ensemble stammt noch aus Zeiten, in denen <b>Visual Basic<\/b> eine gewichtige Rolle spielte, und das war Mitte der 90er-Jahre, als noch erheblich geringere Anforderungen gestellt wurden. Seitdem hat sich am Befehlsbestand nichts ge&auml;ndert und die Funktionen weisen leider immer noch M&auml;ngel auf.<\/p>\n<p>Die Liste ist schnell beschrieben. Zu den Verzeichnisfunktionen geh&ouml;ren diese:<\/p>\n<p><b>CurDir<\/b> ermittelt das aktuelle Verzeichnis. <b>ChDir<\/b> wechselt zu einem anderen, <b>ChDrive<\/b> zu einem anderen Laufwerk. Derlei braucht heute niemand mehr &#8211; es spielte eher unter <b>DOS<\/b> eine Rolle. <b>MkDir<\/b> erzeugt ein neues Verzeichnis mit dem im Parameter angegebenen. Leider funktioniert das nur dann, wenn das oberste Verzeichnis bereits existiert. Das neue kann nur eine Ebene tiefer angelegt werden. &auml;hnliches gilt f&uuml;r <b>RmDir<\/b>, was ein Verzeichnis l&ouml;scht. Die Anweisung klappt nicht, wenn ein Verzeichnis nicht leer ist.<\/p>\n<p>Und das war&#8217;s auch schon! Die Dateimethoden beschr&auml;nken sich nun auf folgende:<\/p>\n<p><b>Kill<\/b> l&ouml;scht die angegebene Datei. <b>FileCopy<\/b> kopiert eine Datei in den im zweiten Parameter angegebenen Ordner. Verschieben geht nicht. Es ist  nur durch die Kombination aus <b>FileCopy<\/b> und anschlie&szlig;endem <b>Kill<\/b> zu realisieren. <b>FileLen<\/b> gibt die Dateigr&ouml;&szlig;e zur&uuml;ck, <b>FileDateTime<\/b> das Erstelldatum, <b>GetAttr<\/b> die Zugriffsattribute.<\/p>\n<p>Lesend und schreibend greifen Sie &uuml;ber die <b>Open<\/b>-Anweisung auf eine Datei zu. Das ist wohl von allen der wichtigste Befehl. Und schlie&szlig;lich lassen sich &uuml;ber <b>Dir<\/b> sowohl Dateien, wie auch Verzeichnisse, enumerieren oder nach ihrer Existenz befragen.<\/p>\n<p>Mindestens zwei Kritikpunkte sind f&uuml;r s&auml;mtliche dieser Dateisystemfunktionen hervorzubringen. Zum einen scheitern sie h&auml;ufig an Objekten, deren Namen in Unicode formatiert sind und Sonderzeichen enthalten. Hier ruft VBA schlicht einen Fehler aus. Zum anderen &#8211; und das ist viel schwerwiegender! &#8211; kommen sie nicht mit Netzwerkpfaden klar. Auf die Dateien eines Server in der Syntax <b>\\\\serverxy\\c\\&#8230;<\/b> besteht kein Zugriff. Hier wird dann ein nicht existierendes Verzeichnis bem&auml;ngelt oder eine falsche Dateinummer gemeldet. Behelfen k&ouml;nnen Sie sich da dann nur mit zus&auml;tzlich eingerichteten Netzlaufwerken.<\/p>\n<p>Einst f&uuml;hrten diese Beschr&auml;nkungen zu einer Menge Programmierl&ouml;sungen unter Verwendung von <b>Windows-API<\/b>-Funktionen, die im Internet fr&ouml;hliche Urst&auml;nde feierten. Das aber ist inzwischen obsolet.<\/p>\n<h2>Die Windows-Shell-Bibliothek<\/h2>\n<p>Es lohnt sich uneingeschr&auml;nkt, auf diese <b>COM-Bibliothek<\/b>, die grunds&auml;tzlich jedes Windows mit sich bringt, ein Auge zu werfen, denn sie erm&ouml;glicht einfache L&ouml;sungen, die auf andere Weise viel umst&auml;ndlicher zu erreichen w&auml;ren. Sie h&auml;ngen sie in ihr VBA-Projekt ein, indem Sie zun&auml;chst einen Verweis auf <b>Microsoft Shell Controls And Automation <\/b>setzen. Verantwortlich f&uuml;r die Bibliothek ist die System-Dll <b>shell32<\/b>. So lautet auch der Name der Bibliothek, wenn Sie sie dann unter VBA ansprechend m&ouml;chten. Es gibt genau ein Objekt in ihr, das die Zentrale f&uuml;r alle weiteren Vorg&auml;nge darstellt, n&auml;mlich das <b>Shell<\/b>-Objekt. <\/p>\n<p>Sie erzeugen das Objekt &uuml;ber den <b>New<\/b>-Operator:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>oShell<span style=\"color:blue;\"> As <\/span>Shell32.Shell\r\n<span style=\"color:blue;\">Set<\/span> oShell = <span style=\"color:blue;\">New<\/span> Shell32.Shell<\/pre>\n<p>Nun lassen sich &uuml;ber dieses Objekt allerlei Dinge anstellen, wie ein Blick in den Objektkatalog zeigt, nachdem Sie im Kombinationsfeld links oben <b>Shell32<\/b> ausw&auml;hlten und in der Klassenliste <b>Shell<\/b> markierten. Wir lassen hier jedoch alle Methoden unbeachtet, bis auf eine sehr m&auml;chtige, die sich <b>NameSpace<\/b> nennt.<\/p>\n<h2>NameSpace<\/h2>\n<p>Die Funktion gibt zu dem im Parameter &uuml;bergebenen Ausdruck ein Verzeichnisobjekt zur&uuml;ck. Dieses ist vom in der Verweisbibliothek definierten Typ <b>Folder<\/b>, mit dem sich anschlie&szlig;end weitere Operationen ausf&uuml;hren lassen. Als Parameter f&uuml;r NameSpace kommen sowohl Strings, wie auch Zahlen infrage, wie wir gleich sehen werden.<\/p>\n<p>Ein kleines Bespiel macht alles deutlicher:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>oShell<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Shell32.Shell\r\n<span style=\"color:blue;\">Dim <\/span>oFld<span style=\"color:blue;\"> As <\/span>Shell32.Folder\r\n<span style=\"color:blue;\">Set<\/span> oFld = _\r\n&nbsp;&nbsp;&nbsp;&nbsp;oShell.NameSpace(\"c:\\windows\")\r\n<span style=\"color:blue;\">Debug.Print<\/span> oFld.Title<\/pre>\n<p>Im VBA-Direktfenster wird bei Ausf&uuml;hrung dieses Schnipsels der Text <b>Windows<\/b> ausgegeben. Das Folder-Objekt <b>oFld<\/b> hat diesen Titel, der nicht mit dem Pfad zu verwechseln ist. Den erh&auml;lt man erst &uuml;ber einen Umweg:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> oFld.Self.Path\r\n> c:\\windows<\/pre>\n<p>Das ist soweit noch nicht sonderlich aufregend. Die Besonderheit der <b>Windows-Shell <\/b>liegt jedoch darin begr&uuml;ndet, dass sie all ihre Objekte wie Verzeichnisse und Dateien behandeln kann, also auch Objekte au&szlig;erhalb des Dateisystems. Der Explorer zeigt das deutlich. Deshalb kann man <b>NameSpace<\/b> auch unterschiedliche Werte f&uuml;r den Parameter zuweisen, eben jene, die auch der Explorer verarbeiten kann. Hier einige Beispiele f&uuml;r m&ouml;gliche Parameter:<\/p>\n<pre>c:\\windows\\\r\n<\/font>nas\\public\\images\r\n3\r\nhttp:\/\/www.access-im-unternehmen.de\r\nftp:\/\/ftp.rz.uni-wuerzburg.de\/pub\r\ne:\\dokumente\\alles.zip\r\n::{21EC2020-3AEA-1069-A2DD- _\r\n                        08002B30309D}<\/pre>\n<p>Da kann die <b>Dir<\/b>-Funktion von VBA wohl nicht mithalten! Die erste Zeile bezieht sich auf den lokalen Pfad von Windows. Die zweite ist eine ein Serverpad im Netzwerk &#8211; f&uuml;r die Shell kein Problem! Die dritte Zeile &uuml;berg&auml;be einfach eine Zahl. NameSpace nimmt dann an, dass es sich um einen der im System verankerten sogenannten <b>Special Folders<\/b> handelt, die jeweils eine eindeutige <b>ID<\/b> besitzen. Das sind vorgegebene Windows-Spezialordner, wie etwa der <b>Desktop<\/b>, welcher &uuml;ber den Parameterwert <b>0<\/b> anzusprechen w&auml;re. Mit der <b>3<\/b> hingegen erhalten Sie als <b>Folder.Title<\/b> die Bezeichnung <b>Systemsteuerung<\/b>, denn auch die ist ein virtueller Ordner. Und was w&auml;re deren Pfad <b>Folder.Self.Path<\/b> gibt dies aus:<\/p>\n<pre>::{21EC2020-3AEA-1069-A2DD- _\r\n                        08002B30309D}<\/pre>\n<p>Es handelt sich hier um einen <b>GUID<\/b>-String, da es ja, im Gegensatz zum Desktop, keinen physischen Ordner f&uuml;r die Systemsteuerung gibt. Geben Sie diesen String einmal spa&szlig;eshalber in die Adresszeile des Explorers ein. Sie gelangen damit tats&auml;chlich zur Systemsteuerung!<\/p>\n<p>Selbst Internet-<b>URLs<\/b> kann <b>NameSpace<\/b> verarbeiten, wie die beiden folgenden Zeilen der Beispielparameter zeigen. Sowohl das <b>HTTP<\/b>-Protokoll, wie auch das <b>FTP<\/b>-Protokoll, werden klaglos angenommen. Hier kommen ebenfalls g&uuml;ltige <b>Folder<\/b>-Objekte zustande!<\/p>\n<p>Noch krasser ist die &uuml;bergabe der <b>ZIP<\/b>-Datei <b>alles.zip<\/b>. Denn auch der Explorer behandelt <b>ZIP<\/b>-Archive wie Ordner. Deshalb ist ein ZIP-Archiv automatisch auch bei <b>NameSpace<\/b> ein g&uuml;ltiges Ordner-Objekt.<\/p>\n<p>Hier wird schon deutlich, dass die M&ouml;glichkeiten der Shell-Objekte weit &uuml;ber das hinausgehen, was VBA an Bordmitteln zu bieten hat. <\/p>\n<h2>FolderExists<\/h2>\n<p>Aus dem bisher Erl&auml;uterten geht die einfachste Anwendung hervor, n&auml;mlich der Test, ob ein Verzeichnis denn existiert. &uuml;bergeben Sie <b>NameSpace<\/b> n&auml;mlich einen ung&uuml;ltigen String oder eine ung&uuml;ltige Zahl, so ereignet sich kein Fehler. Stattdessen ist das zur&uuml;ckgegeben <b>Folder<\/b>-Objekt einfach leer, hat also quasi den Wert <b>Nothing<\/b>. Das l&auml;sst sich nun leicht &uuml;berpr&uuml;fen, wie die Routine <b>FolderExists<\/b> in Listing 1 zeigt. Ihr &uuml;bergeben Sie das fragliche Verzeichnis als Parameter. In der Objektvariablen <b>oFld<\/b> erhalten Sie aus <b>NameSpace<\/b> das <b>Folder<\/b>-Objekt. Ist dieses nicht <b>Nothing<\/b>, so existiert das Verzeichnis, womit der R&uuml;ckgabewert der Funktion auf <b>True<\/b> gesetzt wird. Wohlgemerkt: Nicht nur lokale Verzeichnisse k&ouml;nnen mit dieser Funktion befragt werden, sondern ebenso Netzwerkpfade und Internetpfade!<\/p>\n<pre><span style=\"color:blue;\">Function <\/span>FolderExists(sFolder<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>oFld<span style=\"color:blue;\"> As <\/span>Shell32.Folder\r\n     \r\n     <span style=\"color:blue;\">Set<\/span> oFld = oShell.NameSpace(sFolder)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> oFld Is Nothing<span style=\"color:blue;\"> Then<\/span> FolderExists = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 1: &uuml;berpr&uuml;fen der Existenz eines Verzeichnisses<\/p>\n<p>Nutzt man die <b>Shell<\/b>-Funktionen in mehreren Prozeduren, so ist es &uuml;brigens hilfreich, statt dem dauernden Neuerzeugen des <b>Shell<\/b>-Objekts f&uuml;r dieses eine gesonderte Funktion zu schreiben. Auch <b>FolderExists<\/b> verwendet eine solche (<b>oShell<\/b>), wie sie in Listing 2 abgebildet ist. Hier ist im Modulkopf die globale Variable <b>m_Shell<\/b> deklariert. In der Prozedur wird erst getestet, ob deren Inhalt leer ist. In diesem Fall wird per <b>New<\/b> eine neue <b>Shell<\/b>-Instanz erzeugt und ihr zugewiesen. Die Funktion gibt schlie&szlig;lich den Wert der Objektvariablen <b>m_Shell<\/b> zur&uuml;ck. <\/p>\n<pre><span style=\"color:blue;\">Public <\/span>m_Shell<span style=\"color:blue;\"> As <\/span>Shell32.Shell \r\n<span style=\"color:blue;\">Public Function <\/span>oShell()<span style=\"color:blue;\"> As <\/span>Shell32.Shell\r\n     <span style=\"color:blue;\">If <\/span>m_Shell Is Nothing<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Set<\/span> m_Shell = <span style=\"color:blue;\">New<\/span> Shell32.Shell\r\n     <span style=\"color:blue;\">Set<\/span> oShell = m_Shell\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 2: Funktion zum Zur&uuml;ckgeben des Shell-Objekts<\/p>\n<h2>Special Folders<\/h2>\n<p>Es gibt keine genaue Aufstellung von Microsoft, welche Zahlenwerte f&uuml;r <b>NameSpace<\/b> welchem Spezialverzeichnis zuzuordnen sind. Das variiert je nach Betriebssystem und Sprache. Bei den gebr&auml;uchlichsten stimmen sie allerdings &uuml;berein.<\/p>\n<p>Den Desktop erreichen Sie immer &uuml;ber die <b>0<\/b>, das Startmen&uuml; &uuml;ber <b>22<\/b>, oder das Systemverzeichnis &uuml;ber <b>37<\/b>. Diese Werte sind im <b>Windows-SDK<\/b> in den <b>Header<\/b>-Dateien deklariert. Doch machen Sie f&uuml;r Ihr System doch einfach selbst die Aufstellung und verwenden die Routine <b>StoreSpecialFolders<\/b> im Modul <b>mdlSpcFolders<\/b> der Beispieldatenbank!<\/p>\n<p>Die in Listing 3 dargestellte Prozedur speichert alle m&ouml;glichen Werte in der Tabelle <b>tblShellFolders<\/b>, die zuerst &uuml;ber die <b>DELETE<\/b>-Anweisung geleert wird. Dann durchl&auml;uft eine Schleife auf den Z&auml;hler <b>i<\/b> die Werte von <b>0<\/b> bis <b>255<\/b> und testet <b>NameSpace<\/b> damit.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>StoreSpecialFolders()\r\n     <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>Folder\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>sPath<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>rs<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     \r\n     CurrentDb.Execute \"DELETE FROM tblShellFolders\"\r\n     <span style=\"color:blue;\">Set<\/span> rs = CurrentDb.OpenRecordset(\"SELECT * FROM tblShellFolders\", dbOpenDynaset)\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     For i = 0 To 255\r\n         <span style=\"color:blue;\">Set<\/span> fld = oShell.NameSpace(i)\r\n         Err.Clear\r\n         sPath = fld.Self.Path\r\n         <span style=\"color:blue;\">If <\/span>Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             rs.Add<span style=\"color:blue;\">New<\/span>\r\n             rs!SFID = i\r\n             rs![Name] = fld.Title\r\n             rs!Path = sPath\r\n             rs.Update\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     rs.Close\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 3: Alle Windows-Spezialordner kommen in die Tabelle tblShellFolders<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000335\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000335?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000335\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"22c77db969\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zu den h&auml;ufigsten Aufgaben au&szlig;erhalb einer Access-Datenbankanwendung geh&ouml;rt sicher der Zugriff auf Dateien und Verzeichnisse. Ob Sie nun externe Daten exportieren oder importieren, Dokumente fernsteuern, oder Eigenschaften von Dateien ermitteln m&ouml;chten, all dies erfordert Navigation in Verzeichnissen und das Ansprechen von Dateien. Und das m&ouml;glicherweise auch noch innerhalb einer Netzwerkstruktur. Die VBA-Grundfunktionen machen es Ihnen da nicht immer leicht. &uuml;ber die Shell von Windows kommen Sie jedoch spielend zum Ziel.<\/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":[66102016,662016,44000002],"tags":[],"class_list":["post-55000335","post","type-post","status-publish","format-standard","hentry","category-66102016","category-662016","category-Grundlagen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Datei- und Verzeichnisoperationen mit der Shell - Access [basics]<\/title>\n<meta name=\"description\" content=\"Zu den h\u00e4ufigsten Aufgaben au\u00dferhalb einer Access-Datenbankanwendung geh\u00f6rt sicher der Zugriff auf Dateien und Verzeichnisse. Ob Sie nun externe Daten exportieren oder importieren, Dokumente fernsteuern, oder Eigenschaften von Dateien ermitteln m\u00f6chten, all dies erfordert Navigation in Verzeichnissen und das Ansprechen von Dateien. Und das m\u00f6glicherweise auch noch innerhalb einer Netzwerkstruktur. Die VBA-Grundfunktionen machen es Ihnen da nicht immer leicht. \u00dcber die Shell von Windows kommen Sie jedoch spielend zum Ziel.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datei- und Verzeichnisoperationen mit der Shell - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Zu den h\u00e4ufigsten Aufgaben au\u00dferhalb einer Access-Datenbankanwendung geh\u00f6rt sicher der Zugriff auf Dateien und Verzeichnisse. Ob Sie nun externe Daten exportieren oder importieren, Dokumente fernsteuern, oder Eigenschaften von Dateien ermitteln m\u00f6chten, all dies erfordert Navigation in Verzeichnissen und das Ansprechen von Dateien. Und das m\u00f6glicherweise auch noch innerhalb einer Netzwerkstruktur. Die VBA-Grundfunktionen machen es Ihnen da nicht immer leicht. \u00dcber die Shell von Windows kommen Sie jedoch spielend zum Ziel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/SPFolders.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"21\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/SPFolders.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html\",\"name\":\"Datei- und Verzeichnisoperationen mit der Shell - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:42+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Zu den h\\u00e4ufigsten Aufgaben au\\u00dferhalb einer Access-Datenbankanwendung geh\\u00f6rt sicher der Zugriff auf Dateien und Verzeichnisse. Ob Sie nun externe Daten exportieren oder importieren, Dokumente fernsteuern, oder Eigenschaften von Dateien ermitteln m\\u00f6chten, all dies erfordert Navigation in Verzeichnissen und das Ansprechen von Dateien. Und das m\\u00f6glicherweise auch noch innerhalb einer Netzwerkstruktur. Die VBA-Grundfunktionen machen es Ihnen da nicht immer leicht. \\u00dcber die Shell von Windows kommen Sie jedoch spielend zum Ziel.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Datei_und_Verzeichnisoperationen_mit_der_Shell.html\",\"name\":\"Datei- und Verzeichnisoperationen mit der Shell\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000335"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000335\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}