{"id":55001031,"date":"2016-04-01T00:00:00","date_gmt":"2020-05-22T19:02:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1031"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Standardverzeichnisse_per_VBA_ermitteln","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/","title":{"rendered":"Standardverzeichnisse per VBA ermitteln"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es gibt eine ganze Reihe von Verzeichnissen, die es auf jedem Rechner gibt. Manche davon sollten eigentlich immer gleich lauten, aber durch die Installation von Windows oder Software auf Laufwerken mit anderen Laufwerkbuchstaben als C: gibt es hier gelegentlich Unterschiede. In manchen F&auml;llen sorgt auch die Betriebssystemversion f&uuml;r Unterschiede, beispielsweise bei 32bit- gegen&uuml;ber 64bit-Systemen. Und ganz sicher unterscheiden sich die Verzeichnisse, die dem jeweiligen Benutzer geh&ouml;ren. Dennoch wollen Sie fr&uuml;her oder sp&auml;ter einmal dynamisch auf ein bestimmtes Verzeichnis zugreifen wie etwa das Verzeichnis der eigenen Dateien eines Benutzers oder das Add-In-Verzeichnis von Access. Dieser Beitrag zeigt, wie Sie solche Verzeichnisse ermitteln.<\/b><\/p>\n<h2>Verzeichnisse, Dateinamen und Pfade<\/h2>\n<p>Vorab eine kleine Begriffskl&auml;rung: Wir sprechen nachfolgend von Verzeichnis, wenn es sich um einen Ort handelt, an dem man Dateien speichern kann:<\/p>\n<pre>c:\\Verzeichnis<\/pre>\n<p>Ein Dateiname ist der reine Dateiname ohne Verzeichnis:<\/p>\n<pre>Beispieldatenbank.mdb<\/pre>\n<p>Der Pfad fasst Verzeichnis und Dateiname zusammen, wobei beide noch durch das Backslash-Zeichen voneinander getrennt werden:<\/p>\n<pre>c:\\Verzeichnis\\Beispieldatenbank.mdb<\/pre>\n<h2>Verzeichnis der aktuellen Datenbankdatei<\/h2>\n<p>Die aktuelle Datenbank wollen Sie zum Beispiel ermitteln, wenn Sie auf Dateien zugreifen wollen, die Sie im Kontext der aktuellen Datenbankanwendung direkt im gleichen oder in einem untergeordneten Verzeichnis der Datenbank gespeichert haben. Fr&uuml;her, als es noch kein <b>CurrentProject<\/b>-Objekt gab, hat man das Verzeichnis einer Datenbank &uuml;ber den Umweg der Eigenschaft <b>Name <\/b>des Objekts <b>CurrentDb <\/b>ermittelt. <b>CurrentDb.Name<\/b> lieferte den kompletten Pfad, also beispielsweise den folgenden Ausdruck:<\/p>\n<pre>c:\\Verzeichnis\\Beispieldatenbank.mdb<\/pre>\n<p>Den Dateinamen konnte man mithilfe der Funktion <b>Dir <\/b>ermitteln, die lediglich den Namen einer Datei bei Angabe des kompletten Pfades zur&uuml;cklieferte:<\/p>\n<pre>  Dir(\"c:\\Verzeichnis\\Beispieldatenbank.mdb\")\r\n   Beispieldatenbank.mdb<\/pre>\n<p>Davon ausgehend, dass der Dateiname nicht als Teil eines der Verzeichnisse verwendet wurde, die den Speicherort der Datei festlegten, lie&szlig; sich so durch geschickten Einsatz von Zeichenkettenfunktionen auch das Verzeichnis extrahieren:<\/p>\n<pre><span style=\"color:blue;\">Left<\/span>(CurrentDb.Name, <span style=\"color:blue;\">Len<\/span>(CurrentDb.Name) - <span style=\"color:blue;\">Len<\/span>(Dir(CurrentDb.Name)))<\/pre>\n<p>Dies ermittelte im letzten Teil zun&auml;chst die L&auml;nge des Dateinamens. Dann wird die L&auml;nge des Verzeichnisses ohne Dateiname ermittelt. Das Ergebnis dient als zweiter Parameter der <b>Left<\/b>-Funktion, die nur die dadurch angegebene Anzahl Zeichen des im ersten Parameter &uuml;bergebenen Ausdrucks zur&uuml;ckgibt.<\/p>\n<p>Ab Access 2000 &auml;nderte sich dies zum Gl&uuml;ck: Das <b>CurrentProject<\/b>-Objekt wurde eingef&uuml;hrt und lieferte einige Eigenschaften, mit denen sich Dateiname, Verzeichnis und Pfad separat ermitteln lie&szlig;en &#8211; n&auml;mlich <b>Name<\/b>, <b>Path <\/b>und <b>FullName<\/b>:<\/p>\n<pre>  CurrentProject.Name\r\n   StandardverzeichnissePerVBA.accdb\r\n  CurrentProject.Path\r\n   C:\\...\\StandardverzeichnissePerVBA\r\n  CurrentProject.FullName\r\n   C:\\...\\StandardverzeichnissePerVBA\\ StandardverzeichnissePerVBA.accdb<\/pre>\n<h2>Verzeichnis der Datei MSAccess.exe<\/h2>\n<p>Das Verzeichnis der ausf&uuml;hrbaren Datei <b>MSAccess.exe<\/b>, mit der die aktuell ge&ouml;ffnete Datenbankdatei gestartet wurde, finden Sie mit dem folgenden Ausdruck &#8211; hier etwa f&uuml;r die 32bit-Version unter Office 15:<\/p>\n<pre>  SysCmd(acSysCmdAccessDir)\r\n   C:\\Program Files (x86)\\Microsoft Office\\Office15\\<\/pre>\n<h2>Verzeichnis einer Add-In-Datenbank<\/h2>\n<p>Wenn Sie ein Add-In nutzen und innerhalb des Add-Ins auf die aktuell ge&ouml;ffnete Datenbank zugreifen m&ouml;chten, gelingt dies mit den weiter oben vorgestellten Eigenschaften <b>CurrentDb.Name <\/b>beziehungsweise <b>CurrentProject.Path<\/b>, <b>CurrentProject.Name <\/b>und <b>CurrentProject.FullName<\/b>. Aber was, wenn Sie auf die Add-In-Datenbank zugreifen wollen &#8211; beispielsweise, um ihren Datenbankpfad zu ermitteln und in diesem Verzeichnis Dateien zu speichern<\/p>\n<p>Dann nutzen Sie statt der Objekte <b>CurrentDb <\/b>und <b>CurrentProject <\/b>einfach analog <b>CodeDb <\/b>und <b>CodeProject<\/b>. Wenn Sie die Add-In-Datenbank direkt unter Access &ouml;ffnen (und nicht &uuml;ber das Add-In-Men&uuml;), sind die Objekte <b>CurrentDb <\/b>und <b>CodeDb <\/b>beziehungsweise <b>CurrentProject <\/b>und <b>CodeProject <\/b>identisch.<\/p>\n<h2>Weitere Verzeichnisse per API ermitteln<\/h2>\n<p>Die API-Funktion <b>SHGetKnownFolderPath <\/b>erm&ouml;glicht es, eine ganze Reihe von Verzeichnissen zu ermitteln. Dabei &uuml;bergeben Sie dieser lediglich verschiedene Werte, die dem jeweiligen Verzeichnis entsprechen. Die API-Funktion deklarieren Sie wie folgt in einem Standardmodul:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare Function SHGetKnownFolderPath Lib \"shell32\" (rfid<span style=\"color:blue;\"> As <\/span>Any, ByVal dwFlags<span style=\"color:blue;\"> As Long<\/span>, ByVal hToken<span style=\"color:blue;\"> As Long<\/span>, ppszPath<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Wir ben&ouml;tigen aber noch weitere API-Deklarationen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare Function CLSIDFromString Lib \"ole32\" (ByVal lpszGuid<span style=\"color:blue;\"> As Long<\/span>, pGuid<span style=\"color:blue;\"> As <\/span>Any)<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare Sub CopyMemory Lib \"kernel32\" Alias \"RtlMoveMemory\" (pDest<span style=\"color:blue;\"> As <\/span>Any, pSrc<span style=\"color:blue;\"> As <\/span>Any, ByVal ByteLen<span style=\"color:blue;\"> As Long<\/span>)\r\n<span style=\"color:blue;\">Private <\/span>Declare Sub CoTaskMemFree Lib \"ole32\" (ByVal hMem<span style=\"color:blue;\"> As Long<\/span>)\r\n<span style=\"color:blue;\">Private <\/span>Declare Function lstrlenW Lib \"kernel32\" (ByVal ptr<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p>Au&szlig;erdem verwendet die nachfolgend beschriebene Funktion ein <b>Type<\/b>-Element namens <b>GUID <\/b>zum Speichern der einzelnen Elemente einer GUID:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Type GUID\r\n    Data1<span style=\"color:blue;\"> As Long<\/span>\r\n    Data2<span style=\"color:blue;\"> As Integer<\/span>\r\n    Data3<span style=\"color:blue;\"> As Integer<\/span>\r\n    Data4(7)<span style=\"color:blue;\"> As Byte<\/span>\r\nEnd Type<\/pre>\n<p>Damit wir die Kennung des gesuchten Verzeichnisses, das beispielsweise <b>{D20BEEC4-5CA8-4905-AE3B-BF251EA09B53} <\/b>lautet, nicht auf diese Weise eingeben m&uuml;ssen, sondern dies einfacher erledigen k&ouml;nnen, haben wir eine Enumeration mit je einem Element pro m&ouml;glichem Verzeichnis erstellt. Diese sieht wie in Listing 1 aus.<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>Enum FolderID\r\n     FOLDERID_NetworkFolder\r\n     FOLDERID_ComputerFolder\r\n     FOLDERID_InternetFolder\r\n     FOLDERID_ControlPanelFolder\r\n     FOLDERID_PrintersFolder\r\n     FOLDERID_SyncManagerFolder\r\n     FOLDERID_SyncSetupFolder\r\n     FOLDERID_ConflictFolder\r\n     FOLDERID_SyncResultsFolder\r\n     FOLDERID_RecycleBinFolder\r\n     FOLDERID_ConnectionsFolder\r\n     FOLDERID_Fonts\r\n     FOLDERID_Desktop\r\n     FOLDERID_Startup\r\n     FOLDERID_Programs\r\n     FOLDERID_StartMenu\r\n     FOLDERID_Recent\r\n     FOLDERID_SendTo\r\n     FOLDERID_Documents\r\n     FOLDERID_Favorites\r\n     FOLDERID_NetHood\r\n     FOLDERID_PrintHood\r\n     FOLDERID_Templates\r\n     FOLDERID_CommonStartup\r\n     FOLDERID_CommonPrograms\r\n     FOLDERID_CommonStartMenu\r\n     FOLDERID_PublicDesktop\r\n     FOLDERID_ProgramData\r\n     FOLDERID_CommonTemplates\r\n     FOLDERID_PublicDocuments\r\n     FOLDERID_RoamingAppData\r\n     FOLDERID_LocalAppData\r\n     FOLDERID_LocalAppDataLow\r\n     FOLDERID_InternetCache\r\n     FOLDERID_Cookies\r\n     FOLDERID_History\r\n     FOLDERID_System\r\n     FOLDERID_SystemX86\r\n     FOLDERID_Windows\r\n     FOLDERID_Profile\r\n     FOLDERID_Pictures\r\n     FOLDERID_ProgramFilesX86\r\n     FOLDERID_ProgramFilesCommonX86\r\n     FOLDERID_ProgramFilesX64\r\n     ...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Auflistung der Konstanten f&uuml;r die Ordner<\/span><\/b><\/p>\n<p>Leider kann man den Elementen einer solchen Enumeration (Fortsetzung in Listing 2) nur Zahlenwerte zuweisen, aber keine Zeichenketten. Deshalb ben&ouml;tigen wir eine Hilfsfunktion, welche die GUID zu der jeweiligen Konstanten liefert. Diese Funktion hei&szlig;t <b>GetFolderType <\/b>und Sie finden sie in gek&uuml;rzter Form in Listing 3. Die Funktion besitzt eine <b>Select Case<\/b>-Bedingung, die f&uuml;r jedes Element der Enumeration einen <b>Case<\/b>-Zweig bereith&auml;lt. Dieser f&uuml;llt jeweils die Variable <b>GetFolderType <\/b>und somit den R&uuml;ckgabewert der Funktion mit der entsprechenden GUID-Zeichenkette. Der Aufruf dieser Funktion sieht beispielsweise so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>GetFolderType(eFolderID<span style=\"color:blue;\"> As <\/span>FolderID)<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case eFolderID\r\n         <span style=\"color:blue;\">Case <\/span>FOLDERID_NetworkFolder\r\n             GetFolderType = \"{D20BEEC4-5CA8-4905-AE3B-BF251EA09B53}\"\r\n         <span style=\"color:blue;\">Case <\/span>FOLDERID_ComputerFolder\r\n             GetFolderType = \"{0AC0837C-BBF8-452A-850D-79D08E667CA7}\"\r\n         <span style=\"color:blue;\">Case <\/span>FOLDERID_InternetFolder\r\n             GetFolderType = \"{4D9F7874-4E0C-4904-967B-40B0D20C3E4B}\"\r\n         <span style=\"color:blue;\">Case <\/span>FOLDERID_ControlPanelFolder\r\n             GetFolderType = \"{82A74AEB-AEB4-465C-A014-D097EE346D63}\"\r\n         <span style=\"color:blue;\">Case <\/span>FOLDERID_PrintersFolder\r\n             GetFolderType = \"{76FC4E2D-D6AD-4519-A663-37BD56068185}\"\r\n         ...\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Funktion zur Ermittlung der GUID f&uuml;r eine Konstante<\/span><\/b><\/p>\n<pre>  GetFolderType(FOLDERID_CommonPrograms)\r\n{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}<\/pre>\n<p>Das Sch&ouml;ne dabei ist, dass durch die Enumeration als Eingangsparameter alle Elemente der Enumeration per IntelliSense angeboten werden (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_02\/pic_1031_001.png\" alt=\"Zugriff auf die Konstanten per IntelliSense\" width=\"424,6255\" height=\"172,1455\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Zugriff auf die Konstanten per IntelliSense<\/span><\/b><\/p>\n<p>Damit kommen wir nun zu der eigentlichen Funktion namens <b>GetSpecialFolder <\/b>(s. Listing 4). Diese nimmt ebenfalls als Parameter einen Wert des Typs der Enumeration entgegen, also k&ouml;nnen Sie auch hier bequem IntelliSense nutzen, um die Konstante f&uuml;r das gesuchte Verzeichnis zu ermitteln. Der Aufruf der Funktion lautet also beispielsweise wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>GetSpecialFolder(eFolderID<span style=\"color:blue;\"> As <\/span>FolderID)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngPointerPath<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>tGuid<span style=\"color:blue;\"> As <\/span>GUID\r\n     <span style=\"color:blue;\">Dim <\/span>strGUID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>bytTmp()<span style=\"color:blue;\"> As Byte<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngTmplen<span style=\"color:blue;\"> As Long<\/span>\r\n     strGUID = GetFolderType(eFolderID)\r\n     <span style=\"color:blue;\">If <\/span>CLSIDFromString(StrPtr(strGUID), tGuid) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span>SHGetKnownFolderPath(tGuid, 0, 0, lngPointerPath) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">If <\/span>lngPointerPath &lt;&gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n                lngTmplen = lstrlenW(lngPointerPath) * 2\r\n                <span style=\"color:blue;\">If <\/span>lngTmplen &lt;&gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n                   ReDim bytTmp(0 To (lngTmplen - 1))<span style=\"color:blue;\"> As Byte<\/span>\r\n                   CopyMemory bytTmp(0), ByVal lngPointerPath, lngTmplen\r\n                   GetSpecialFolder = bytTmp\r\n               <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Call<\/span> CoTaskMemFree(lngPointerPath)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Funktion zum Ermitteln von speziellen Verzeichnissen<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_GetSpecialFolder()\r\n     <span style=\"color:blue;\">Debug.Print<\/span> GetSpecialFolder(FOLDERID_Desktop)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Funktion ermittelt zun&auml;chst mithilfe der Funktion <b>GetFolderType <\/b>die GUID f&uuml;r die &uuml;bergebene Konstante der Enumeration <b>FolderID<\/b>. Dann verwendet sie die API-Funktion <b>CLSIDFromString<\/b>, um die Struktur <b>tGuid <\/b>mit den Informationen der GUID aus <b>strGUID <\/b>zu f&uuml;llen. Dies ist die Form, in der wir die GUID gleich der API-Funktion <b>SHGetKnownFolderPath <\/b>&uuml;bergeben.<\/p>\n<p>Diese erwartet neben der GUID f&uuml;r das gesuchte Verzeichnis auch noch einen R&uuml;ckgabeparameter des Typs <b>Long <\/b>namens <b>lngPointerPath<\/b> und f&uuml;llt diesen im Erfolgsfall mit einem Zeiger auf die Speicheradresse, die den Namen des Verzeichnisses enth&auml;lt.Ist dieser Wert ungleich <b>0<\/b>, liest die Funktion das Verzeichnis &uuml;ber ein paar Zwischenschritte von der angegebenen Speicheradresse in die R&uuml;ckgabevariable <b>GetSpecialFolder <\/b>der gleichnamigen Funktion ein.<\/p>\n<p>Listing 5 enth&auml;lt eine Prozedur, die alle speziellen Ordner ausgibt, f&uuml;r die die Enumeration Konstanten bereith&auml;lt. Dies sind laut der Webseite unter <b>https:\/\/msdn.microsoft.com\/de-de\/library\/windows\/desktop\/dd378457(v=vs.85).aspx <\/b>alle zur Drucklegung verf&uuml;gbaren Konstanten.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AlleVerzeichnisseAusgeben()\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"FOLDERID_Fonts                 \", GetSpecialFolder(FOLDERID_Fonts)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"FOLDERID_Desktop               \", GetSpecialFolder(FOLDERID_Desktop)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"FOLDERID_Startup               \", GetSpecialFolder(FOLDERID_Startup)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"FOLDERID_Programs              \", GetSpecialFolder(FOLDERID_Programs)\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Ausgeben aller speziellen Verzeichnisse<\/span><\/b><\/p>\n<p>Mit diesen Verzeichnissen lassen sich auch noch weitere spezielle Verzeichnisse abrufen &#8211; beispielsweise k&ouml;nnte es einmal interessant sein, auf das Add-Ins-Verzeichnis von Access zuzugreifen. Dieses finden Sie als Unterverzeichnis des Verzeichnisses, das Sie mit folgendem Aufruf erhalten:<\/p>\n<pre>  GetSpecialFolder(FOLDERID_RoamingAppData)\r\nC:\\Users\\&lt;Username&gt;\\AppData\\Roaming<\/pre>\n<p>Hier m&uuml;ssen Sie nun nur noch <b>\\Microsoft\\AddIns <\/b>anh&auml;ngen, um das Add-Ins-Verzeichnis zu erhalten:<\/p>\n<pre>C:\\Users\\&lt;Username&gt;\\AppData\\Roaming\\Microsoft\\AddIns<\/pre>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>In diesem Beitrag haben Sie erfahren, wie Sie einige f&uuml;r Access wichtige Verzeichnisse &uuml;ber die Access-eigenen Funktionen ermitteln und wie Sie &uuml;ber die API an weitere Verzeichnisse gelangen.<\/p>\n<p>Es gibt sicher noch weitere Verzeichnisse, die irgendwann einmal interessant sein k&ouml;nnen. Mit den hier vorgestellten M&ouml;glichkeiten sollten Sie jedoch recht weit kommen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>StandardverzeichnissePerVBA.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{A3480AF9-37C9-4FDE-8A9F-3A99188D7DF3}\/aiu_1031.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt eine ganze Reihe von Verzeichnissen, die es auf jedem Rechner gibt. Manche davon sollten eigentlich immer gleich lauten, aber durch die Installation von Windows oder Software auf Laufwerken mit anderen Laufwerkbuchstaben als C: gibt es hier gelegentlich Unterschiede. In manchen F&auml;llen sorgt auch die Betriebssystemversion f&uuml;r Unterschiede, beispielsweise bei 32bit- gegen&uuml;ber 64bit-Systemen. Und ganz sicher unterscheiden sich die Verzeichnisse, die dem jeweiligen Benutzer geh&ouml;ren. Dennoch wollen Sie fr&uuml;her oder sp&auml;ter einmal dynamisch auf ein bestimmtes Verzeichnis zugreifen wie etwa das Verzeichnis der eigenen Dateien eines Benutzers oder das Add-In-Verzeichnis von Access. Dieser Beitrag zeigt, wie Sie solche Verzeichnisse ermitteln.<\/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":[66022016,662016,44000025],"tags":[],"class_list":["post-55001031","post","type-post","status-publish","format-standard","hentry","category-66022016","category-662016","category-VBA_und_Programmiertechniken"],"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>Standardverzeichnisse per VBA ermitteln - 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\/Standardverzeichnisse_per_VBA_ermitteln\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Standardverzeichnisse per VBA ermitteln\" \/>\n<meta property=\"og:description\" content=\"Es gibt eine ganze Reihe von Verzeichnissen, die es auf jedem Rechner gibt. Manche davon sollten eigentlich immer gleich lauten, aber durch die Installation von Windows oder Software auf Laufwerken mit anderen Laufwerkbuchstaben als C: gibt es hier gelegentlich Unterschiede. In manchen F&auml;llen sorgt auch die Betriebssystemversion f&uuml;r Unterschiede, beispielsweise bei 32bit- gegen&uuml;ber 64bit-Systemen. Und ganz sicher unterscheiden sich die Verzeichnisse, die dem jeweiligen Benutzer geh&ouml;ren. Dennoch wollen Sie fr&uuml;her oder sp&auml;ter einmal dynamisch auf ein bestimmtes Verzeichnis zugreifen wie etwa das Verzeichnis der eigenen Dateien eines Benutzers oder das Add-In-Verzeichnis von Access. Dieser Beitrag zeigt, wie Sie solche Verzeichnisse ermitteln.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T19:02:12+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9\" \/>\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=\"8\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Standardverzeichnisse per VBA ermitteln\",\"datePublished\":\"2020-05-22T19:02:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/\"},\"wordCount\":1169,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bd3368116d3f45f987c1d9a074d7ccf9\",\"articleSection\":[\"2\\\/2016\",\"2016\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/\",\"name\":\"Standardverzeichnisse per VBA ermitteln - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bd3368116d3f45f987c1d9a074d7ccf9\",\"datePublished\":\"2020-05-22T19:02:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bd3368116d3f45f987c1d9a074d7ccf9\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bd3368116d3f45f987c1d9a074d7ccf9\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardverzeichnisse_per_VBA_ermitteln\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Standardverzeichnisse per VBA ermitteln\"}]},{\"@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":"Standardverzeichnisse per VBA ermitteln - 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\/Standardverzeichnisse_per_VBA_ermitteln\/","og_locale":"de_DE","og_type":"article","og_title":"Standardverzeichnisse per VBA ermitteln","og_description":"Es gibt eine ganze Reihe von Verzeichnissen, die es auf jedem Rechner gibt. Manche davon sollten eigentlich immer gleich lauten, aber durch die Installation von Windows oder Software auf Laufwerken mit anderen Laufwerkbuchstaben als C: gibt es hier gelegentlich Unterschiede. In manchen F&auml;llen sorgt auch die Betriebssystemversion f&uuml;r Unterschiede, beispielsweise bei 32bit- gegen&uuml;ber 64bit-Systemen. Und ganz sicher unterscheiden sich die Verzeichnisse, die dem jeweiligen Benutzer geh&ouml;ren. Dennoch wollen Sie fr&uuml;her oder sp&auml;ter einmal dynamisch auf ein bestimmtes Verzeichnis zugreifen wie etwa das Verzeichnis der eigenen Dateien eines Benutzers oder das Add-In-Verzeichnis von Access. Dieser Beitrag zeigt, wie Sie solche Verzeichnisse ermitteln.","og_url":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T19:02:12+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"8\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Standardverzeichnisse per VBA ermitteln","datePublished":"2020-05-22T19:02:12+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/"},"wordCount":1169,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9","articleSection":["2\/2016","2016","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/","url":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/","name":"Standardverzeichnisse per VBA ermitteln - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9","datePublished":"2020-05-22T19:02:12+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/bd3368116d3f45f987c1d9a074d7ccf9"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Standardverzeichnisse_per_VBA_ermitteln\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Standardverzeichnisse per VBA ermitteln"}]},{"@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\/55001031","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=55001031"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001031\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}