{"id":55001558,"date":"2025-10-01T00:00:00","date_gmt":"2025-08-28T16:57:00","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1558"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Individueller_Standarddatenbankordner_je_Datenbank","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/","title":{"rendered":"Individueller Standarddatenbankordner je Datenbank"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee\" width=\"1\" height=\"1\" alt=\"\"><b>Eines &auml;rgert mich bereits seit Jahrzehnten: Dass man beim Importieren von Objekten aus anderen Datenbanken &uuml;ber den Assistenten immer wieder neu zum jeweiligen Verzeichnis wechseln muss. Dort ist immer das gleiche Verzeichnis voreingestellt. Dieses kann man zwar &auml;ndern und so passend f&uuml;r einen Anwendungszweck in einer Datenbank gestalten, aber beim Importieren in die n&auml;chste Datenbank muss man das Verzeichnis wieder neu selektieren. Wie sch&ouml;n w&auml;re es, wenn dieser Ordner zumindest immer auf den Ordner eingestellt wird, in dem sich die aktuelle Datenbank befindet. Noch praktischer w&auml;re es, wenn man f&uuml;r jede Anwendung einen individuellen Ordner einstellen k&ouml;nnte, der automatisch beim &Ouml;ffnen der Anwendung bereitgestellt wird. Die gute Nachricht ist: Wir haben eine L&ouml;sung daf&uuml;r gefunden, die wir in diesem Beitrag vorstellen &#8211; damit sind die beiden genannten Varianten m&ouml;glich! Wie es geht, lesen Sie auf den folgenden Seiten.<\/b><\/p>\n<h2>Wo wirkt sich der Standarddatenbankordner aus?<\/h2>\n<p>Wenn wir Access &ouml;ffnen, ohne jemals den Standarddatenbankordner ge&auml;ndert zu haben, ist dieser auf den Dokumentenordner des jeweiligen Benutzers eingestellt. Diese Einstellung k&ouml;nnen wir im Optionen-Dialog von Access auf der Registerseite <b>Allgemein <\/b>im Bereich <b>Datenbanken erstellen <\/b>bearbeiten. Die Option hei&szlig;t <b>Standarddatenbankordner <\/b>und wir k&ouml;nnen diese sowohl durch direkte Eingabe oder auch durch Auswahl eines neuen Verzeichnisses &uuml;ber den <b>Durchsuchen&#8230;<\/b>-Button &auml;ndern (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_002.png\" alt=\"Der Standarddatenbankordner in den Access-Optionen\" width=\"700\" height=\"268,4096\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Der Standarddatenbankordner in den Access-Optionen<\/span><\/b><\/p>\n<p>Hier sehen wir bereits eine Funktion dieses Ordners: Er wird standardm&auml;&szlig;ig beim Anlegen neuer Datenbankdateien als Zielverzeichnis angegeben (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_003.png\" alt=\"Ein Einsatzzweck des Standarddatenbankordners: Das Anlegen neuer Datenbanken\" width=\"599,559\" height=\"383,5794\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Ein Einsatzzweck des Standarddatenbankordners: Das Anlegen neuer Datenbanken<\/span><\/b><\/p>\n<p>Und nat&uuml;rlich erscheint dieser Ordner, wenn wir Objekte aus einer anderen Access-Datenbank &uuml;ber den Ribbonbefehl <b>Externe Daten|Neue Datenquelle|Aus Datenbank|Access <\/b>importieren oder verkn&uuml;pfen wollen (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_004.png\" alt=\"Auch im Dialog Externe Daten - Access-Datenbank erscheint der Standarddatenbankordner.\" width=\"700\" height=\"391,1226\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Auch im Dialog Externe Daten &#8211; Access-Datenbank erscheint der Standarddatenbankordner.<\/span><\/b><\/p>\n<p>Es gibt noch andere Dialoge und Orte, an denen der Ordner <b>c:\\Users\\<Benutzername>\\Documents <\/b>erscheint, aber nur in den oben genannten wirkt es sich aus, wenn wir den Standarddatenbankordner anpassen!<\/p>\n<p>Zu guter Letzt noch eine Stelle, wo dieser Ordner verwendet wird: N&auml;mlich als Ergebnis der VBA-Funktion <b>CurDir<\/b>.<\/p>\n<h2>Manuelles &Auml;ndern des Standarddatenbankordners<\/h2>\n<p>Wir k&ouml;nnen diesen Ordner auf verschiedene Arten &auml;ndern:<\/p>\n<ul>\n<li>Die erste M&ouml;glichkeit ist der bereits oben erw&auml;hnte Optionen-Dialog von Access. Diese &Auml;nderung ist dauerhaft und wirkt sich erst nach dem Schlie&szlig;en und erneutem &Ouml;ffnen von Access aus.<\/li>\n<li>Die zweite M&ouml;glichkeit ist die VBA-Prozedur <b>ChDir<\/b>. Diese wirkt sich jedoch nur auf die Funktion <b>CurDir <\/b>aus und wird beim n&auml;chsten Start von Access wieder zur&uuml;ckgesetzt.<\/li>\n<li>Die dritte M&ouml;glichkeit ist eine weitere VBA-Methode namens <b>SetOption<\/b>, die wir gleich vorstellen.<\/li>\n<\/ul>\n<h2>Standarddatenbankordner per SetOption einstellen<\/h2>\n<p>Die oben genannte dritte Variante ist die Verwendung der Anweisung <b>SetOption<\/b>. Damit k&ouml;nnen wir den Standarddatenbankordner wie folgt einstellen:<\/p>\n<pre>SetOption \"Default Database Directory\", \"c:\\\"<\/pre>\n<p>Zum Auslesen des aktuell eingestellten Standarddatenbankordners verwenden wir <b>GetOption<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> GetOption(\"Default Database Directory\")<\/pre>\n<p>Allerdings wirkt sich auch diese Einstellung nicht unmittelbar auf den Importdialog f&uuml;r Access-Objekte aus, sondern erst nach dem Schlie&szlig;en und erneutem Start von Access.<\/p>\n<p>Also hilft uns dieser Befehl an dieser Stelle auch nicht weiter &#8211; auch wenn das die optimale L&ouml;sung gewesen w&auml;re. Wir h&auml;tten dann einfach den Befehl zum &Ouml;ffnen des Importdialogs f&uuml;r Access-Objekte im Ribbon so erweitern k&ouml;nnen, das zus&auml;tzlich noch die Zuweisung des gew&uuml;nschten Pfades erfolgt. So m&uuml;ssen wir uns einen anderen Weg &uuml;berlegen, wie wir sicherstellen k&ouml;nnen, dass unser gew&uuml;nschtes Verzeichnis je nach Anwendung angezeigt wird. Die Ziele sehen dabei wie folgt aus:<\/p>\n<ul>\n<li>Wenn kein explizites Verzeichnis f&uuml;r die Datenbank festgelegt ist, soll das Verzeichnis der aktuellen Datenbank als Standarddatenbankordner verwendet werden.<\/li>\n<li>Wir wollen aber auch individuell je Datenbank ein eigenes Verzeichnis festlegen k&ouml;nnen, das jeweils eingestellt wird, wenn wir diese Datenbank &ouml;ffnen.<\/li>\n<\/ul>\n<p>Wenn wir zum Beispiel immer wieder Tabellen aus Datenbanken des gleichen Verzeichnisses importieren, k&ouml;nnen wir dieses Verzeichnis einmalig einstellen.<\/p>\n<p>Aber dann wird dieses Verzeichnis auch f&uuml;r jede andere Datenbank eingestellt. Sollten wir also eine zweite Datenbank verwenden, wo wir auch Tabellen aus einer anderen Datenbank importieren wollen, m&uuml;ssen wir sp&auml;testens hier wieder umstellen beziehungsweise immer wieder neu zum gew&uuml;nschten Ordner navigieren.<\/p>\n<h2>Wo wird der Standarddatenbankordner gespeichert?<\/h2>\n<p>Wenn wir die Einstellung <b>Standarddatenbankordner<\/b> &uuml;ber die Access-Optionen &auml;ndern, wird diese &Auml;nderung in der Registry gespeichert. Den genauen Ort zeigt Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_001.png\" alt=\"Der Standarddatenbankordner wird in der Registry gespeichert.\" width=\"700\" height=\"323,9808\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Der Standarddatenbankordner wird in der Registry gespeichert.<\/span><\/b><\/p>\n<h2>Standardverzeichnis f&uuml;r andere Dialoge<\/h2>\n<p>Die anderen Dialoge, zum Beispiel zum Einlesen von Textdateien oder Excel-Dateien, ber&uuml;cksichtigen die Einstellung des Standarddatenbankordner &uuml;brigens gar nicht. Hier sehen wir auch aktuell keine M&ouml;glichkeit, in irgendeiner Weise Einfluss zu nehmen.<\/p>\n<h2>Anpassen des Datenbankordners bei Start der Anwendung<\/h2>\n<p>Aber wie wollen wir daf&uuml;r sorgen, dass entweder das aktuelle Datenbankverzeichnis (mit <b>CurrentProject.Path<\/b>) oder ein speziell f&uuml;r die Datenbank festgelegtes Verzeichnis bereits eingestellt ist, wenn wir die entsprechende Datenbank &ouml;ffnen? Das erledigen wir mit einem COM-Add-In namens <b>amvStartupfolderr<\/b>.<\/p>\n<h2>Installation des COM-Add-Ins<\/h2>\n<p>Sie finden im Download die entsprechende DLL namens <b>amvStartupfolder_32.dll<\/b> beziehungsweise <b>amvStartupfolder_64.dll<\/b>. Diese installieren Sie, indem Sie die folgenden Schritte durchf&uuml;hren:<\/p>\n<ul>\n<li>Kopieren Sie die DLL in ein geeignetes Verzeichnis, beispielsweise in das Add-In-Verzeichnis. Wie Sie dieses am einfachsten ermitteln, erfahren Sie in diesem Beitrag: <b>Add-In-Verzeichnis mit Wizhook ermitteln <\/b>(<b>www.access-im-unternehmen.de\/1553<\/b>)<\/li>\n<li>Dann klicken Sie auf <b>Datei|Optionen<\/b>, um die Access-Optionen zu &ouml;ffnen.<\/li>\n<li>Wechseln Sie hier zum Bereich <b>Add-Ins<\/b> und klicken dann auf die Schaltfl&auml;che <b>Los&#8230; <\/b>neben dem Kombinationsfeld <b>Verwalten<\/b>.<\/li>\n<li>Im nun erscheinenden Dialog <b>COM-Add-Ins <\/b>klicken Sie auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen&#8230;<\/b> und w&auml;hlen die Datei <b>amvStartupFolder_win32.dll <\/b>oder <b>amvStartupFolder_win64.dll <\/b>(je nach Bitness der Office-Version) aus dem Add-In-Verzeichnis aus (siehe Bild 5).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_005.png\" alt=\"Hinzuf&uuml;gen eines COM-Add-Ins\" width=\"599,559\" height=\"250,4609\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinzuf&uuml;gen eines COM-Add-Ins<\/span><\/b><\/p>\n<li>Danach wird das neue COM-Add-In in der Liste angezeigt (siehe Bild 6).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_006.png\" alt=\"Das neue COM-Add-In im COM-Add-Ins-Dialog\" width=\"599,559\" height=\"250,4609\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Das neue COM-Add-In im COM-Add-Ins-Dialog<\/span><\/b><\/p>\n<\/ul>\n<p>Damit ist das COM-Add-In installiert und einsatzbereit.<\/p>\n<h2>Einsatz von amvStartupfolder<\/h2>\n<p>Das COM-Add-In scheint erst einmal unsichtbar zu sein. Wie k&ouml;nnen es aber schon testen, indem wir einmal eine neue Access-Anwendung &ouml;ffnen.<\/p>\n<p><b>Wichtig: <\/b>Diese Access-Anwendung muss per Doppelklick auf den Namen der <b>.accdb<\/b>-Datei ge&ouml;ffnet werden! Wenn Sie erst Access starten und dann die Datenbank laden, funktioniert das COM-Add-In nicht. Woran das liegt, erl&auml;utern wir sp&auml;ter. Das COM-Add-In ist nun noch nicht aktiviert, denn es wird erst beim n&auml;chsten Start von Access geladen.<\/p>\n<p>Wenn wir dann zu den Access-Optionen wechseln, sehen wir in der Eigenschaft <b>Standarddatenbankordner <\/b>bereits genau das Verzeichnis, in dem sich die aktuelle Datenbank befindet.<\/p>\n<p>Und auch wenn wir den Import-Assistent f&uuml;r Access starten, zeigt dieser direkt dieses Verzeichnis an.<\/p>\n<p>Damit funktioniert bereits die erste Anforderung, dass das aktuelle Datenbankverzeichnis als <b>Standarddatenbankordner <\/b>verwendet wird.<\/p>\n<h2>Standarddatenbankordner individuell einstellen<\/h2>\n<p>Damit kommen wir zur zweiten Anforderung. Wir hatten formuliert, dass wir zu jeder Datenbankdatei einen individuellen Standarddatenbankordner definieren k&ouml;nnen wollen. Aber wo tun wir das? Dazu &ouml;ffnen wir den Ribbon-Reiter <b>Datei <\/b>und klicken auf den nun sichtbaren Eintrag <b>amvStartverzeichnis<\/b>.<\/p>\n<p>Danach erscheint der entsprechende Bereich, in dem wir mit dem Button <b>Ausw&auml;hlen <\/b>einen Dialog zum Ausw&auml;hlen des gew&uuml;nschten Verzeichnisses finden (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_007.png\" alt=\"Einstellen des gew&uuml;nschten Standarddatenbankordners\" width=\"700\" height=\"390,8759\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Einstellen des gew&uuml;nschten Standarddatenbankordners<\/span><\/b><\/p>\n<p>Hier finden wir auch gleich den Hinweis, dass bei leerem Feld der aktuelle Ordner der Datenbank als Standarddatenbankordner verwendet wird.<\/p>\n<p>Nachdem wir das Verzeichnis angegeben haben, k&ouml;nnen wir Access mit dieser Datenbank neu starten. Und siehe da: Wir finden in den Access-Optionen nun den neuen Ordner vor und k&ouml;nnen diesen auch direkt im Import-Assistenten f&uuml;r Access nutzen.<\/p>\n<p>Das beweist aber noch lange nichts. Wir m&uuml;ssen zun&auml;chst noch eine zweite Datenbank mit einem individuellen Standarddatenbankordner versehen. Wenn wir diese &ouml;ffnen, finden wir wieder eine leere Eigenschaft <b>Startverzeichnis <\/b>im Bereich <b>amvStartverzeichnis <\/b>vor. Das zeigt schon einmal, dass noch kein individueller Standarddatenbankordner festgelegt wurde. F&uuml;gen wir also einen passenden Ordner hinzu, der sich von dem der vorherigen Datenbank unterscheidet.<\/p>\n<p>&Ouml;ffnen wir nun nacheinander diese beiden Datenbanken, finden wir jeweils den daf&uuml;r festgelegten Standarddatenbankordner vor &#8211; ohne selbst etwas dazu beigetragen zu haben.<\/p>\n<h2>Beschreibung des COM-Add-Ins amvStartupfolder<\/h2>\n<p>Damit kommen wir zum eigentlichen Know-how dieses Beitrags: Die Funktionsweise des COM-Add-Ins. Dieses haben wir, wie immer, mit twinBASIC erstellt. Den Download der aktuellen Version finden Sie hier:<\/p>\n<pre>https:\/\/github.com\/twinbasic\/twinbasic\/releases<\/pre>\n<p>Das Projekt haben wir dem Download zu diesem Artikel unter dem Namen <b>amvStartverzeichnis.twinproj<\/b> beigelegt. Dieses k&ouml;nnen Sie nach dem Start von twinBASIC &ouml;ffnen.<\/p>\n<p>Das Hauptmodul enth&auml;lt wie &uuml;blich die Implementierung der Schnittstellen <b>IDTExtensibility2<\/b> und <b>IRibbonExtensibility<\/b>, die wir in der Klasse deklarieren. Au&szlig;erdem deklarieren wir hier noch eine Variable f&uuml;r die Ribbon-Anpassung:<\/p>\n<pre>[ClassId(\"DC8E7154-FAC8-43B7-88E5-A93527539223\")]\r\n<span style=\"color:blue;\">Class<\/span> amvStartupfolder\r\n     Implements IDTExtensibility2\r\n     [WithDispatchForwarding]\r\n     Implements IRibbonExtensibility\r\n     <span style=\"color:blue;\">Private <\/span>objRibbon<span style=\"color:blue;\"> As <\/span>IRibbonUI\r\n     ... weitere Elemente ...\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>An der Stelle <b>&#8230; weitere Elemente &#8230; <\/b>stehen die nachfolgend beschriebenen Elemente.<\/p>\n<h2>Implementierung der Schnittstelle IDTExtensibility2<\/h2>\n<p>Als Erstes implementieren wir die Schnittstelle <b>IDTExtensibility2 <\/b>wie in Listing 1. Diese enth&auml;lt verschiedene Ereignisprozeduren, die von Access zu den entsprechenden Zeitpunkten ausgef&uuml;hrt werden. Interessant f&uuml;r uns ist zun&auml;chst das Ereignis <b>OnConnection<\/b>. Hier nehmen wir mit dem Parameter <b>Application <\/b>einen Verweis auf die aufrufende Instanz entgegen, also die Access-Anwendung.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>OnConnection(ByVal Application<span style=\"color:blue;\"> As Object<\/span>, ByVal ConnectMode<span style=\"color:blue;\"> As <\/span>ext_ConnectMode, ByVal AddInInst<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnConnection\r\n     <span style=\"color:blue;\">Set<\/span> objAccess = Application\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Sub <\/span>OnDisconnection(ByVal RemoveMode<span style=\"color:blue;\"> As <\/span>ext_DisconnectMode, ByRef custom<span style=\"color:blue;\"> As Variant<\/span>())    _\r\n         Implements IDTExtensibility2.OnDisconnection\r\n     <span style=\"color:blue;\">Set<\/span> objAccess = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Sub <\/span>OnAddInsUpdate(ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnAddInsUpdate\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Sub <\/span>OnStartupComplete(ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnStartupComplete\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strPathACCDB<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strFolderACCDB<span style=\"color:blue;\"> As String<\/span>\r\n     strPathACCDB = objAccess.CurrentDb.Name\r\n     strFolderACCDB = objAccess.CurrentProject.Path\r\n     strStartupfolder = GetAppSetting(strPathACCDB)\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strStartupfolder) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         objAccess.SetOption \"Default Database Directory\", strStartupfolder\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         objAccess.SetOption \"Default Database Directory\", strFolderACCDB\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Sub <\/span>OnBeginShutdown(ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnBeginShutdown\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Implementierung der Schnittstelle IDTExtensibility<\/span><\/b><\/p>\n<p>Diesen Verweis speichern wir in der Variablen <b>objAccess<\/b>, die wir im Modul <b>mdlGlobal <\/b>hinterlegt haben &#8211; neben einer weiteren namens <b>strStartupfolder<\/b>:<\/p>\n<pre>Module mdlGlobal\r\n     <span style=\"color:blue;\">Public <\/span>objAccess<span style=\"color:blue;\"> As <\/span>Access.Application\r\n     <span style=\"color:blue;\">Public <\/span>strStartupfolder<span style=\"color:blue;\"> As String<\/span>\r\n         \r\nEnd Module<\/pre>\n<p>Den Verweis auf die Access-Anwendung m&uuml;ssen wir speichern, wenn wir im weiteren Verlauf auf diese Instanz und ihre Eigenschaften zugreifen wollen.<\/p>\n<p>Im Ereignis <b>OnDisconnection <\/b>leeren wir die Objektvariable <b>objAccess <\/b>wieder, damit Access nicht im Speicher h&auml;ngenbleibt, wenn wir es &uuml;ber die Benutzeroberfl&auml;che schlie&szlig;en.<\/p>\n<h2>Die Magie dieser L&ouml;sung<\/h2>\n<p>Die wichtigste Rolle &uuml;bernimmt das Ereignis <b>OnStartupComplete<\/b>. Dies ist der Zeitpunkt, zu dem die Access-Datenbank bereits geladen ist, aber der Standarddatenbankpfad noch gesetzt werden kann.<\/p>\n<p>Das nutzen wir aus, indem wir genau das tun. Wir speichern den Pfad zur aktuellen Datenbankdatei, den wir mit <b>objAccess.CurrentDb.Name <\/b>ermitteln, in der Variablen <b>strPathACCDB<\/b>. Au&szlig;erdem schreiben wir das Verzeichnis, in dem sich diese Datenbankdatei befindet, in die Variable <b>strFolderACCDB<\/b>.<\/p>\n<p>Nun wollen wir herausfinden, ob zu genau diesem Datenbankpfad bereits ein Standarddatenbankordner in der Registry hinterlegt ist (dies geschieht in dem oben beschriebenen Bereich des Backstage und wie das geht, zeigen wir weiter unten).<\/p>\n<p>Mit <b>GetAppSetting <\/b>holen wir uns den Wert in der Registry f&uuml;r diesen Datenbankpfad. Dazu ein Einblick, wie es nach dem Hinterlegen von Standarddatenbankordnern in der Registry aussieht: Diesen finden Sie in Bild 8. Hier sehen wir unter <b>Name<\/b> jeweils den Pfad der Datenbankdatei, f&uuml;r die wir einen Standarddatenbankordner festgelegt haben und unter Daten den jeweiligen Standarddatenbankpfad.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_05\/pic_1558_008.png\" alt=\"Eintr&auml;ge f&uuml;r Standarddatenbankordner in der Registry\" width=\"700\" height=\"232,1489\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Eintr&auml;ge f&uuml;r Standarddatenbankordner in der Registry<\/span><\/b><\/p>\n<p>Diese Eintr&auml;ge befinden sich in dem Bereich der Registry, den wir mit den Funktionen <b>SaveSetting <\/b>und <b>GetSetting <\/b>erreichen k&ouml;nnen. Dazu gibt es im Modul <b>mdlRegistry <\/b>zwei Wrapperfunktionen, welche die ersten beiden Parameter dieser Funktionen mit Konstanten f&uuml;r diese Werte f&uuml;llen.<\/p>\n<p>Wie das im Detail funktioniert, haben wir bereits im Beitrag <b>Optionen einfach in der Registry speichern <\/b>(<b>www.access-im-unternehmen.de\/1512<\/b>) beschrieben.<\/p>\n<p>K&ouml;nnen wir mit <b>GetAppSetting <\/b>einen Wert einlesen, stellen wir diesen mit der <b>SetOption<\/b>-Methode ein. Wichtig ist, dass wir die <b>SetOption<\/b>-Methode im Kontext des Objekts <b>objAccess <\/b>aufrufen.<\/p>\n<p>Falls in der Registry noch kein Standarddatenbankordner f&uuml;r diese Datenbankdatei vorliegt, stellen wir diesen mit <b>SetOption <\/b>auf den Ordner ein, in dem sich die aktuelle Datenbankdatei befindet.<\/p>\n<p>Hier liegt auch der Grund, warum das COM-Add-In nur zuverl&auml;ssig funktioniert, wenn wir die <b>.accdb<\/b>-Datei per Doppelklick &ouml;ffnen (oder &uuml;ber Rechtsklick auf Access in der Taskleiste und Auswahl einer der zuletzt verwendeten Datenbanken): Wenn wir Access ohne Vorauswahl einer Datenbank &ouml;ffnen, kann in der Ereignisprozedur OnStartUpComplete nicht der Name der Datenbank und auch nicht ein eventueller Standarddatenbankordner aus der Registry ermittelt werden.<\/p>\n<p>Die operative Arbeit ist somit erledigt, nun folgt noch der Teil, mit dem wir den Standarddatenbankordner f&uuml;r eine Accessdatenbank festlegen k&ouml;nnen.<\/p>\n<h2>Implementierung der Schnittstelle IRibbonExtensibility<\/h2>\n<p>Dazu implementieren wir die Schnittstelle <b>IRibbonExtensibility<\/b>. Diese stellt die Funktion <b>GetCustomUI <\/b>zur Verf&uuml;gung, mit der wir vom COM-Add-In aus eine Ribbondefinition zusammenstellen und an Access zur&uuml;ckgeben k&ouml;nnen.<\/p>\n<p>Diese Funktion finden Sie in Listing 2. Sie stellt in der Variablen <b>strXML <\/b>die ben&ouml;tigte Ribbondefinition zusammen und &uuml;bergibt diese an Access.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>GetCustomUI(ByVal RibbonID<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span> Implements IRibbonExtensibility.GetCustomUI\r\n     <span style=\"color:blue;\">Dim <\/span>strXML<span style=\"color:blue;\"> As String<\/span>\r\n     strXML &= \"&lt;customUI xmlns=\"\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"\" onLoad=\"\"onLoad\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXML &= \"  &lt;backstage&gt;\"\r\n     strXML &= \"    &lt;tab id=\"\"tabStartupfolder\"\" label=\"\"amvStartverzeichnis\"\" columnWidthPercent=\"\"50\"\" \" _\r\n         & \"firstColumnMinWidth=\"\"400\"\" title=\"\"Optionen amvStartverzeichnis\"\"&gt;\"\r\n     strXML &= \"      &lt;firstColumn&gt;\"\r\n     strXML &= \"        &lt;group id=\"\"grpStartupfolder\"\" label=\"\"W&auml;hle hier das Verzeichnis aus, das beim Start \" _\r\n         & \"dieser Datenbank gesetzt wird und f&uuml;r Import\/Export et cetera verwendet werden soll.\"\"&gt;\"\r\n     strXML &= \"          &lt;topItems&gt;\"\r\n     strXML &= \"              &lt;labelControl id=\"\"lblStartupfolder\"\" label=\"\"Damit das gew&auml;hlte Verzeichnis verwendet \" _\r\n         & \"wird, muss die Datenbank komplett geschlossen und wieder ge&ouml;ffnet werden.&#13;&#10;&#13;&#10;\" _\r\n         & \"Startverzeichnis:\"\" noWrap=\"\"true\"\"\/&gt;\"\r\n     strXML &= \"              &lt;layoutContainer id=\"\"layBaseFolder\"\" layoutChildren=\"\"horizontal\"\" expand=\"\"neither\"\"&gt;\"\r\n     strXML &= \"                &lt;editBox id=\"\"txtStartupfolder\"\" getText=\"\"getText\"\" sizeString=\"\"yyyyyyyyyyyyyyyyyyy\"_\r\n         & \"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\"\" onChange=\"\"onChange\"\"\/&gt;\"\r\n     strXML &= \"                &lt;button id=\"\"btnStartupfolder\"\" label=\"\"Ausw&auml;hlen\"\" onAction=\"\"onAction\"\"\/&gt;\"\r\n     strXML &= \"              &lt;\/layoutContainer&gt;\"\r\n     strXML &= \"              &lt;labelControl id=\"\"lblStartupfolderRemark\"\" label=\"\"&#13;&#10;Wenn kein Verzeichnis \" _\r\n         & \"gesetzt ist, wird das Verzeichnis der aktuellen Datenbank als Standarddatenbankordner verwendet\" _\r\n         & \":&#13;&#10;&#13;&#10;Startverzeichnis: \" & objAccess.CurrentProject.Path & \"\"\" noWrap=\"\"true\"\"\/&gt;\"\r\n     strXML &= \"          &lt;\/topItems&gt;\"\r\n     strXML &= \"        &lt;\/group&gt;\"\r\n     strXML &= \"      &lt;\/firstColumn&gt;\"\r\n     strXML &= \"    &lt;\/tab&gt;\"\r\n     strXML &= \"  &lt;\/backstage&gt;\"\r\n     \r\n     strXML &= \"&lt;\/customUI&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     Return strXML\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Implementierung der Schnittstelle IRibbonExtensibility<\/span><\/b><\/p>\n<p>Der besseren Lesbarkeit halber haben wir die zusammengestellte Ribbondefinition nochmal in Listing 3 abgebildet. Hier sehen wir die verschiedenen Elemente wie <b>customUI <\/b>und <b>backstage<\/b>, in denen wir ein neues <b>tab<\/b>-Element hinzuf&uuml;gen. Dieses enth&auml;lt die Beschriftung f&uuml;r den Registerreiter und die &Uuml;berschrift f&uuml;r den Bereich. Das <b>customUI<\/b>-Element enth&auml;lt eine Funktion namens <b>onLoad<\/b>, f&uuml;r die wir die folgende Routine hinterlegen:<\/p>\n<pre>&lt;customUI xmlns=\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\" onLoad=\"onLoad\"&gt;\r\n   &lt;backstage&gt;\r\n     &lt;tab id=\"tabStartupfolder\" label=\"amvStartverzeichnis\" columnWidthPercent=\"50\" firstColumnMinWidth=\"400\" \r\n         title=\"Optionen amvStartverzeichnis\"&gt;\r\n       &lt;firstColumn&gt;\r\n         &lt;group id=\"grpStartupfolder\" label=\"W&auml;hle hier das Verzeichnis aus, das beim Start dieser Datenbank gesetzt\r\n             wird und f&uuml;r Import\/Export et cetera verwendet werden soll.\"&gt;\r\n           &lt;topItems&gt;\r\n             &lt;labelControl id=\"lblStartupfolder\" label=\"Damit das gew&auml;hlte Verzeichnis verwendet wird, muss die \r\n               Datenbank komplett geschlossen und wieder ge&ouml;ffnet werden.&#13;&#10;&#13;&#10;Startverzeichnis:\" \r\n               noWrap=\"true\"\/&gt;\r\n             &lt;layoutContainer id=\"layBaseFolder\" layoutChildren=\"horizontal\" expand=\"neither\"&gt;\r\n               &lt;editBox id=\"txtStartupfolder\" getText=\"getText\" sizeString=\"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\r\n                 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\" onChange=\"onChange\"\/&gt;\r\n               &lt;button id=\"btnStartupfolder\" label=\"Ausw&auml;hlen\" onAction=\"onAction\"\/&gt;\r\n             &lt;\/layoutContainer&gt;\r\n             &lt;labelControl id=\"lblStartupfolderRemark\" getLabel=\"GetLabel\" noWrap=\"true\"\/&gt;\r\n           &lt;\/topItems&gt;\r\n         &lt;\/group&gt;\r\n       &lt;\/firstColumn&gt;\r\n     &lt;\/tab&gt;\r\n   &lt;\/backstage&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die zusammengestellte Ribbon-Definition<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Function <\/span>OnLoad(ribbon<span style=\"color:blue;\"> As <\/span>IRibbonUI)\r\n     <span style=\"color:blue;\">Set<\/span> objRibbon = ribbon\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Diese f&uuml;llt die Variable <b>objRibbon <\/b>mit einem Verweis auf die Ribbon-Definition. Hier die Deklaration dieser Variablen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>objRibbon<span style=\"color:blue;\"> As <\/span>IRibbonUI<\/pre>\n<p>Diese Variable bietet die <b>Invalidate<\/b>-Methode an, mit der wir die Eigenschaften der Textbox mit den entsprechenden <b>get&#8230;<\/b>-Funktionen neu laden k&ouml;nnen, falls der Benutzer &uuml;ber die Schaltfl&auml;che ein neues Verzeichnis l&auml;dt.<\/p>\n<p>Unterhalb des <b>tab<\/b>-Elements folgen ein <b>firstColumn<\/b>&#8211; und ein <b>group<\/b>-Element. Diese strukturieren die Ausgabe im Bereich selbst. Das <b>group<\/b>-Element enth&auml;lt den oberen Text. Darunter folgen unter <b>topItems <\/b>weitere Steuerelemente.<\/p>\n<p>Das Wichtigste ist die <b>editBox <\/b>zum Anzeigen und Eingeben des Standarddatenbankordners. Sie enth&auml;lt mit dem Attribut <b>getText <\/b>den Namen der Funktion <b>GetText<\/b>, die beim Anzeigen der <b>editBox <\/b>ausgef&uuml;hrt wird, um einen Text einzutragen.<\/p>\n<p>Diese erh&auml;lt beim Aufruf einen Verweis auf das aufrufende Steuerelement als Parameter. Diesen gleichen wir mit dem Namen <b>txtStartupfolder <\/b>ab. In diesem Fall geben wir einfach den aktuellen Wert der Variablen <b>strStartupfolder <\/b>zur&uuml;ck. Wurde diese bereits beim Initialisieren des COM-Add-Ins gef&uuml;llt, enth&auml;lt die <b>editBox <\/b>nun diesen Pfad &#8211; falls nicht, soll sie leer sein.<\/p>\n<p>Die <b>editBox <\/b>durch &Uuml;bergeben einer leeren Zeichenkette zu leeren, ist allerdings nicht m&ouml;glich &#8211; daher &uuml;bergeben wir die Zeichenkette <b>vbNullString &#038; Chr(0)<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Function <\/span>GetText(control<span style=\"color:blue;\"> As <\/span>IRibbonControl)<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case control.Id\r\n         <span style=\"color:blue;\">Case <\/span>\"txtStartupfolder\"\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strStartupfolder) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 strStartupfolder = vbNullString & Chr(0)\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             Return strStartupfolder\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Au&szlig;erdem hinterlegen wir f&uuml;r das Attribut <b>onAction <\/b>die Prozedur <b>OnAction<\/b>. Diese pr&uuml;ft ebenfalls das aufrufende Steuerelement und anschlie&szlig;end, ob <b>strStartupfolder <\/b>noch leer ist (siehe Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OnAction(control<span style=\"color:blue;\"> As <\/span>IRibbonControl)\r\n     <span style=\"color:blue;\">Dim <\/span>strTemp<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strInitialFolder<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case control.Id\r\n         <span style=\"color:blue;\">Case <\/span>\"btnStartupfolder\"\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strStartupfolder) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 strInitialFolder = objAccess.CurrentProject.Path\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 strInitialFolder = strStartupfolder\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Right<\/span>(strInitialFolder, 1) = \"\\\"<span style=\"color:blue;\"> Then<\/span>\r\n                 strInitialFolder = strInitialFolder & \"\\\"\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             strStartupfolder = ChooseFolder(strInitialFolder)\r\n             SaveAppSetting(objAccess.CurrentDb.Name, strStartupfolder)\r\n             objRibbon.Invalidate\r\n             <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Die Prozedur OnAction<\/span><\/b><\/p>\n<p>In diesem Fall wird die Variable <b>strInitialFolder <\/b>auf den Pfad der aktuell ge&ouml;ffneten Datenbankdatei eingestellt, gefolgt von einem abschlie&szlig;enden Backslash. Anderenfalls erh&auml;lt die Variable den Wert aus <b>strStartupfolder<\/b>. <\/p>\n<p>Wenn die Variable <b>strInitialFolder<\/b> kein abschlie&szlig;endes Backslash-Zeichen enth&auml;lt, f&uuml;gen wir dieses noch hinzu, sonst ist die Anzeige im folgenden Ordnerauswahldialog nicht korrekt.<\/p>\n<p>Mit dem aktuellen Wert von <b>strInitialFolder <\/b>rufen wir dann die Funktion <b>ChooseFolder <\/b>auf. Diese zeigt einen Ordnerauswahldialog an.<\/p>\n<p>Das Ergebnis von <b>ChooseFolder<\/b> wird dann in die Variable <b>strStartupfolder <\/b>geschrieben. Von dort landet es mithilfe der Prozedur <b>SaveAppSetting <\/b>nun direkt in der Registry, damit diese Einstellung beim n&auml;chsten &Ouml;ffnen der Datenbankdatei direkt verwendet werden kann.<\/p>\n<p>F&uuml;r das <b>labelControl<\/b>-Element holen wir den Text schlie&szlig;lich wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Function <\/span>GetLabel(control<span style=\"color:blue;\"> As <\/span>IRibbonControl)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strRemark<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case control.Id\r\n         <span style=\"color:blue;\">Case <\/span>\"lblStartupfolderRemark\"\r\n             strRemark = <span style=\"color:blue;\">vbCrLf<\/span> & \"Wenn kein Verzeichnis  gesetzt ist, wird das Verzeichnis der aktuellen  Datenbank als Standarddatenbankordner verwendet:\"  & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & \"Startverzeichnis: \"  & objAccess.CurrentProject.Path\r\n             Return strRemark\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Au&szlig;erdem aktualisieren wir das Ribbon mit der <b>Invalidate<\/b>-Methode von <b>objRibbon<\/b>.<\/p>\n<h2>Ausw&auml;hlen des Standarddatenbankordners per Dateidialog<\/h2>\n<p>Die Funktion <b>ChooseFolder<\/b> finden wir in Listing 5. Sie nimmt den initial anzuzeigenden Ordner mit dem Parameter <b>strInitialFolder <\/b>entgegen. Dann &ouml;ffnet sie einen Dialog zur Auswahl eines Ordners, mit dem der Benutzer den gew&uuml;nschten Ordner ausw&auml;hlen kann. Dieser wird als Funktionsergebnis an die aufrufende Funktion zur&uuml;ckgegeben. Schlie&szlig;lich speichern wir den neu ermittelten Ordner noch mit der Funktion <b>SaveSettings <\/b>in der Registry, damit dieser beim n&auml;chsten &Ouml;ffnen dieser Datenbank direkt verwendet werden kann. Au&szlig;erdem rufen wir noch die <b>Invalidate<\/b>-Methode des Objekts <b>objRibbon <\/b>auf, damit das neu ausgew&auml;hlte Verzeichnis direkt im <b>editBox<\/b>-Steuerelement angezeigt wird.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>ChooseFolder(strInitialFolder<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objFileDialog<span style=\"color:blue;\"> As <\/span>Office.FileDialog\r\n     <span style=\"color:blue;\">Dim <\/span>strTemp<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>varFilename<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFileDialog = objAccess.FileDialog(msoFileDialogFolderPicker)\r\n     <span style=\"color:blue;\">With<\/span> objFileDialog\r\n         .Title = \"Startverzeichnis ausw&auml;hlen\"\r\n         .ButtonName = \"Ausw&auml;hlen\"\r\n         .AllowMultiSelect = <span style=\"color:blue;\">True<\/span>\r\n         .InitialFileName = strInitialFolder\r\n         <span style=\"color:blue;\">If <\/span>.Show = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             For Each varFilename In .SelectedItems\r\n                 strTemp = strTemp & \"|\" & varFilename\r\n             <span style=\"color:blue;\">Next<\/span> varFilename\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(strTemp) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 strTemp = <span style=\"color:blue;\">Mid<\/span>(strTemp, 2)\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     ChooseFolder = strTemp\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Die Funktion ChooseFolder<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>In diesem Beitrag stellen wir eine L&ouml;sung vor, mit der man daf&uuml;r sorgen kann, dass immer beim Starten der Datenbank eines der folgenden beiden Verzeichnisse als Standarddatenbankordner voreingestellt ist:<\/p>\n<ul>\n<li>Ohne weiteres Zutun wird das Verzeichnis, in dem sich die Datenbankdatei befindet, eingestellt. Das ist bereits ein guter Start, denn oft befinden sich Datenbankdateien, aus denen man Objekte importieren m&ouml;chte, im gleichen Verzeichnis oder zumindest irgendwo in der N&auml;he in der Verzeichnisstruktur.<\/li>\n<li>Oder wir w&auml;hlen explizit ein Verzeichnis aus, das beim Laden der Datenbank als Standarddatenbankordner verwendet werden soll. Das ist zum Beispiel hilfreich, wenn wir regelm&auml;&szlig;ig Objekte wie etwa Tabellen aus Datenbanken in einem bestimmten Verzeichnis importieren wollen.<\/li>\n<\/ul>\n<p>Die L&ouml;sung bietet eine Erweiterung des Backstage-Bereichs an, indem wir die einzige Einstellung des COM-Add-Ins, n&auml;mlich den zu verwendenden Standarddatenbankordner, anpassen k&ouml;nnen.<\/p>\n<p>Zu beachten ist, dass diese L&ouml;sung nur funktioniert, wenn wir die Datenbankdatei direkt &ouml;ffnen. Es funktioniert nicht, wenn wir zuerst nur die Access-Anwendung starten und dann von dort aus die Datenbankdatei &ouml;ffnen.<\/p>\n<p>Wir m&uuml;ssen die Datenbankdatei also beispielsweise wie folgt &ouml;ffnen:<\/p>\n<ul>\n<li>per Doppelklick auf den Dateinamen im Windows Explorer oder auf dem Desktop<\/li>\n<li>durch Rechtsklick auf Access in der Taskleiste und Auswahl einer der zuletzt verwendeten Datenbankdateien<\/li>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>amvStartupFolder_win32.dll<\/p>\n<p>amvStartupFolder_win64.dll<\/p>\n<p>amvStartverzeichnis.twinproj<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/D9FE68C1-DAB9-45D9-AFA0-0842DAEDE013\/aiu_1558.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eines &auml;rgert mich bereits seit Jahrzehnten: Dass man beim Importieren von Objekten aus anderen Datenbanken &uuml;ber den Assistenten immer wieder neu zum jeweiligen Verzeichnis wechseln muss. Dort ist immer das gleiche Verzeichnis voreingestellt. Dieses kann man zwar &auml;ndern und so passend f&uuml;r einen Anwendungszweck in einer Datenbank gestalten, aber beim Importieren in die n&auml;chste Datenbank muss man das Verzeichnis wieder neu selektieren. Wie sch&ouml;n w&auml;re es, wenn dieser Ordner zumindest immer auf den Ordner eingestellt wird, in dem sich die aktuelle Datenbank befindet. Noch praktischer w&auml;re es, wenn man f&uuml;r jede Anwendung einen individuellen Ordner einstellen k&ouml;nnte, der automatisch beim &Ouml;ffnen der Anwendung bereitgestellt wird. Die gute Nachricht ist: Wir haben eine L&ouml;sung daf&uuml;r gefunden, die wir in diesem Beitrag vorstellen &#8211; damit sind die beiden genannten Varianten m&ouml;glich! Wie es geht, lesen Sie auf den folgenden Seiten.<\/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":[662025,66052025,44000027],"tags":[],"class_list":["post-55001558","post","type-post","status-publish","format-standard","hentry","category-662025","category-66052025","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Individueller Standarddatenbankordner je Datenbank - 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\/Individueller_Standarddatenbankordner_je_Datenbank\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Individueller Standarddatenbankordner je Datenbank\" \/>\n<meta property=\"og:description\" content=\"Eines &auml;rgert mich bereits seit Jahrzehnten: Dass man beim Importieren von Objekten aus anderen Datenbanken &uuml;ber den Assistenten immer wieder neu zum jeweiligen Verzeichnis wechseln muss. Dort ist immer das gleiche Verzeichnis voreingestellt. Dieses kann man zwar &auml;ndern und so passend f&uuml;r einen Anwendungszweck in einer Datenbank gestalten, aber beim Importieren in die n&auml;chste Datenbank muss man das Verzeichnis wieder neu selektieren. Wie sch&ouml;n w&auml;re es, wenn dieser Ordner zumindest immer auf den Ordner eingestellt wird, in dem sich die aktuelle Datenbank befindet. Noch praktischer w&auml;re es, wenn man f&uuml;r jede Anwendung einen individuellen Ordner einstellen k&ouml;nnte, der automatisch beim &Ouml;ffnen der Anwendung bereitgestellt wird. Die gute Nachricht ist: Wir haben eine L&ouml;sung daf&uuml;r gefunden, die wir in diesem Beitrag vorstellen - damit sind die beiden genannten Varianten m&ouml;glich! Wie es geht, lesen Sie auf den folgenden Seiten.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-28T16:57:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee\" \/>\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\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Individueller Standarddatenbankordner je Datenbank\",\"datePublished\":\"2025-08-28T16:57:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/\"},\"wordCount\":2943,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/104a96e027734b8e93e3764e166e71ee\",\"articleSection\":[\"2025\",\"5\\\/2025\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/\",\"name\":\"Individueller Standarddatenbankordner je Datenbank - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/104a96e027734b8e93e3764e166e71ee\",\"datePublished\":\"2025-08-28T16:57:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/104a96e027734b8e93e3764e166e71ee\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/104a96e027734b8e93e3764e166e71ee\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Individueller_Standarddatenbankordner_je_Datenbank\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Individueller Standarddatenbankordner je Datenbank\"}]},{\"@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":"Individueller Standarddatenbankordner je Datenbank - 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\/Individueller_Standarddatenbankordner_je_Datenbank\/","og_locale":"de_DE","og_type":"article","og_title":"Individueller Standarddatenbankordner je Datenbank","og_description":"Eines &auml;rgert mich bereits seit Jahrzehnten: Dass man beim Importieren von Objekten aus anderen Datenbanken &uuml;ber den Assistenten immer wieder neu zum jeweiligen Verzeichnis wechseln muss. Dort ist immer das gleiche Verzeichnis voreingestellt. Dieses kann man zwar &auml;ndern und so passend f&uuml;r einen Anwendungszweck in einer Datenbank gestalten, aber beim Importieren in die n&auml;chste Datenbank muss man das Verzeichnis wieder neu selektieren. Wie sch&ouml;n w&auml;re es, wenn dieser Ordner zumindest immer auf den Ordner eingestellt wird, in dem sich die aktuelle Datenbank befindet. Noch praktischer w&auml;re es, wenn man f&uuml;r jede Anwendung einen individuellen Ordner einstellen k&ouml;nnte, der automatisch beim &Ouml;ffnen der Anwendung bereitgestellt wird. Die gute Nachricht ist: Wir haben eine L&ouml;sung daf&uuml;r gefunden, die wir in diesem Beitrag vorstellen - damit sind die beiden genannten Varianten m&ouml;glich! Wie es geht, lesen Sie auf den folgenden Seiten.","og_url":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/","og_site_name":"Access im Unternehmen","article_published_time":"2025-08-28T16:57:00+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee","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\/Individueller_Standarddatenbankordner_je_Datenbank\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Individueller Standarddatenbankordner je Datenbank","datePublished":"2025-08-28T16:57:00+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/"},"wordCount":2943,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee","articleSection":["2025","5\/2025","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/","url":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/","name":"Individueller Standarddatenbankordner je Datenbank - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee","datePublished":"2025-08-28T16:57:00+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/104a96e027734b8e93e3764e166e71ee"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Individueller_Standarddatenbankordner_je_Datenbank\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Individueller Standarddatenbankordner je Datenbank"}]},{"@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\/55001558","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=55001558"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001558\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}