{"id":55000879,"date":"2013-04-01T00:00:00","date_gmt":"2020-05-22T21:35:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=879"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Tabellen_verknuepfen_per_Assistent","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/","title":{"rendered":"Tabellen verkn&uuml;pfen per Assistent"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Der in Access eingebaute Importassistent ist hilfreich, wenn man nur hin und wieder eine Tabelle verkn&uuml;pfen oder importieren m&ouml;chte. Wenn Sie diesen jedoch regelm&auml;&szlig;ig nutzen, werden Sie sich fr&uuml;her oder sp&auml;ter &auml;rgern, dass Sie jedes Mal erneut den Pfad der Quelldatenbank ausw&auml;hlen m&uuml;ssen. Dummerweise merkt sich Access noch nicht einmal den zuletzt verwendeten Pfad. Zeit, einen Ersatz f&uuml;r diesen Assistenten zu stricken &#8211; und zwar in Form eines kleinen Access-Add-Ins. Gleichzeitig erhalten Sie direkt noch einiges Know-how rund um das Verkn&uuml;pfen und Importieren von Tabellen per VBA.<\/b><\/p>\n<p><b>Funktionen des Add-Ins<\/b><\/p>\n<p>Am Ende des Beitrag soll ein direkt einsetzbares Add-In herauskommen. Dieses sieht wie in Bild 1 aus und bietet eine Reihe interessanter Funktionen, die ein schnellstm&ouml;gliches Verkn&uuml;pfen mit den Tabellen anderer Datenbanken erlauben.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Das fertige Add-In zum schnellen Verkn&uuml;pfen von Tabellen aus anderen Datenbanken<\/span><\/b><\/p>\n<p>Wie schon in der Einf&uuml;hrung erw&auml;hnt, ist vor allem das st&auml;ndige Ausw&auml;hlen des Verzeichnisses der Quelldatenbank eine nervige Angelegenheit. Hier sollte auf jeden Fall der Hebel angesetzt werden. Deshalb soll das Formular gleich nach dem &Ouml;ffnen die zuletzt zum Verkn&uuml;pfen oder Importieren verwendeten Datenbankdateien anzeigen. Diese Liste k&ouml;nnte mit der Zeit etwas lang werden, deshalb haben wir neben der Schaltfl&auml;che zum Ausw&auml;hlen und Hinzuf&uuml;gen einer neuen Datenbank auch noch eine zum L&ouml;schen vorhandener Eintr&auml;ge eingebaut. Au&szlig;erdem finden Sie ganz oben ein Textfeld, mit dem Sie die Datenbank- beziehungsweise Pfadnamen nach gew&uuml;nschten Begriffen durchsuchen k&ouml;nnen. Nach Eingabe eines jeden Buchstabens wird der Inhalt des Listenfeldes mit den zuletzt verwendeten Datenbanken aktualisiert.<\/p>\n<p>Fehlt noch eine Option im oberen Bereich des Formulars: Mit <b>Nicht gefundene ausblenden <\/b>stellen Sie ein, ob das obere Listenfeld solche Datenbankdateien, die aktuell nicht vorliegen, ausblenden soll.<\/p>\n<p>Eigentlich k&ouml;nnte man diese auch gleich entfernen, aber es kann ja auch vorkommen, dass Datenbanken auf einem Netzlaufwerk liegen, das aktuell nicht verf&uuml;gbar ist.<\/p>\n<p>Ein Doppelklick auf einen der Listeneintr&auml;ge des oberen Listenfeldes liest alle Tabellen der betroffenen Datenbank ein und zeigt diese in dem darunter befindlichen Listenfeld an.<\/p>\n<p>Mit einem Klick auf das Kontrollk&auml;stchen <b>Systemtabellen<\/b> k&ouml;nnen Sie festlegen, ob die Liste nur benutzerdefinierte Tabellen anzeigen soll oder auch Systemtabellen. Rechts davon legen Sie fest, ob Tabellen importiert oder verkn&uuml;pft werden sollen (eigentlich sollte das Add-In nur das Verkn&uuml;pfen erlauben, aber das Importieren unterscheidet sich in einem einzigen Parameter &#8211; daher haben wir es auch noch hinzugef&uuml;gt).<\/p>\n<p>Im unteren Listenfeld markieren Sie schlie&szlig;lich die zu verkn&uuml;pfenden oder zu importierenden Tabellen und f&uuml;hren die Verkn&uuml;pfung oder den Import mit einem Klick auf die entsprechende Schaltfl&auml;che durch.<\/p>\n<p><b>Tabellen der L&ouml;sung<\/b><\/p>\n<p>Das Add-In verwendet zwei Tabellen, um die bereits verwendeten Datenbanken und die Tabellen der aktuellen Quelldatenbank zu speichern.<\/p>\n<p>Die erste Tabelle hei&szlig;t <b>tblDatenbanken<\/b> und sieht im Entwurf wie in Bild 2 aus. Das Feld <b>Datenbank<\/b> speichert den Datenbanknamen inklusive Pfad, das Feld <b>Vorhanden <\/b>wird erst beim &Ouml;ffnen des Formulars gef&uuml;llt. Dabei erh&auml;lt es den Wert <b>True<\/b>, wenn eine Datenbank der Tabelle nicht am entsprechenden Ort gefunden werden konnte. Das Feld <b>Datenbank <\/b>ist mit einem eindeutigen Index versehen, damit jede Datenbank nur einfach aufgenommen werden kann.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Tabelle zum Speichern der bereits verwendeten Datenbanken<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblTabellen <\/b>speichert nach der Auswahl der Datenbank, deren Tabellen verkn&uuml;pft oder importiert werden sollen, die darin enthaltenen Tabellen.<\/p>\n<p>Sie sieht im Entwurf wie in <span class=\"verweis-ohneumbruch\">Bild 3 <\/span>aus und enth&auml;lt neben dem Feld <b>Tabelle <\/b>zum Speichern des Tabellennamens noch das Feld <b>Flags<\/b>, um den Wert des gleichnamigen Feldes der Tabelle <b>MSysObjects <\/b>aufzunehmen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Tabellen zum Speichern der Tabellen der aktuell als Quelle f&uuml;r die Verkn&uuml;pfung oder den Import dienenden Datenbank<\/span><\/b><\/p>\n<p><b>Hauptformular erstellen<\/b><\/p>\n<p>Das Hauptformular der Anwendung hei&szlig;t <b>frmLinkAndImportAdmin <\/b>und sieht im Entwurf wie in Bild 5 aus und speichert aktuell drei Optionen:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Hauptformular des Add-Ins in der Entwurfsansicht<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Tabellen zum Speichern der Add-In-Optionen<\/span><\/b><\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Systemtabellen<\/b>: Gibt an, ob Systemtabellen angezeigt werden sollen oder nicht. Wird mit dem Kontrollk&auml;stchen <b>chkSystemtabellen <\/b>eingestellt, das auch an dieses Feld der Tabelle <b>tblOptionen <\/b>gebunden ist.<\/li>\n<li class=\"aufz-hlung\"><b>NichtGefundeneAusblenden<\/b>: Legt fest, ob aktuell nicht auffindbare Datenbanken ausgeblendet werden sollen. Wird mit dem Kontrollk&auml;stchen <b>chkNichtGefundeneAusblenden <\/b>eingestellt.<\/li>\n<li class=\"aufz-hlung\"><b>VerknuepfenOderImportieren<\/b>: Speichert die letzte Einstellung der Optionsgruppe <b>ogrVerknuepfenOderImportieren<\/b>.<\/li>\n<\/ul>\n<p>Durch die Verwendung dieser Tabelle und der an die enthaltenen Felder gebundenen Steuerelemente werden die zuletzt verwendeten Einstellungen beim n&auml;chsten Start des Add-Ins wiederhergestellt.<\/p>\n<p><b>&Ouml;ffnen des Formulars<\/b><\/p>\n<p>Das &Ouml;ffnen des Formulars l&ouml;st das Ereignis <b>Beim Laden <\/b>aus, was wiederum die Ereignisprozedur <b>Form_Load <\/b>aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-61-anchor\">Listing 1<\/a><\/span> auf den Plan ruft. Diese Prozedur ruft zun&auml;chst eine weitere Prozedur namens <b>DatenbankenPruefen<\/b> auf. Diese pr&uuml;ft, ob alle bisher verwendeten Datenbanken noch an Ort und Stelle sind. Ist dies nicht der Fall und ist die Option <b>NichtGefundeneAusblenden <\/b>aktiv, werden die entsprechenden Eintr&auml;ge des Listenfeldes <b>lstDatenbanken <\/b>ausgeblendet.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Laden des Formulars<\/p>\n<pre>Private Sub Form_Load()\r\n    Dim db As DAO.Database\r\n    Set db = CodeDb\r\n    DatenbankenPruefen\r\n    db.Execute &quot;DELETE FROM tblTabellen&quot;, dbFailOnError\r\n    Me!lstTabellen.Requery\r\n    Me!lstDatenbanken.ColumnWidths = &quot;0;&quot; &amp; Me!lstDatenbanken.Width &amp; &quot;;0&quot;\r\n    DatenbankenAktualisieren\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>Schauen wir uns zun&auml;chst dieses Listenfeld an: Es verwendet die Abfrage <b>qryDatenbanken <\/b>als Datenherkunft. Diese sieht wie in Bild 7 aus &#8211; bei zu langen Dateinamen werden Teile durch Platzhalter ersetzt (<b>&#8230;<\/b>).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Diese Abfrage f&uuml;gt die gek&uuml;rzte Fassung des Datenbanknamens zum Ergebnis hinzu.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Datenherkunft f&uuml;r das obere Listenfeld zur Anzeige der Datenbanken<\/span><\/b><\/p>\n<p><b>Pr&uuml;fen, ob alle Datenbanken an Ort und Stelle sind<\/b><\/p>\n<p>Die Prozedur <b>DatenbankenPruefen <\/b>durchl&auml;uft alle Datens&auml;tze der Tabelle <b>tblDatenbanken<\/b>. Dabei versetzt sie den jeweils aktuellen Datensatz in den Bearbeitungsmodus und pr&uuml;ft dann mit der <b>Dir<\/b>-Funktion, ob die im Feld <b>Datenbank <\/b>angegebene Datei vorhanden ist.<\/p>\n<p>Dies ist der Fall, wenn die <b>Dir<\/b>-Funktion eine Zeichenkette liefert, deren L&auml;nge gr&ouml;&szlig;er als <b>0 <\/b>ist. In diesem Fall stellt die Prozedur den Wert des Feldes <b>Vorhanden <\/b>auf den Wert <b>True <\/b>ein, sonst auf <b>False<\/b>. Schlie&szlig;lich speichert die Prozedur die &auml;nderung mit der <b>Update<\/b>-Methode und pr&uuml;ft dann den n&auml;chsten Datensatz:<\/p>\n<pre>Private Sub DatenbankenPruefen()\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Set db = CodeDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT * FROM tblDatenbanken&quot;, dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        rst.Edit\r\n        If Len(Dir(rst!Datenbank)) &gt; 0 Then\r\n            rst!Vorhanden = True\r\n        Else\r\n            rst!Vorhanden = False\r\n        End If\r\n        rst.Update\r\n        rst.MoveNext\r\n    Loop\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>Der Rest der Prozedur <b>Form_Load <\/b>ist schnell erkl&auml;rt: Diese leert die Tabelle <b>tblTabellen<\/b>, da beim &Ouml;ffnen des Formulars keiner der Listeneintr&auml;ge markiert ist und somit auch keine Tabellen angezeigt werden sollen.<\/p>\n<p>Das Listenfeld <b>lstTabellen<\/b> wird aktualisiert, danach stellt die Prozedur die Breite der angezeigten Spalte des Listenfeldes <b>lstDatenbanken <\/b>auf die Breite des gesamten Listenfeldes ein. Schlie&szlig;lich ruft die Prozedur eine weitere Routine namens <b>DatenbankenAktualisieren <\/b>auf (siehe <span class=\"verweis-ohneumbruch\"><a href=\"#anker-67-anchor\">Listing 2<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 2: Aktualisieren der Datenbanken<\/p>\n<pre>Private Sub DatenbankenAktualisieren()\r\n    If Me!chkNichtGefundeneAusblenden Then\r\n        Me!lstDatenbanken.RowSource = &quot;SELECT * FROM qryDatenbanken WHERE Vorhanden = True&quot;\r\n    Else\r\n        Me!lstDatenbanken.RowSource = &quot;SELECT * FROM qryDatenbanken&quot;\r\n    End If\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Diese stellt einfach nur sicher, dass das Listenfeld <b>lstDatenbanken <\/b>nur diejenigen Datenbanken anzeigt, die der Benutzer sehen will. Dies h&auml;ngt wieder von der Einstellung der Option <b>NichtGefundeneAusblenden <\/b>ab. Hat diese den Wert <b>True<\/b>, erh&auml;lt das Listenfeld <b>lstDatenbanken <\/b>eine Abfrage basierend auf der Abfrage <b>qryDatenbanken <\/b>als Datensatzherkunft, die lediglich die vorhandenen Datenbanken anzeigt. Anderenfalls zeigt das Listenfeld alle Eintr&auml;ge an.<\/p>\n<p>Die gleiche Routine wird noch zu einer anderen Gelegenheit aufgerufen &#8211; n&auml;mlich dann, wenn der Benutzer den Wert des Kontrollk&auml;stchens <b>chkNichtGefundeneAusblenden <\/b>&auml;ndert:<\/p>\n<pre>Private Sub chkNichtGefundeneAusblenden_AfterUpdate()\r\n    DatenbankenAktualisieren\r\n    End Sub<\/pre>\n<p>Dies aktualisiert schlicht die aktuell im Listenfeld <b>lstDatenbanken <\/b>angezeigten Eintr&auml;ge.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Datenbank hinzuf&uuml;gen<\/p>\n<p>Schauen wir uns nun an, was bei einem Mausklick auf die Schaltfl&auml;che <b>Datenbank hinzuf&uuml;gen <\/b>geschieht. Dies l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-68-anchor\">Listing 3<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Hinzuf&uuml;gen einer neuen Datenbank<\/p>\n<pre>Private Sub cmdDatenbankHinzufuegen_Click()\r\n    Dim db As DAO.Database\r\n    Dim strPfad As String\r\n    Dim strDatenbank As String\r\n    Dim lngNeueDatenbankID As Long\r\n    Set db = CodeDb\r\n    If Not Nz(Me!lstDatenbanken, 0) = 0 Then\r\n        strPfad = db.OpenRecordset(&quot;SELECT Datenbank FROM tblDatenbanken WHERE DatenbankID = &quot; _\r\n            &amp; Me!lstDatenbanken, dbOpenSnapshot).Fields(0)\r\n        strPfad = Mid(strPfad, 1, InStrRev(strPfad, &quot;\\&quot;))\r\n    Else\r\n        strPfad = CurrentProject.Path\r\n    End If\r\n    strDatenbank = OpenFileName(strPfad, &quot;Datenbank ausw&auml;hlen&quot;, _\r\n        &quot;Access-Dateien (*.mdb,*.accdb)|Alle Dateien (*.*)&quot;)\r\n    If Len(strDatenbank) &gt; 0 Then\r\n        On Error Resume Next\r\n        db.Execute &quot;INSERT INTO tblDatenbanken(Datenbank, Vorhanden) VALUES(''&quot; &amp; strDatenbank _\r\n            &amp; &quot;'', -1)&quot;, dbFailOnError\r\n        If Err.Number = 3022 Then\r\n            db.Execute &quot;UPDATE tblDatenbanken SET Vorhanden = -1&quot;, dbFailOnError\r\n            lngNeueDatenbankID = db.OpenRecordset(&quot;SELECT DatenbankID FROM tblDatenbanken &quot; _\r\n                &amp; &quot;WHERE Datenbank = ''&quot; &amp; strDatenbank &amp; &quot;''&quot;, dbOpenSnapshot).Fields(0)\r\n        Else\r\n            lngNeueDatenbankID = db.OpenRecordset(&quot;SELECT @@IDENTITY&quot;).Fields(0)\r\n        End If\r\n        Me!lstDatenbanken.Requery\r\n        Me!lstDatenbanken = lngNeueDatenbankID\r\n        TabellenEinlesen\r\n        TabellenAktualisieren\r\n    End If\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>Diese besitzt eine kleine Funktion, die daf&uuml;r sorgt, dass im nun erscheinenden <b>Datei &ouml;ffnen<\/b>-Dialog gleich das Verzeichnis der aktuell im Listenfeld <b>lstDatenbanken <\/b>markierten Datenbank erscheint. Dazu pr&uuml;ft die Prozedur zun&auml;chst, ob &uuml;berhaupt ein Eintrag des Listenfeldes <b>lstDatenbanken <\/b>markiert ist. Falls nicht, verwendet sie einfach den Pfad der aktuellen Datenbank als Startverzeichnis. Anderenfalls liest sie den Pfad f&uuml;r den aktuellen Datensatz im Listenfeld aus der Tabelle <b>tblDatenbanken <\/b>ein und schneidet den Teil hinter dem letzten Backslash-Zeichen ab.<\/p>\n<p>Damit ausgestattet, ruft die Prozedur die Funktion <b>OpenFileName <\/b>auf. Diese befindet sich im Modul <b>mdlTools <\/b>der Datenbank und zeigt, basierend auf der <b>Wizhook<\/b>-Klasse, den <b>Datei &ouml;ffnen<\/b>-Dialog an. Das Ergebnis dieser Funktion landet in der Variablen <b>strDatenbank<\/b>.<\/p>\n<p>Sollte der Benutzer eine Datei ausgew&auml;hlt haben, ist die folgende <b>If&#8230;Then<\/b>-Bedingung erf&uuml;llt und die Prozedur f&uuml;hrt die darin enthaltenen Anweisungen aus. Dies beginnt mit dem Einf&uuml;gen des Namens der gefundenen Datei in die Tabelle <b>tblDatenbanken<\/b>. Dabei kann es vorkommen, dass die gew&auml;hlte Datenbank bereits in der Tabelle enthalten ist. Ist dies der Fall, l&ouml;st dies wegen des eindeutigen Index im Feld <b>Datenbank <\/b>der Tabelle <b>tblDatenbanken <\/b>den Fehler mit der Nummer <b>3022 <\/b>aus. Ist dies der Fall, aktualisiert die Prozedur den Wert des Feldes <b>Vorhanden <\/b>auf den Wert <b>True <\/b>&#8211; die Datenbank ist nun auf jeden Fall vorhanden.<\/p>\n<p>Au&szlig;erdem ermittelt die Prozedur mithilfe einer entsprechenden Datensatzgruppe den Wert des Feldes <b>DatenbankID <\/b>des betroffenen Datensatzes. <\/p>\n<p>Wenn die Datenbank noch nicht in der Tabelle <b>tblDatenbanken <\/b>enthalten ist, l&ouml;st das Anlegen des entsprechenden Datensatzes keinen Fehler aus und der zweite Teil der <b>If&#8230;Then<\/b>-Bedingung wird ausgel&ouml;st. In diesem Fall speichert die Prozedur einfach nur den mit der Abfrage <\/p>\n<pre>SELECT @@IDENTITY<\/pre>\n<p>ermittelten Prim&auml;rschl&uuml;sselwert des neu hinzugef&uuml;gten Datensatzes in der Variablen <b>lngNeueDatenbankID<\/b>.<\/p>\n<p>Wozu ben&ouml;tigen wir diesen Wert Um die gew&auml;hlte Datenbank im Listenfeld zu markieren, nach dem dessen Inhalt aktualisiert wurde. Das Markieren geschieht durch das Zuweisen des Wertes von <b>lngNeueDatenbankID <\/b>als Wert des Listenfeldes.<\/p>\n<p>Danach ruft die Prozedur noch die beiden Routinen <b>TabellenEinlesen <\/b>und <b>TabellenAktualisieren <\/b>auf, die wir uns nachfolgend ansehen.<\/p>\n<p><b>Tabellen einlesen<\/b><\/p>\n<p>Das Einlesen der Tabellen erledigt die Prozedur <b>TabellenEinlesen<\/b> aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-70-anchor\">Listing 4<\/a><\/span>. Die Prozedur ermittelt mithilfe der <b>Column<\/b>-Eigenschaft den Wert der dritten Spalte des markierten Eintrags des Listenfeldes. In dieser Spalte speichert das Listenfeld unsichtbar den vollst&auml;ndigen Dateipfad der Datenbank. Nachdem sie gepr&uuml;ft hat, dass die angegebene Datenbankdatei vorhanden ist, leert sie die Tabelle <b>tblTabellen <\/b>und f&uuml;llt diese erneut. Dazu erzeugt sie zun&auml;chst ein <b>Database<\/b>-Objekt auf Basis der Add-In-Datenbank. Diese wird, im Gegensatz zur aktuell ge&ouml;ffneten Datenbank, mit <b>CodeDb <\/b>und nicht mit <b>CurrentDb <\/b>referenziert (deshalb verwenden wir an anderer Stelle im Code auch die <b>db.OpenRecordset<\/b>-Methode statt <b>DLookup <\/b>&#8211; wobei sich <b>db <\/b>ebenfalls auf <b>CodeDb<\/b>, also das Add-In, bezieht).<\/p>\n<p class=\"listingueberschrift\">Listing 4: Einlesen der Tabellen einer Datenbank<\/p>\n<pre>Private Sub TabellenEinlesen()\r\n    Dim db As DAO.Database\r\n    Dim strDatenbank As String\r\n    strDatenbank = Me!lstDatenbanken.Column(2, Me!lstDatenbanken.ItemsSelected(0))\r\n    If Len(Dir(strDatenbank)) &gt; 0 Then\r\n        Set db = CodeDb\r\n        db.Execute &quot;DELETE FROM tblTabellen&quot;, dbFailOnError\r\n        db.Execute &quot;INSERT INTO tblTabellen(Tabelle, Flags) SELECT Name, Flags FROM MSysObjects IN ''&quot; _\r\n            &amp; strDatenbank &amp; &quot;'' WHERE Type = 1&quot;, dbFailOnError\r\n        Set db = Nothing\r\n    Else\r\n        MsgBox &quot;Die Datenbank ist nicht mehr unter dem angegebenen Pfad verf&uuml;gbar.&quot;\r\n    End If\r\nEnd Sub<\/pre>\n<p>Die Werte der Felder <b>Tabelle <\/b>und <b>Flags <\/b>der Tabelle <b>tblTabellen <\/b>beziehen wir aus der Tabelle <b>MSysObjects <\/b>der aktuell im Listenfeld <b>lstDatenbanken <\/b>markierten Datenbankdatei. Damit wir per <b>SELECT<\/b>-Abfrage auf diese Tabelle zugreifen k&ouml;nnen, f&uuml;gen wir dem Namen der Tabelle <b>MSysObjects <\/b>den <b>IN<\/b>-Parameter mit dem Namen der Quelldatenbank hinzu &#8211; dies sieht etwa so aus:<\/p>\n<pre>INSERT INTO tblTabellen(Tabelle, Flags) SELECT Name, Flags FROM MSysObjects IN ''C:\\Test.mdb'' WHERE Type = 1<\/pre>\n<p>Die Bedingung Type = 1 sorgt daf&uuml;r, dass nur direkt in der Quelldatenbank enthaltene Tabellen ber&uuml;cksichtigt werden und keine per Jet oder ODBC verkn&uuml;pften Tabellen.<\/p>\n<p>Nach dem Einlesen der Tabellen pr&uuml;ft die Prozedur <b>TabellenAktualisieren <\/b>noch, ob der Benutzer die Option <b>Systemtabellen <\/b>aktiviert hat (siehe <span class=\"verweis-ohneumbruch\"><a href=\"#anker-71-anchor\">Listing 5<\/a><\/span>). Falls ja, soll das Listenfeld alle Datens&auml;tze der Tabelle <b>tblTabellen <\/b>anzeigen, sonst nur diejenigen Datens&auml;tze, deren Wert im Feld <b>Flag <\/b>nicht auf eine Systemtabelle hinweist (weitere Informationen zu diesem Feld finden Sie im Beitrag <b>Die Tabelle MSysObjects <\/b>(<b>www.access-im-unternehmen.de\/874<\/b>).<\/p>\n<p class=\"listingueberschrift\">Listing 5: Aktualisieren der Anzeige der Tabellen<\/p>\n<pre>Private Sub TabellenAktualisieren()\r\n    If Me!chkSystemtabellen Then\r\n        Me!lstTabellen.RowSource = &quot;SELECT * FROM tblTabellen&quot;\r\n    Else\r\n        Me!lstTabellen.RowSource = &quot;SELECT * FROM tblTabellen WHERE Flags NOT IN (-2147483648, &quot; _\r\n            &amp; &quot;-2147352566, -2147287040, -2146828288, 2, 10, -2147483646, 262154)&quot;\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Entfernen von Datenbanken<\/b><\/p>\n<p>Klickt der Benutzer auf die Schaltfl&auml;che <b>Datenbank entfernen<\/b>, soll die aktuell im Listenfeld markierte Datenbank aus der Tabelle <b>tblDatenbanken <\/b>gel&ouml;scht und das Listenfeld aktualisiert werden.<\/p>\n<p>Die Schaltfl&auml;che l&ouml;st die Prozedur <b>cmdDatenbankEntfernen <\/b>aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-72-anchor\">Listing 6<\/a><\/span> aus. Diese pr&uuml;ft zun&auml;chst, ob &uuml;berhaupt ein Eintrag im Listenfeld markiert wurde. Falls ja, l&ouml;scht eine <b>DELETE<\/b>-Anweisung den entsprechenden Datensatz aus der Tabelle <b>tblDatenbanken<\/b>. Anschlie&szlig;end aktualisiert ein Aufruf der Prozedur <b>DatenbankenAktualisieren <\/b>den Inhalt des Listenfeldes <b>lstDatenbanken<\/b>, au&szlig;erdem wird dieses auf den Wert <b>Null <\/b>eingestellt.<\/p>\n<p class=\"listingueberschrift\">Listing 6: L&ouml;schen einer Datenbank aus der Liste der bereits verwendeten Datenbanken<\/p>\n<pre>Private Sub cmdDatenbankEntfernen_Click()\r\n    Dim db As DAO.Database\r\n    If Not Nz(Me!lstDatenbanken, 0) = 0 Then\r\n        Set db = CodeDb\r\n        db.Execute &quot;DELETE FROM tblDatenbanken WHERE DatenbankID = &quot; &amp; Me!lstDatenbanken\r\n        DatenbankenAktualisieren\r\n        Me!lstDatenbanken = Null\r\n        Set db = Nothing\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Ausw&auml;hlen der Quelldatenbank <\/b><\/p>\n<p>Mit einem Doppelklick auf einen der Eintr&auml;ge im Listenfeld <b>lstDatenbanken <\/b>soll der Benutzer die Datenbank ausw&auml;hlen, deren Tabellen angezeigt werden und importiert oder verkn&uuml;pft werden sollen.<\/p>\n<p>Die dadurch ausgel&ouml;ste Prozedur ruft lediglich die beiden bereits bekannten Routinen <b>TabellenEinlesen <\/b>und <b>TabellenAktualisieren <\/b>auf:<\/p>\n<pre>Private Sub lstDatenbanken_DblClick(Cancel As Integer)\r\n    TabellenEinlesen\r\n    TabellenAktualisieren\r\nEnd Sub<\/pre>\n<p><b>Systemtabellen ein- und ausblenden<\/b><\/p>\n<p>Das Aktivieren oder Deaktivieren der Option Systemtabellen mit dem entsprechenden Kontrollk&auml;stchen soll die Systemtabellen ein- oder ausblenden. Dies l&ouml;st die Routine <b>TabellenAktualisieren <\/b>aus, die sich um den Rest k&uuml;mmert:<\/p>\n<pre>Private Sub chkSystemtabellen_AfterUpdate()\r\n    TabellenAktualisieren\r\nEnd Sub<\/pre>\n<p><b>Verkn&uuml;pfen oder importieren<\/b><\/p>\n<p>Keine Auswirkung auf die Anzeige der Datenbanken oder Tabellen in den beiden Listenfeldern hat die Auswahl eines der beiden Eintr&auml;ge der Optionsgruppe <b>ogrVerknuepfenOderImportieren<\/b>. Dies l&ouml;st lediglich die Ereignisprozedur aus, die f&uuml;r das Ereignis <b>Nach Aktualisierung <\/b>hinterlegt wurde und wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-74-anchor\">Listing 7<\/a><\/span> aussieht.<\/p>\n<p class=\"listingueberschrift\">Listing 7: Aktualisieren der Beschriftung der Schaltfl&auml;che cmdVerknuepfen<\/p>\n<pre>Private Sub ogrVerknuepfenOderImportieren_AfterUpdate()\r\n    Select Case Me!ogrVerknuepfenOderImportieren\r\n        Case 1\r\n            Me!cmdVerknuepfen.Caption = &quot;Tabellen verkn&uuml;pfen&quot;\r\n        Case 2\r\n            Me!cmdVerknuepfen.Caption = &quot;Tabellen importieren&quot;\r\n    End Select\r\nEnd Sub<\/pre>\n<p>Die Prozedur stellt je nach Auswahl die Bezeichnung der Schaltfl&auml;che <b>cmdVerknuepfen <\/b>auf einen der Ausdr&uuml;cke <b>Tabellen verkn&uuml;pfen <\/b>oder <b>Tabellen importieren <\/b>ein.<\/p>\n<p><b>In Datenbanken suchen<\/b><\/p>\n<p>Mit einem Einzeiler liefert die folgende Prozedur, die durch das Ereignis <b>Bei &auml;nderung <\/b>des Textfeldes <b>txtSuche <\/b>ausgel&ouml;st wird, eine wichtige Funktion. Sie sorgt damit daf&uuml;r, dass nach jeder Eingabe eines Zeichens in dieses Textfeld die Datensatzherkunft des Listenfeldes <b>lstDatenbanken <\/b>aktualisiert wird. Dazu stellt sie nur den entsprechenden <b>SELECT<\/b>-Ausdruck zusammen und weist diesen der Eigenschaft <b>Datensatzherkunft <\/b>des Listenfeldes <b>lstDatenbanken <\/b>zu:<\/p>\n<pre>Private Sub txtSuche_Change()\r\n    Me!lstDatenbanken.RowSource = &quot;SELECT * FROM qryDatenbanken &quot; _\r\n    &amp; &quot;WHERE Datenbank LIKE ''*&quot; &amp; Me!txtSuche.Text &amp; &quot;*''&quot;\r\nEnd Sub<\/pre>\n<p><b>Verkn&uuml;pfen oder Importieren der Tabellen<\/b><\/p>\n<p>Fehlt noch die entscheidende Funktion des kompletten Add-Ins: das Herstellen einer Verkn&uuml;pfung oder das Importieren der gew&auml;hlten Tabellen.<\/p>\n<p>Dies erledigt der Benutzer nach der Auswahl von Datenbank und Tabellen mit einem Mausklick auf die Schaltfl&auml;che <b>cmdVerknuepfen<\/b>. Diese l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-75-anchor\">Listing 8<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 8: Verkn&uuml;pfen oder Importieren der gew&auml;hlten Tabellen<\/p>\n<pre>Private Sub cmdVerknuepfen_Click()\r\n    Dim var As Variant\r\n    Dim strTabelle As String\r\n    Dim strDatenbank As String\r\n    For Each var In Me!lstTabellen.ItemsSelected\r\n        strTabelle = Me!lstTabellen.Column(1, var)\r\n        strDatenbank = Me!lstDatenbanken.Column(2, Me!lstDatenbanken.ItemsSelected(0))\r\n        On Error Resume Next\r\n        Select Case Me!ogrVerknuepfenOderImportieren\r\n            Case 1\r\n                DoCmd.TransferDatabase acLink, &quot;Microsoft Access&quot;, strDatenbank, acTable, _\r\n                    strTabelle, strTabelle\r\n            Case 2\r\n                DoCmd.TransferDatabase acImport, &quot;Microsoft Access&quot;, strDatenbank, acTable, _\r\n                    strTabelle, strTabelle\r\n        End Select\r\n        Select Case Err.Number\r\n            Case 3845\r\n                If MsgBox(Err.Description &amp; vbCrLf &amp; vbCrLf &amp; &quot;Klicken Sie auf ''Abbrechen'', um &quot; _\r\n                        &amp; &quot;den Vorgang zu beenden. ''OK'' liest weitere Tabellen ein.&quot;, _\r\n                        vbOKCancel + vbCritical, &quot;LinkAndImportAdmin&quot;) = vbCancel Then\r\n                    Exit Sub\r\n                End If\r\n            Case 0\r\n            Case Else\r\n                MsgBox &quot;Fehler &quot; &amp; Err.Number &amp; &quot;, ''&quot; &amp; Err.Description &amp; &quot;''&quot;\r\n        End Select\r\n    Next var\r\nEnd Sub<\/pre>\n<p>Die Prozedur durchl&auml;uft alle Eintr&auml;ge der Auflistung <b>ItemsSelected <\/b>des Listenfeldes <b>lstTabellen<\/b>. Diese Auflistung liefert alle Indexwerte der aktuell markierten Eintr&auml;ge des Listenfeldes und speichert den jeweils aktuellen Wert in der Variablen <b>var<\/b>. Innerhalb der For Each-Schleife speichert die Prozedur zun&auml;chst den Namen des aktuellen Listenfeldeintrags in der Variablen <b>strTabelle<\/b>. Wenn der Index des betroffenen Datensatzes und die Spalte bekannt sind, k&ouml;nnen Sie den entsprechenden Wert auch hier wieder mit der <b>Column<\/b>-Eigenschaft unter Verwendung zweier Parameter ermitteln (der erste entspricht der Spalte, der zweite der Zeile).<\/p>\n<p>Auf &auml;hnliche Weise ermittelt die folgende Anweisung den Pfad der zu verwendenden Datenbank und speichert diesen in der Variablen <b>strDatenbank<\/b>.<\/p>\n<p>Nun pr&uuml;ft die Prozedur, ob die Tabelle verkn&uuml;pft oder importiert werden soll. In beiden F&auml;llen ruft die Prozedur die <b>TransferDatabase<\/b>-Methode des <b>DoCmd<\/b>-Objekts auf. Der Unterschied ist, dass beim Verkn&uuml;pfen die Konstante <b>acLink <\/b>als erster Parameter verwendet wird, beim Importieren die Konstante <b>acImport<\/b>. Die &uuml;brigen Parameter dieser Methode sind die Art der Quelldatei (<b>Microsoft Access<\/b>), der Name der Quelldatenbank, die Art des betroffenen Objekts (<b>acTable<\/b>) sowie der Name der Quelltabelle und der Name der zu erstellenden Tabelle oder Verkn&uuml;pfung &#8211; beide aus der Variablen <b>strTabelle<\/b>.<\/p>\n<p>Beim Verkn&uuml;pfen kann der Fehler <b>3845 <\/b>auftreten. Dies geschieht, wenn die Tabelle aus einer Datenbank neuerer Version stammt und Elemente enth&auml;lt, die in der aktuellen Version nicht unterst&uuml;tzt werden (beispielsweise beim Versuch, eine Tabelle mit einem Anlagefeld in eine <b>.mdb<\/b>-Datenbank einzulesen).<\/p>\n<p>Ist dies der Fall, k&ouml;nnen Sie die &uuml;brigen ausgew&auml;hlten Tabellen dennoch importieren oder verkn&uuml;pfen.<\/p>\n<p><b>Anzeige des kompletten Pfades<\/b><\/p>\n<p>Das Listenfeld zeigt ja gegebenenfalls nur die gek&uuml;rzte Fassung der Dateinamen samt Pfad an. Das kann unter Umst&auml;nden hinderlich sein, etwa wenn Sie verschiedene Versionen der gleichen Datenbank in unterschiedlichen Verzeichnissen halten und die entscheidenden Teile des Verzeichnisses gek&uuml;rzt wurden.<\/p>\n<p>Wir haben f&uuml;r diesen Fall vorgesorgt: Das Listenfeld soll den vollst&auml;ndigen Pfad f&uuml;r den aktuell mit der Maus &uuml;berfahrenen Eintrag anzeigen (s. Bild 8). <\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_02\/TabellenVerknuepfen-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Einblenden des kompletten Pfades des aktuellen Eintrags<\/span><\/b><\/p>\n<p>Verantwortlich daf&uuml;r sind die Codezeilen aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-77-anchor\">Listing 9<\/a><\/span>. Das &Uuml;berfahren des Listenfeldes mit der Maus l&ouml;st das Ereignis <b>Bei Mausbewegung <\/b>aus. Die dadurch ausgel&ouml;ste Ereignisprozedur ermittelt mit der API-Funktion <b>GetCursorPos <\/b>zun&auml;chst die aktuelle Mausposition und speichert die Koordinaten im Type <b>pt<\/b>.<\/p>\n<p class=\"listingueberschrift\">Listing 9: Anzeige der vollst&auml;ndigen Pfadnamen beim &Uuml;berfahren eines Eintrags im Listenfeld lstDatenbanken<\/p>\n<pre>Private Type POINTAPI\r\n    X As Long\r\n    Y As Long\r\nEnd Type\r\nPrivate Declare Function GetCursorPos Lib &quot;user32.dll&quot; (ByRef lpPoint As POINTAPI) As Long\r\nPrivate Sub lstDatenbanken_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)\r\n    Dim pt As POINTAPI\r\n    Dim lngCurItem As Long\r\n    Static lngPrevItem As Long\r\n    GetCursorPos pt\r\n    On Error Resume Next\r\n    lngCurItem = Me!lstDatenbanken.accHitTest(pt.X, pt.Y) - 1\r\n    If lngCurItem &gt; -1 And Not lngPrevItem = lngCurItem Then\r\n        Me!lstDatenbanken.ControlTipText = Me!lstDatenbanken.Column(2, lngCurItem)\r\n        lngPrevItem = lngCurItem\r\n    End If\r\nEnd Sub<\/pre>\n<p>Die <b>accHitTest<\/b>-Methode erwartet als Parameter ein Koordinatenpaar, das <b>pt <\/b>mit den Eigenschaften <b>x <\/b>und <b>y <\/b>liefert, und gibt den Index des aktuell &uuml;berfahrenen Eintrags des Listenfeldes zur&uuml;ck.<\/p>\n<p>Ist dieser in der Variablen <b>lngCurItem <\/b>gespeicherte Wert gr&ouml;&szlig;er als <b>-1 <\/b>und entspricht er nicht dem bereits zuvor ermittelten und in <b>lngPrevItem <\/b>gespeicherten Indexwert, weist die Prozedur der Eigenschaft <b>ControlTipText <\/b>den vollst&auml;ndigen Pfad aus der ausgeblendeten dritten Spalte des Listenfeldes zu. Und diese Eigenschaft sorgt eben f&uuml;r das Einblenden dieses Textes.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>LinkAndImportAdmin.mda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{1D7223D9-4430-4401-BFB8-F9B3DE8B7937}\/aiu_879.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der in Access eingebaute Importassistent ist hilfreich, wenn man nur hin und wieder eine Tabelle verkn&uuml;pfen oder importieren m&ouml;chte. Wenn Sie diesen jedoch regelm&auml;&szlig;ig nutzen, werden Sie sich fr&uuml;her oder sp&auml;ter &auml;rgern, dass Sie jedes Mal erneut den Pfad der Quelldatenbank ausw&auml;hlen m&uuml;ssen. Dummerweise merkt sich Access noch nicht einmal den zuletzt verwendeten Pfad. Zeit, einen Ersatz f&uuml;r diesen Assistenten zu stricken &#8211; und zwar in Form eines kleinen Access-Add-Ins. Gleichzeitig erhalten Sie direkt noch einige Know-how rund um das Verkn&uuml;pfen und Importieren von Tabellen per VBA.<\/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":[66022013,662013,44000027],"tags":[],"class_list":["post-55000879","post","type-post","status-publish","format-standard","hentry","category-66022013","category-662013","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>Tabellen verkn&uuml;pfen per Assistent - 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\/Tabellen_verknuepfen_per_Assistent\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tabellen verkn&uuml;pfen per Assistent\" \/>\n<meta property=\"og:description\" content=\"Der in Access eingebaute Importassistent ist hilfreich, wenn man nur hin und wieder eine Tabelle verkn&uuml;pfen oder importieren m&ouml;chte. Wenn Sie diesen jedoch regelm&auml;&szlig;ig nutzen, werden Sie sich fr&uuml;her oder sp&auml;ter &auml;rgern, dass Sie jedes Mal erneut den Pfad der Quelldatenbank ausw&auml;hlen m&uuml;ssen. Dummerweise merkt sich Access noch nicht einmal den zuletzt verwendeten Pfad. Zeit, einen Ersatz f&uuml;r diesen Assistenten zu stricken - und zwar in Form eines kleinen Access-Add-Ins. Gleichzeitig erhalten Sie direkt noch einige Know-how rund um das Verkn&uuml;pfen und Importieren von Tabellen per VBA.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:35:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936\" \/>\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\\\/Tabellen_verknuepfen_per_Assistent\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Tabellen verkn&uuml;pfen per Assistent\",\"datePublished\":\"2020-05-22T21:35:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/\"},\"wordCount\":2873,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/3a02137ca92e43c493ec87443c885936\",\"articleSection\":[\"2\\\/2013\",\"2013\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/\",\"name\":\"Tabellen verkn&uuml;pfen per Assistent - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/3a02137ca92e43c493ec87443c885936\",\"datePublished\":\"2020-05-22T21:35:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/3a02137ca92e43c493ec87443c885936\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/3a02137ca92e43c493ec87443c885936\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_verknuepfen_per_Assistent\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tabellen verkn&uuml;pfen per Assistent\"}]},{\"@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":"Tabellen verkn&uuml;pfen per Assistent - 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\/Tabellen_verknuepfen_per_Assistent\/","og_locale":"de_DE","og_type":"article","og_title":"Tabellen verkn&uuml;pfen per Assistent","og_description":"Der in Access eingebaute Importassistent ist hilfreich, wenn man nur hin und wieder eine Tabelle verkn&uuml;pfen oder importieren m&ouml;chte. Wenn Sie diesen jedoch regelm&auml;&szlig;ig nutzen, werden Sie sich fr&uuml;her oder sp&auml;ter &auml;rgern, dass Sie jedes Mal erneut den Pfad der Quelldatenbank ausw&auml;hlen m&uuml;ssen. Dummerweise merkt sich Access noch nicht einmal den zuletzt verwendeten Pfad. Zeit, einen Ersatz f&uuml;r diesen Assistenten zu stricken - und zwar in Form eines kleinen Access-Add-Ins. Gleichzeitig erhalten Sie direkt noch einige Know-how rund um das Verkn&uuml;pfen und Importieren von Tabellen per VBA.","og_url":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:35:10+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936","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\/Tabellen_verknuepfen_per_Assistent\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Tabellen verkn&uuml;pfen per Assistent","datePublished":"2020-05-22T21:35:10+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/"},"wordCount":2873,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936","articleSection":["2\/2013","2013","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/","url":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/","name":"Tabellen verkn&uuml;pfen per Assistent - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936","datePublished":"2020-05-22T21:35:10+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/3a02137ca92e43c493ec87443c885936"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_verknuepfen_per_Assistent\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Tabellen verkn&uuml;pfen per Assistent"}]},{"@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\/55000879","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=55000879"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000879\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}