{"id":55001241,"date":"2020-06-01T00:00:00","date_gmt":"2020-07-10T09:41:39","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1241"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Verweise_aus_anderer_Datenbank_importieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/","title":{"rendered":"Verweise aus anderer Datenbank importieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn eine Datenbank besch&auml;digt ist, k&ouml;nnen Sie diese oft retten, indem Sie eine neue Datenbank aufsetzen und alle Objekte der alten Datenbank in die neue Datenbank importieren. Leider ber&uuml;cksichtigt die Import-Funktion nicht die Verweise des VBA-Projekts. Je nach der Anzahl der Verweise kann das &Uuml;bertragen der Verweise recht m&uuml;hsam werden. Zum Gl&uuml;ck kann man fast alles automatisieren, was sich sonst &uuml;ber die Benutzeroberfl&auml;che von Access erledigen l&auml;sst. In diesem Fall bauen wir uns ein Add-In, mit dem wir der aktuell ge&ouml;ffneten Datenbank die Verweise einer ausgew&auml;hlten Datenbank hinzuf&uuml;gen k&ouml;nnen.<\/b><\/p>\n<p>Gr&uuml;nde daf&uuml;r, Verweise aus anderen Datenbanken zu importieren, gibt es genug. Einen haben wir bereits genannt &#8211; wenn Sie eine Datenbank bestehend auf einer anderen, gegebenenfalls besch&auml;digten Datenbank neu aufbauen wollen, dann sind die Verweise eines der wenigen Elemente, die Sie nicht mit der eingebauten Importieren-Funktion &uuml;bertragen k&ouml;nnen.<\/p>\n<p>Ein anderer Grund ist die Unzul&auml;nglichkeit des <b>Verweise<\/b>-Dialogs: Wenn dieser f&uuml;r das Quellprojekt beispielsweise Eintr&auml;ge enth&auml;lt, die nicht in der Liste der Verweise enthalten sind, sondern die &uuml;ber den <b>Durchsuchen<\/b>-Dialog hinzugef&uuml;gt wurden, dann m&uuml;ssen Sie diese auch in der Zieldatenbank wieder &uuml;ber den <b>Durchsuchen<\/b>-Dialog hinzuf&uuml;gen.<\/p>\n<p>Wenn der Pfad der Datei hinter dem Verweis wie in Bild 1 etwas l&auml;nger ist, dann k&ouml;nnen Sie den hinteren Teil nicht mehr lesen, weil nur ein geringer Teil des Pfades angezeigt wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_007.png\" alt=\"Zu kleines Textfeld f&uuml;r den Pfad zur Verweisdatei\" width=\"499,6607\" height=\"393,9009\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Zu kleines Textfeld f&uuml;r den Pfad zur Verweisdatei<\/span><\/b><\/p>\n<p><b>Add-In zum Importieren von Verweisen<\/b><\/p>\n<p>Deshalb haben wir ein Add-In entwickelt, das alle g&auml;ngigen Verweise aus einem VBA-Projekt in ein anderes &uuml;bertragen kann. Dieses sieht in Aktion wie in Bild 2 aus. Das Add-In zeigt zun&auml;chst nur die Verweise des VBA-Projekts der Datenbank an, f&uuml;r die das Add-In ge&ouml;ffnet wurde und in welche die Verweise aus einem anderen VBA-Projekt importiert werden sollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_006.png\" alt=\"Das Add-In zum Importieren von Verweisen\" width=\"649,559\" height=\"457,9188\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das Add-In zum Importieren von Verweisen<\/span><\/b><\/p>\n<p>Diese Verweise finden Sie in der rechten Liste unter <b>Verweise der aktuellen Datenbank<\/b>. Wenn Sie mit dem <b>Datei ausw&auml;hlen<\/b>-Dialog die Datenbankdatei ausgew&auml;hlt haben, aus der die Verweise eingelesen werden sollen, zeigt das linke Listenfeld unter <b>Verweise der gew&auml;hlten Datenbank <\/b>alle Verweise der Quelldatenbank an.<\/p>\n<p>Nun haben Sie verschiedene M&ouml;glichkeiten, die Verweise aus der linken Liste in die rechte Liste zu &uuml;bertragen &#8211; und diese gleichzeitig zur aktuell ge&ouml;ffneten Datenbank hinzuzuf&uuml;gen:<\/p>\n<ul>\n<li>Doppelklick auf den jeweiligen Listeneintrag<\/li>\n<li>Markieren des zu &uuml;bertragenden Verweises und Bet&auml;tigen der Schaltfl&auml;che mit dem Pfeil<\/li>\n<li>Klicken auf die Schaltfl&auml;che mit dem Doppelpfeil, um alle Verweise zu &uuml;bertragen, die in der Quelldatenbank, aber nicht in der Zieldatenbank enthalten sind.<\/li>\n<\/ul>\n<p>Und Sie k&ouml;nnen auch noch Verweise aus der Zieldatenbank entfernen, indem Sie doppelt auf diese klicken.<\/p>\n<p><b>Entwerfen des Formulars<\/b><\/p>\n<p>Das Formular <b>frmVerweiseImportieren<\/b> sieht in der Entwurfsansicht wie in Bild 3 aus. Das Textfeld zur Eingabe des Pfades der Quelldatenbank hei&szlig;t <b>txtImportVon<\/b>, die Schaltfl&auml;che zum &Ouml;ffnen des <b>Datei ausw&auml;hlen<\/b>-Dialogs hei&szlig;t <b>cmdDateiauswahl<\/b>. Die beiden Listenfelder nennen wir kurz <b>lstQuelle <\/b>und <b>lstZiel<\/b>. Die beiden Schaltfl&auml;chen zum &Uuml;bertragen eines oder aller Verweise hei&szlig;en <b>cmdHinzufuegen <\/b>und <b>cmdAlleHinzufuegen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_008.png\" alt=\"Entwurf des Formulars\" width=\"649,559\" height=\"488,5812\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Entwurf des Formulars<\/span><\/b><\/p>\n<p><b>Variablen vorbereiten<\/b><\/p>\n<p>Im oberen Teil des Klassenmoduls des Formulars <b>frmVerweiseImportieren <\/b>deklarieren wir einige modulweit verf&uuml;gbare Variablen. Einige davon werden mit dem Typ <b>VBIDE.VBProject <\/b>versehen. Um diese nutzen zu k&ouml;nnen, ben&ouml;tigen wir einen Verweis auf die Bibliothek <b>Microsoft Visual Basic for Applications Extensibility 5.3 <\/b>(siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_009.png\" alt=\"Verweis auf die Bibliothek zur Programmierung der VBIDE hinzuf&uuml;gen\" width=\"499,6607\" height=\"393,9009\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Verweis auf die Bibliothek zur Programmierung der VBIDE hinzuf&uuml;gen<\/span><\/b><\/p>\n<p>Die Variablendeklarationen sehen wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strAddInName<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Private <\/span>m_VBProjectAddIn<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject\r\n<span style=\"color:blue;\">Private <\/span>m_VBProjectZiel<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject\r\n<span style=\"color:blue;\">Dim <\/span>objVBProjectQuelle<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject<\/pre>\n<p>Die beiden Variablen zum Speichern der Verweise auf die VBA-Projekte von Add-In und Zieldatenbank deklarieren wir als Member-Variablen, weil wir diese sp&auml;ter &uuml;ber <b>Property Get<\/b>-Prozeduren f&uuml;llen und bereitstellen.<\/p>\n<p><b>F&uuml;llen des Listenfeldes mit den vorhandenen Verweisen<\/b><\/p>\n<p>Beim Laden des Formulars wird die folgende Prozedur ausgel&ouml;st, die wiederum einige weitere Routinen ansteuert:<\/p>\n<pre>&lt;b&gt;Private Sub Form_Load()\r\n&lt;b&gt;    VerweiseEinlesen objVBProjectZiel, Me!lstZiel\r\n&lt;b&gt;End Sub&lt;\/b&gt;<\/pre>\n<p><b>Referenzieren von AddIn- und Zieldatenbank<\/b><\/p>\n<p>Wir greifen in den nachfolgend vorgestellten Prozeduren auf die VBA-Projekte der Add-In-Datenbank, der Datenbank, von der aus wir das Add-In starten und der Datenbank, aus der wir die Verweise importieren wollen, zu. Zwei davon referenzieren wir durch die folgenden <b>Property Get<\/b>-Prozeduren, die sicherstellen, dass auch im Falle eines Fehlers immer eine Instanz geholt werden kann.<\/p>\n<p>Die Prozeduren sehen wir folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Property Get <\/span>VBProjectZiel()<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject\r\n     <span style=\"color:blue;\">If <\/span>m_VBProjectZiel Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> m_VBProjectZiel = GetVBProject(CurrentDb.Name)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> VBProjectZiel = m_VBProjectZiel\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>VBProjectAddIn()<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject\r\n     <span style=\"color:blue;\">If <\/span>m_VBProjectAddIn Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> m_VBProjectAddIn = GetVBProject(CodeDb.Name)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> VBProjectAddIn = m_VBProjectAddIn\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p>Die Variablen <b>m_VBProjectZiel <\/b>und <b>m_VBProjectAddIn <\/b>f&uuml;llen wir mit der Funktion <b>GetVBProject<\/b>, der wir den Pfad zu der Datenbankdatei &uuml;bergeben, zu der das VBA-Projekt geh&ouml;rt (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>GetVBProject(strPath<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject\r\n     <span style=\"color:blue;\">Dim <\/span>objVBProject<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject\r\n     For Each objVBProject In VBE.VBProjects\r\n         <span style=\"color:blue;\">If <\/span>objVBProject.FileName = strPath<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Exit For<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objVBProject\r\n     <span style=\"color:blue;\">Set<\/span> GetVBProject = objVBProject\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Referenzieren eines VBA-Projekts<\/span><\/b><\/p>\n<p>Wenn Sie von einer Datenbankdatei aus einer Add-In-Datenbank &ouml;ffnen, befinden sich im VBA-Editor bereits zwei VBA-Projekte (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_010.png\" alt=\"VBA-Projekte der ge&ouml;ffneten Datenbank und der Add-In-Datenbank\" width=\"499,6607\" height=\"296,0952\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: VBA-Projekte der ge&ouml;ffneten Datenbank und der Add-In-Datenbank<\/span><\/b><\/p>\n<p>Um herauszufinden, welches VBA-Projekt zum Add-In geh&ouml;rt, durchl&auml;uft die Funktion in einer <b>For Each<\/b>-Schleife alle <b>VBProject<\/b>-Elemente, die aktuell im VBA-Editor verf&uuml;gbar sind.<\/p>\n<p>Dabei vergleicht sie jeweils den Dateinamen des VBA-Projekts, der mit dem Pfad der Datenbankdatei, den wir mit dem Parameter <b>strPath <\/b>&uuml;bergeben haben, &uuml;bereinstimmen muss. Ist das in der <b>For Each<\/b>-Schleife der Fall, verlassen wir diese. Das aktuell in <b>objVBProject<\/b> befindliche VBA-Projekt wird dann als das zu der Datenbank aus <b>strPath<\/b> geh&ouml;rende VBA-Projekt zur&uuml;ckgegeben.<\/p>\n<p>Auf diese Weise holen wir zwei Verweise auf das VBA-Projekt der Add-In-Datenbank und zu der Datenbank, von der aus das Add-In gestartet wurde und in welche die Verweise einer anderen Datenbank importiert werden sollen.<\/p>\n<p>F&uuml;r das Ermitteln des Verweises auf die Add-In-Datenbank &uuml;bernehmen wir den Pfad der Datenbank, den wir mit dem Ausdruck <b>CodeDb.Name <\/b>ermitteln.<\/p>\n<p>Das VBA-Projekt der Datenbank, die das Add-In ge&ouml;ffnet hat, ermitteln wir durch die &Uuml;bergabe des Pfades aus <b>CurrentDb.Name <\/b>an die Funktion <b>GetVBProject<\/b>.<\/p>\n<p><b>Einlesen der aktuellen Verweise<\/b><\/p>\n<p>Die Prozedur <b>VerweiseEinlesen <\/b>liest Verweise des VBA-Projekts der mit dem ersten Parameter angegebenen VBA-Projekt ein und f&uuml;gt diese zu dem mit dem zweiten Parameter angegebenen Listenfeld hinzu.<\/p>\n<p>Hierzu m&uuml;ssen wir zun&auml;chst die Listenfelder vorbereiten. Diese werden nicht an Tabellen oder Abfragen gebunden, sondern sollen ihre Daten aus Wertlisten beziehen.<\/p>\n<p>Daher stellen wir die Eigenschaft <b>Herkunftstyp <\/b>f&uuml;r beide Listenfelder auf <b>Wertliste <\/b>ein. Diese Wertlisten sollen in der ersten Spalte den Namen des Verweises anzeigen und in der zweiten und dritten Spalte die GUID und den Pfad zur referenzierten Bibliothek.<\/p>\n<p>Deshalb stellen wir die Eigenschaft <b>Spaltenanzahl <\/b>auf <b>3 <\/b>und <b>Spaltenbreiten <\/b>auf <b>;0cm;0cm <\/b>ein &#8211; so wird die erste Spalte &uuml;ber die komplette Breite angezeigt und die zweite und die dritte Spalte werden ausgeblendet.<\/p>\n<p>Die Prozedur <b>VerweiseEinlesen <\/b>aus Listing 2 leert das mit dem Parameter <b>lst <\/b>&uuml;bergebene Listenfeld zun&auml;chst. Dann durchl&auml;uft es alle Verweise der Auflistung <b>Reference <\/b>des VBA-Projekts aus <b>objVBProject<\/b>, das wieder mit <b>GetVBProject <\/b>ermittelt wird. <\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>VerweiseEinlesen(objVBProject<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject, lst<span style=\"color:blue;\"> As <\/span>ListBox)\r\n     <span style=\"color:blue;\">Dim <\/span>objReference<span style=\"color:blue;\"> As <\/span>VBIDE.Reference\r\n     <span style=\"color:blue;\">Dim <\/span>strEintrag<span style=\"color:blue;\"> As String<\/span>\r\n     lst.RowSource = \"\"\r\n     For Each objReference In objVBProject.References\r\n         strEintrag = objReference.Description\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         strEintrag = strEintrag & \";\" & objReference.Guid\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strEintrag = strEintrag & \";\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         Err.Clear\r\n         strEintrag = strEintrag & \";\" & objReference.FullPath\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strEintrag = strEintrag & \";\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         lst.AddItem strEintrag\r\n     <span style=\"color:blue;\">Next<\/span> objReference\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Einlesen der Verweise des VBA-Projekts einer Datenbank<\/span><\/b><\/p>\n<p>Dann f&uuml;gt sie der Variablen <b>strEintrag <\/b>den Beschreibungstext aus der Eigenschaft <b>Description <\/b>des Verweises hinzu &#8211; dies ist der Inhalt der ersten Spalte. Danach schalten wir die eingebaute Fehlerbehandlung aus, um <b>strEintrag <\/b>um ein Semikolon und den Wert der Eigenschaft <b>Guid <\/b>zu erweitern. Ist dieser leer, wird ein Fehler ausgel&ouml;st. In diesem Fall f&uuml;gen wir einfach nur ein Semikolon zu <b>strEintrag <\/b>hinzu &#8211; die zweite Spalte dieses Listenfeldeintrags bliebe also leer. Danach gehen wir auf die gleiche Weise vor, um den Inhalt der Eigenschaft <b>FullPath <\/b>des Verweises zu <b>strEintrag <\/b>hinzuzuf&uuml;gen.<\/p>\n<p>Danach f&uuml;gt die Prozedur den Inhalt von <b>strEintrag <\/b>mit der Methode <b>AddItem <\/b>des Listenfeldes als neue Zeile zum Listenfeld hinzu.<\/p>\n<p>Damit haben wir nun das rechte Listenfeld gef&uuml;llt und der Zeitpunkt ist gekommen, wo der Benutzer die Datenbank ausw&auml;hlen soll, aus der Verweise importiert werden sollen.<\/p>\n<p><b>Datenbank mit zu importierenden Verweisen ausw&auml;hlen<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>cmdDateiauswahl <\/b>l&ouml;st beim Anklicken die Prozedur aus Listing 3 aus. Diese merkt sich zun&auml;chst den Namen des VBA-Projekts der Add-In-Datenbank in der Variablen <b>strAddInName<\/b>. Dann &ouml;ffnet sie einen <b>Datei ausw&auml;hlen<\/b>-Dialog, der nur Access-Datenbanken anzeigt. Die dazu notwendige Funktion <b>OpenFileName <\/b>finden Sie im Modul <b>mdlTools<\/b>.  Das Ergebnis des <b>OpenFileName<\/b>-Aufrufs nach der Auswahl durch den Benutzer landet im Textfeld <b>txtImportVon<\/b>.<\/p>\n<pre>Private Sub cmdDateiauswahl_Click()\r\n    strAddInName = VBProjectAddIn.Name\r\n    Me!txtImportVon = OpenFileName(CurrentProject.Path, \"Datenbank mit zu importierenden Verweisen w&auml;hlen\", _\r\n\"Access-DB (*.mdb,*.accdb,*.mda,*.accda)|Alle DAteien (*.*)\")\r\n    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n    VBProjectAddIn.References.AddFromFile Me!txtImportVon\r\n    If <span style=\"color:blue;\">Not<\/span> Err.Number = 0 Then\r\n        VBProjectAddIn.Name = strAddInName & \"_\"\r\n        VBProjectAddIn.References.AddFromFile Me!txtImportVon\r\n    End If\r\n<span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">Set<\/span> objVBProjectQuelle = GetVBProject(Me!txtImportVon)\r\n    VerweiseEinlesen objVBProjectQuelle, Me!lstQuelle\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Ausw&auml;hlen der Datenbank zum Importieren der Verweise<\/span><\/b><\/p>\n<p>Nun wollen wir die Verweise des VBA-Projekts dieser Datenbank auslesen. Dazu binden wir das VBA-Projekt dieser Datenbank als Verweis in das VBA-Projekt der Add-In-Datenbank ein.<\/p>\n<p>Das erledigen wir in der folgenden Anweisung, wo wir der <b>References<\/b>-Auflistung des aktuellen VBA-Projekts aus <b>objVBProjectAddIn<\/b>, also des Add-In-Projekts, einen Verweis auf die Datenbank zu, deren Verweise wir importieren wollen.<\/p>\n<p>Tritt dabei ein Fehler auf, liegt es vermutlich daran, dass der Name des zu referenzierenden Projekts mit dem Namen des Add-In-VBA-Projekts &uuml;bereinstimmt &#8211; was normalerweise nicht passieren sollte, au&szlig;er die Datenbank hei&szlig;t ebenfalls prjVerweiseImportieren wie das VBA-Projekt unseres Add-Ins. Der resultierende Fehler lautet <b>Name steht in Konflikt mit vorhandenem Modul, Projekt oder vorhandener Objektbibliothek<\/b>.<\/p>\n<p>In diesem Fall passen wir den Namen des VBA-Projekts aus <b>objVBProjectAddIn <\/b>an, indem wir einen Unterstrich an den Projektnamen anh&auml;ngen. Und nun wird auch klar, warum wir weiter oben den Projektnamen in der Variablen <b>strAddInName <\/b>gespeichert haben &#8211; damit wir den Namen des VBA-Projekts nach Abschluss der Arbeit mit dem Add-In wieder in den vorherigen Zustand zur&uuml;ckversetzen k&ouml;nnen.<\/p>\n<p>Im Projekt-Explorer im VBA-Editor finden Sie nun sogar gleich drei VBA-Projekte vor &#8211; das der aktuell ge&ouml;ffneten Datenbank, das f&uuml;r das Add-In und das der Datenbank, deren Verweise importiert werden sollen (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_012.png\" alt=\"Verweise auf drei VBA-Projekte gleichzeitig im VBA-Editor\" width=\"499,6607\" height=\"317,4023\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Verweise auf drei VBA-Projekte gleichzeitig im VBA-Editor<\/span><\/b><\/p>\n<p>Dann weisen wir der Variablen <b>objVBProjectQuelle <\/b>das VBA-Projekt zu aus der Liste der aktuell verf&uuml;gbaren VBA-Projekte zu, das den gleichen Dateinamen hat wie die Datei, die der Benutzer &uuml;ber den <b>Datei ausw&auml;hlen<\/b>-Dialog selektiert hat.<\/p>\n<p>Schlie&szlig;lich rufen wir noch die Prozedur <b>VerweiseEinlesen <\/b>auf. Dabei geben wir mit dem ersten Parameter einen Verweis auf das VBA-Projekt mit den Verweisen und als zweiten Parameter den Verweis auf das linke Listenfeld an (<b>lstQuelle<\/b>).<\/p>\n<p>Danach zeigen nun beide Listenfelder die Verweise der jeweiligen Datenbanken an und wir k&ouml;nnen uns um die Programmierung f&uuml;r den Import oder f&uuml;r das Entfernen von Verweisen aus der aktuell ge&ouml;ffneten Datenbank k&uuml;mmern.<\/p>\n<p><b>Einzelnen Verweis importieren<\/b><\/p>\n<p>Den Import eines einzelnen Verweises aus der Quelldatenbank erledigen Sie beispielsweise durch einen Klick auf die Schaltfl&auml;che <b>cmdHinzufuegen<\/b>.<\/p>\n<p>Dies l&ouml;st die folgende Ereignisprozedur aus:<\/p>\n<pre>Private Sub cmdHinzufuegen_Click()\r\n    If <span style=\"color:blue;\">Not<\/span> IsNull(Me!lstQuelle) Then\r\n        VerweisHinzufuegen Me!lstQuelle.Column(0), Me!lstQuelle.Column(1), Me!lstQuelle.Column(2)\r\n    End If\r\nEnd Sub<\/pre>\n<p>Hier rufen wir die Prozedur <b>VerweisHinzufuegen <\/b>auf, der wir die Inhalte der drei Spalten des aktuell im Listenfeld markierten Eintrags &uuml;bergeben &#8211; vorausgesetzt, der Wert des Listenfeldes ist zu diesem Zeitpunkt nicht Null, was bedeutet, dass kein Eintrag im Listenfeld markiert ist.<\/p>\n<p>Die hier aufgerufene Prozedur <b>VerweisHinzufuegen<\/b> finden Sie in Listing 4. Die Prozedur nimmt die &uuml;bergebenen Werte aus dem Listeneintrag mit den beiden Parametern <b>strGUID <\/b>und <b>strPfad <\/b>entgegen. Sie verwendet zwei Variablen, um auf eine Auflistung der Referenzen des Zielprojekts sowie auf das neu erstellte <b>Reference<\/b>-Objekt zu verweisen. Mit <b>objReferences <\/b>referenziert die Prozedur die <b>References<\/b>-Liste des Zielprojekts:<\/p>\n<pre>Private Sub VerweisHinzufuegen(strBezeichnung<span style=\"color:blue;\"> As String<\/span>, strGUID<span style=\"color:blue;\"> As String<\/span>, strPfad<span style=\"color:blue;\"> As String<\/span>)\r\n    Dim objReferences<span style=\"color:blue;\"> As <\/span>VBIDE.References\r\n    Dim objReference<span style=\"color:blue;\"> As <\/span>VBIDE.Reference\r\n    Dim strEintrag<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">    Set<\/span> objReferences = VBProjectZiel.References\r\n    If <span style=\"color:blue;\">Len<\/span>(strGUID) &gt; 0 Then\r\n        On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n<span style=\"color:blue;\">        Set<\/span> objReference = objReferences.AddFromGuid(strGUID, 0, 0)\r\n    End If\r\n    If objReference Is Nothing Then\r\n        If <span style=\"color:blue;\">Len<\/span>(strPfad) &gt; 0 Then\r\n            On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n<span style=\"color:blue;\">            Set<\/span> objReference = objReferences.AddFromFile(strPfad)\r\n        End If\r\n    End If\r\n<span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n    If objReference Is Nothing Then\r\n<span style=\"color:blue;\">        MsgBox<\/span> \"Der Verweis '\" & strBezeichnung & \"' konnte nicht hinzugef&uuml;gt werden.\", vbOKOnly + <span style=\"color:blue;\">vbCr<\/span>itical, _\r\n            \"Verweis nicht hinzugef&uuml;gt\"\r\n    Else\r\n        strEintrag = objReference.Description\r\n        On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n        strEintrag = strEintrag & \";\" & objReference.Guid\r\n        If <span style=\"color:blue;\">Not<\/span> Err.Number = 0 Then\r\n            strEintrag = strEintrag & \";\"\r\n        End If\r\n        Err.Clear\r\n        strEintrag = strEintrag & \";\" & objReference.FullPath\r\n        If <span style=\"color:blue;\">Not<\/span> Err.Number = 0 Then\r\n            strEintrag = strEintrag & \";\"\r\n        End If\r\n<span style=\"color:blue;\">        On Error GoTo<\/span> 0\r\n        Me!lstZiel.AddItem strEintrag\r\n    End If\r\nEnd Sub<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Hinzuf&uuml;gen eines Verweises<\/span><\/b><\/p>\n<pre>    Dim objReferences<span style=\"color:blue;\"> As <\/span>VBIDE.References\r\n    Dim objReference<span style=\"color:blue;\"> As <\/span>VBIDE.Reference\r\n    Dim strEintrag<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> objReferences = VBProjectZiel.References&lt;\/b&gt;<\/pre>\n<p>Dann pr&uuml;ft sie, ob <b>strGUID <\/b>vorhanden ist. Falls ja, f&uuml;gt sie die Bibliothek mit dieser GUID mit der Methode <b>AddFromGUID<\/b> zu den Verweisen des Zielprojekts hinzu &#8211; allerdings bei deaktivierter Fehlerbehandlung:<\/p>\n<pre>     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strGUID) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objReference =  objReferences.AddFromGuid(strGUID, 0, 0)\r\n     <span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Ist <b>objReference <\/b>danach leer, war entweder keine GUID vorhanden oder der Verweis konnte damit nicht hinzugef&uuml;gt werden. In diesem Fall pr&uuml;fen wir, ob <b>strPfad<\/b> einen Pfad liefert. Falls ja, versucht die Prozedur, den Verweis mit <b>AddFromFile <\/b>hinzuzuf&uuml;gen:<\/p>\n<pre>     <span style=\"color:blue;\">If <\/span>objReference Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strPfad) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objReference =  objReferences.AddFromFile(strPfad)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Danach pr&uuml;fen wir nochmal, ob <b>objReference <\/b>mit einem Verweis gef&uuml;llt ist. Falls nicht, erscheint eine entsprechende Meldung:<\/p>\n<pre>     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">If <\/span>objReference Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Der Verweis '\" & strBezeichnung _\r\n             & \"' konnte nicht hinzugef&uuml;gt werden.\", _\r\n             vbOKOnly + <span style=\"color:blue;\">vbCr<\/span>itical, _\r\n             \"Verweis nicht hinzugef&uuml;gt\"<\/pre>\n<p>Ist jedoch ein Verweis vorhanden, dann wird dieser noch als neuer Eintrag in das Listenfeld der Verweise der aktuellen Datenbank eingef&uuml;gt. Dabei schreiben wir zun&auml;chst die Bezeichnung aus der <b>Description<\/b>-Eigenschaft in die String-Variable <b>strEintrag<\/b>:<\/p>\n<pre>     <span style=\"color:blue;\">Else<\/span>\r\n         strEintrag = objReference.Description<\/pre>\n<p>Danach f&uuml;gen wir, sofern diese Daten vorhanden sind, die Inhalt der Eigenschaften <b>Guid <\/b>und <b>FullPath <\/b>durch Semikola getrennt zum bereits vorhandenen Inhalt von <b>strEintrag <\/b>hinzu:<\/p>\n<pre>         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         strEintrag = strEintrag & \";\" & objReference.Guid\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strEintrag = strEintrag & \";\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         Err.Clear\r\n         strEintrag = strEintrag & \";\"  & objReference.FullPath\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strEintrag = strEintrag & \";\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0<\/pre>\n<p>Schlie&szlig;lich schreiben wir noch <b>strEintrag <\/b>als neue Zeile in das Listelfeld <b>lstZiel<\/b>:<\/p>\n<pre>         Me!lstZiel.AddItem strEintrag\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Verweis per Doppelklick hinzuf&uuml;gen<\/b><\/p>\n<p>Die zweite M&ouml;glichkeit, einen Verweis aus der Quelldatenbank zur Zieldatenbank hinzuzuf&uuml;gen, ist der Doppelklick auf einen der Eintr&auml;ge des Listenfeldes f&uuml;r die Verweise der Quelldatenbank. Dies l&ouml;st die folgende Prozedur auf, die wiederum die Routine <b>VerweisHinzufuegen <\/b>aufruft:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstQuelle_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!lstQuelle)<span style=\"color:blue;\"> Then<\/span>\r\n         VerweisHinzufuegen Me!lstQuelle.Column(0),  Me!lstQuelle.Column(1), Me!lstQuelle.Column(2)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Alle nicht vorhandenen Verweise importieren<\/b><\/p>\n<p>Der Anlass, diese L&ouml;sung zu programmieren, war eine korrupte Datenbank, die komplett neu aufgebaut werden musste. Eine neue Datenbank zu erstellen und alle Datenbankobjekte zu importieren ist schnell erledigt, aber dann die Verweise manuell neu hinzuzuf&uuml;gen kann je nach Anzahl der Verweise aufwendig sein.<\/p>\n<p>Daher nun die Funktion, mit der Sie der Zielanwendung alle Verweise hinzuf&uuml;gen, die in der Quellanwendung enthalten sind, aber nicht in der Zielanwendung. Diese l&ouml;sen wir mit der Schaltfl&auml;che <b>cmdAlleHinzufuegen <\/b>aus, die wir wie folgt implementieren:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAlleHinzufuegen_Click()\r\n     AlleVerweiseHinzufuegen\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die dadurch aufgerufene Prozedur ist sehr einfach aufgebaut, da Sie einfach alle Eintr&auml;ge des linken Listenfeldes durchl&auml;uft und f&uuml;r jeden Eintrag einmal die Prozedur <b>VerweisHinzufuegen <\/b>aufruft:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>AlleVerweiseHinzufuegen()\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     For i = 0 To Me!lstQuelle.ListCount - 1\r\n         VerweisHinzufuegen Me!lstQuelle.Column(0),  Me!lstQuelle.Column(1, i),  Me!lstQuelle.Column(2, i)\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dabei durchlaufen wir eine <b>For&#8230;Next<\/b>-Schleife mit der Laufvariablen <b>i <\/b>&uuml;ber den Index <b>0 <\/b>bis zur Anzahl der Listenelemente minus 1, da der Index 0-basiert ist.<\/p>\n<p>F&uuml;r den Zugriff auf die Zeilen\/Spalten im Listenfeld verwenden wir als ersten Parameter der <b>Column<\/b>-Eigenschaft die Spalte und mit dem zweiten die Zeile. Damit rufen wir dann die Prozedur <b>VerweisHinzufuegen <\/b>auf, die wir ja bereits weiter oben beschrieben haben.<\/p>\n<p>Kleiner Haken dabei: Es wird f&uuml;r jedes Element, das nicht hinzugef&uuml;gt werden kann, eine Meldung ausgegeben &#8211; auch f&uuml;r solche Elemente, die bereits in der Zieldatenbank enthalten sind, was regelm&auml;&szlig;ig der Fall ist, da es einige eingebaute Verweise gibt, die immer vorhanden sind. Und es kann ja auch sein, dass Sie einen nicht eingebauten Verweis bereits zum Zielprojekt hinzugef&uuml;gt haben.<\/p>\n<p>Also verwenden wir eine Funktion, die pr&uuml;ft, ob ein bestimmter Verweis bereits in der Liste der Verweise des angegebenen VBA-Projekts enthalten ist (siehe Listing 5). Dieser Funktion &uuml;bergeben wir einen Verweis auf das zu untersuchende VBA-Projekt sowie die GUID und den Pfad zur Bibliotheksdatei. Dann durchlaufen wir in einer <b>For Each<\/b>-Schleife alle Verweise und pr&uuml;fen, ob dieser Verweis entweder die &uuml;bergebene GUID oder den &uuml;bergebenen Pfad aufweist.<\/p>\n<pre>&lt;b&gt;Public Function VerweisVorhanden(objVBProject<span style=\"color:blue;\"> As <\/span>VBIDE.VBProject, strGUID<span style=\"color:blue;\"> As String<\/span>, strFullPath<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n&lt;b&gt;    Dim objReferences<span style=\"color:blue;\"> As <\/span>VBIDE.References\r\n&lt;b&gt;    Dim objReference<span style=\"color:blue;\"> As <\/span>VBIDE.Reference\r\n&lt;b&gt;    <span style=\"color:blue;\">Set<\/span> objReferences = objVBProject.References\r\n&lt;b&gt;    For Each objReference In objReferences\r\n&lt;b&gt;        If objReference.Guid = strGUID Or objReference.FullPath = strFullPath Then\r\n&lt;b&gt;            VerweisVorhanden = <span style=\"color:blue;\">True<\/span>\r\n&lt;b&gt;            <span style=\"color:blue;\">Exit Function<\/span>\r\n&lt;b&gt;        End If\r\n&lt;b&gt;    <span style=\"color:blue;\">Next<\/span> objReference\r\n&lt;b&gt;End Function&lt;\/b&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Pr&uuml;fen, ob ein Verweis bereits vorhanden ist<\/span><\/b><\/p>\n<p>Falls wir einen passenden Verweis gefunden haben, verlassen wir die Funktion und geben den Wert <b>True <\/b>als Funktionswert zur&uuml;ck. Damit statten wir nun noch die Prozedur <b>VerweisHinzufuegen <\/b>aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>VerweisHinzufuegen(...)\r\n     ...\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> VerweisVorhanden(VBProjectZiel, strGUID,  strFullPath)<span style=\"color:blue;\"> Then<\/span>\r\n         ...\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Vorhandene Verweise entfernen<\/b><\/p>\n<p>Wir wollen auch noch eine Funktion anbieten, mit welcher der Benutzer Verweise entfernen kann. Diese soll durch einen Doppelklick auf den jeweiligen Listeneintrag im Listenfeld <b>lstZiel <\/b>ausgel&ouml;st werden. Hier pr&uuml;fen wir wieder, ob der Benutzer &uuml;berhaupt auf einen Eintrag geklickt hat:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstZiel_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!lstZiel)<span style=\"color:blue;\"> Then<\/span>\r\n         VerweisEntfernen Nz(Me!lstZiel.Column(1), \"\"),  Nz(Me!lstZiel.Column(2), \"\")\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>VerweisEntfernen <\/b>finden Sie in Listing 6. Sie erwartet die GUID und den Pfad zu dem zu entfernenden Verweis. Die Prozedur durchl&auml;uft eine Schleife aller in der Zieldatenbank referenzierten Bibliotheken. Findet sie eine Bibliothek, deren GUID oder Pfad mit den &uuml;bergebenen Daten &uuml;bereinstimmt, stellt die Prozedur die Variable <b>bolVerweisGefunden <\/b>auf <b>True <\/b>ein und verl&auml;sst die Schleife. Die Variable <b>objReference <\/b>enth&auml;lt dann den zu entfernenden Verweis.<\/p>\n<pre>&lt;b&gt;Private Sub VerweisEntfernen(strGUID<span style=\"color:blue;\"> As String<\/span>, strFullPath<span style=\"color:blue;\"> As String<\/span>)\r\n&lt;b&gt;    Dim objReference<span style=\"color:blue;\"> As <\/span>VBIDE.Reference\r\n&lt;b&gt;    Dim objReferences<span style=\"color:blue;\"> As <\/span>VBIDE.References\r\n&lt;b&gt;    Dim bolVerweisGefunden<span style=\"color:blue;\"> As Boolean<\/span>\r\n&lt;b&gt;    <span style=\"color:blue;\">Set<\/span> objReferences = VBProjectZiel.References\r\n&lt;b&gt;    For Each objReference In objReferences\r\n&lt;b&gt;        If objReference.FullPath = strFullPath Or objReference.Guid = strGUID Then\r\n&lt;b&gt;            bolVerweisGefunden = <span style=\"color:blue;\">True<\/span>\r\n&lt;b&gt;            <span style=\"color:blue;\">Exit For<\/span>\r\n&lt;b&gt;        End If\r\n&lt;b&gt;    <span style=\"color:blue;\">Next<\/span> objReference\r\n&lt;b&gt;    If bolVerweisGefunden = <span style=\"color:blue;\">True<\/span> Then\r\n&lt;b&gt;        If <span style=\"color:blue;\">Not<\/span> objReference Is Nothing Then\r\n&lt;b&gt;            objReferences.Remove objReference\r\n&lt;b&gt;        End If\r\n&lt;b&gt;        ListBoxLeeren Me!lstZiel\r\n&lt;b&gt;        VerweiseEinlesen VBProjectZiel, Me!lstZiel\r\n&lt;b&gt;    End If\r\n&lt;b&gt;End Sub<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Entfernen eines Verweises<\/span><\/b><\/p>\n<p>Die folgende <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft, ob <b>bolVerweisGefunden <\/b>den Wert <b>True <\/b>hat. In diesem Fall entfernt die Prozedur den Verweis mit der <b>Remove<\/b>-Methode, leert das <b>ListBox<\/b>-Steuerelement mit der Funktion <b>ListBoxLeeren <\/b>und liest die Verweise der Zieldatenbank erneut ein.<\/p>\n<p><b>Hilfsfunktion zum Leeren von Listboxen<\/b><\/p>\n<p>Die oben verwendete Hilfsfunktion <b>ListBoxLeeren <\/b>sieht wie folgt aus und durchl&auml;uft lediglich alle Elemente einer ListBox in einer Schleife, bis in der Schleife alle Elemente gel&ouml;scht wurden:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ListBoxLeeren(lst<span style=\"color:blue;\"> As <\/span>ListBox)\r\n&lt;b&gt;    Do While lst.ListCount &gt; 0\r\n&lt;b&gt;        lst.RemoveItem 0\r\n&lt;b&gt;    <span style=\"color:blue;\">Loop<\/span>\r\n&lt;b&gt;End Sub<\/pre>\n<p><b>Formular schlie&szlig;en<\/b><\/p>\n<p>Zum Schlie&szlig;en des Formulars stellen wir die Schaltfl&auml;che <b>cmdOK <\/b>bereit:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Beim Schlie&szlig;en wird noch diese Ereignisprozedur ausgef&uuml;hrt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     AlleDBVerweiseEntfernen\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strAddInName) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         VBProjectAddIn.Name = strAddInName\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die hier aufgerufene Prozedur <b>AlleDBVerweiseEntfernen <\/b>schauen wir uns weiter unten an. Sie soll die durch das Add-In zum Add-In-Projekt hinzugef&uuml;gten Verweise auf das VBA-Projekt der Quelldatenbank wieder entfernen.<\/p>\n<p>Die folgende <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft, ob <b>strAddInName <\/b>einen Wert enth&auml;lt und tr&auml;gt diesen gegebenenfalls wieder als Namen des VBA-Projekts des Add-Ins ein.<\/p>\n<p><b>Entfernen von Verweisen auf andere Datenbanken<\/b><\/p>\n<p>Die Routine namens <b>AlleDBVerweiseEntfernen <\/b>f&uuml;hrt Aufr&auml;umarbeiten durch. Die Prozedur durchl&auml;uft alle Verweise des VBA-Projekts der Add-In-Datenbank. Dabei pr&uuml;ft sie, ob der Pfad eine Datei enth&auml;lt, die mit <b>.mdb<\/b>, <b>.mda<\/b>, <b>.accdb <\/b>oder <b>.accda <\/b>endet. Damit zielen wir auf die Quelldatenbank mit den Verweisen ab, die wir nach dem Ausw&auml;hlen dieser Datenbank &uuml;ber den <b>Datei ausw&auml;hlen<\/b>-Dialog als Verweise in das VBA-Projekt der Add-In-Datenbank einbinden, um auf die enthaltenen Verweise zugreifen zu k&ouml;nnen, ohne die Quelldatenbank &ouml;ffnen zu m&uuml;ssen.<\/p>\n<p>Findet die Prozedur einen solchen Verweis, entfernen wir diesen mit der <b>Remove<\/b>-Methode der <b>References<\/b>-Auflistung (siehe Listing 7).<\/p>\n<pre>&lt;b&gt;Private Sub AlleDBVerweiseEntfernen()\r\n&lt;b&gt;    Dim objReference<span style=\"color:blue;\"> As <\/span>VBIDE.Reference\r\n&lt;b&gt;    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n&lt;b&gt;    For Each objReference In VBProjectAddIn.References\r\n&lt;b&gt;        If <span style=\"color:blue;\">Right<\/span>(objReference.FullPath, 4) = \".mdb\" Or <span style=\"color:blue;\">Right<\/span>(objReference.FullPath, 4) = \".mda\" _\r\n&lt;b&gt;                Or <span style=\"color:blue;\">Right<\/span>(objReference.FullPath, 6) = \".accdb\" Or <span style=\"color:blue;\">Right<\/span>(objReference.FullPath, 6) = \".accda\" Then\r\n&lt;b&gt;            VBProjectAddIn.References.Remove objReference\r\n&lt;b&gt;        End If\r\n&lt;b&gt;    <span style=\"color:blue;\">Next<\/span> objReference\r\n&lt;b&gt;End Sub&lt;\/b&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Verweise aus der Add-In-Datenbank entfernen<\/span><\/b><\/p>\n<p><b>Datenbank in Add-In umwandeln<\/b><\/p>\n<p>Bisher haben wir die Datenbank noch nicht in ein Add-In umgewandelt, welches wir dann &uuml;ber den Add-In-Manager von Access aufrufen und nutzen k&ouml;nnen, um die Verweise einer anderen Datenbank in die aktuelle Datenbank zu importieren. Dazu sind die folgenden Schritte n&ouml;tig:<\/p>\n<ul>\n<li>Erstellen einer Tabelle namens <b>USysRegInfo<\/b> mit den Informationen f&uuml;r das Installieren des Add-Ins<\/li>\n<li>Einstellen der Datenbankeigenschaften, damit diese beim Registrieren des Add-Ins korrekt angezeigt werden<\/li>\n<li>Hinzuf&uuml;gen einer Funktion namens <b>Autostart<\/b>, die beim Aufrufen des Add-Ins aufgerufen wird<\/li>\n<li>Umbenennen der Dateiendung von <b>.accdb <\/b>in <b>.accda<\/b><\/li>\n<\/ul>\n<p>Die Tabelle <b>USysRegInfo <\/b>enth&auml;lt die folgenden Felder:<\/p>\n<ul>\n<li><b>Subkey<\/b>: Datentyp <b>Kurzer Text<\/b><\/li>\n<li><b>Type<\/b>: Datentyp <b>Zahl<\/b><\/li>\n<li><b>ValName<\/b>: Datentyp <b>Kurzer Text<\/b><\/li>\n<li><b>Value<\/b>: Datentyp <b>Kurzer Text<\/b><\/li>\n<\/ul>\n<p>Diese f&uuml;llen wir wie in Bild 7.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_013.png\" alt=\"Die Tabelle USysRegInfo\" width=\"649,559\" height=\"355,4843\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Die Tabelle USysRegInfo<\/span><\/b><\/p>\n<p>In den Access-Eigenschaften der Add-In-Datenbank nehmen wir die &Auml;nderungen wie in Bild 8 vor.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_003.png\" alt=\"Eigenschaften der Add-In-Datenbank\" width=\"424,7115\" height=\"458,8492\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Eigenschaften der Add-In-Datenbank<\/span><\/b><\/p>\n<p>Die Autostart-Funktion, die Sie in einem Standardmodul ablegen k&ouml;nnen, sieht so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Autostart()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> db Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         DoCmd.OpenForm \"frmVerweiseImportieren\", _\r\n             WindowMode:=acDialog\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Bitte &ouml;ffnen Sie zuerst eine  Datenbankdatei.\", vbExclamation + vbOKOnly,  \"Keine Datenbank ge&ouml;ffnet.\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Wenn aktuell noch keine Datenbank in Access geladen ist, soll das Add-In mit einer Meldung beendet werden.<\/p>\n<p><b>Add-In installieren<\/b><\/p>\n<p>Danach k&ouml;nnen Sie die Add-In-Datenbank in Access installieren. Dazu &ouml;ffnen Sie den Add-In-Manager mit dem Ribbon-Eintrag <b>Datenbanktools|Add-Ins|Add-Ins|Add-In-Manager<\/b>. Im Add-In-Manager klicken Sie auf die Schaltfl&auml;che <b>Neues hinzuf&uuml;gen&#8230; <\/b>und w&auml;hlen im nun erscheinenden <b>&Ouml;ffnen<\/b>-Dialog die <b>.accda<\/b>-Datei aus (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_014.png\" alt=\"Ausw&auml;hlen der zu installierenden Add-In-Datenbank\" width=\"499,6607\" height=\"313,2079\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Ausw&auml;hlen der zu installierenden Add-In-Datenbank<\/span><\/b><\/p>\n<p>Danach finden Sie das neue Add-In in der Liste der verf&uuml;gbaren Add-Ins im <b>Add-In-Manager <\/b>vor (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_015.png\" alt=\"Das neu installierte Add-In im Add-In-Manager\" width=\"424,7115\" height=\"262,2311\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Das neu installierte Add-In im Add-In-Manager<\/span><\/b><\/p>\n<p><b>Add-In aufrufen<\/b><\/p>\n<p>Wie rufen wir das Add-In nun auf Ganz einfach: Sie finden es im gleichen Ribbon-Men&uuml; wie auch den Add-In-Manager (siehe Bild 11). Nun kann es losgehen &#8211; f&uuml;gen Sie Verweise aus anderen Projekten zu Ihrer Zieldatenbank hinzu!<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_03\/pic_1241_016.png\" alt=\"Aufruf des Add-Ins &uuml;ber das Ribbon\" width=\"649,559\" height=\"154,2056\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Aufruf des Add-Ins &uuml;ber das Ribbon<\/span><\/b><\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VerweiseImportieren.accda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/CA2F3F1C-88DE-481E-BF67-802D595D0627\/aiu_1241.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn eine Datenbank besch&auml;digt ist, k&ouml;nnen Sie diese oft retten, indem Sie eine neue Datenbank aufsetzen und alle Objekte der alten Datenbank in die neue Datenbank importieren. Leider ber&uuml;cksichtigt die Import-Funktion nicht die Verweise des VBA-Projekts. Je nach der Anzahl der Verweise kann das &Uuml;bertragen der Verweise recht m&uuml;hsam werden. Zum Gl&uuml;ck kann man fast alles automatisieren, was sich sonst &uuml;ber die Benutzeroberfl&auml;che von Access erledigen l&auml;sst. In diesem Fall bauen wir uns ein Add-In, mit dem wir der aktuell ge&ouml;ffneten Datenbank die Verweise einer ausgew&auml;hlten Datenbank hinzuf&uuml;gen k&ouml;nnen.<\/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":[662020,66032020,44000027],"tags":[],"class_list":["post-55001241","post","type-post","status-publish","format-standard","hentry","category-662020","category-66032020","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>Verweise aus anderer Datenbank importieren - 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\/Verweise_aus_anderer_Datenbank_importieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verweise aus anderer Datenbank importieren\" \/>\n<meta property=\"og:description\" content=\"Wenn eine Datenbank besch&auml;digt ist, k&ouml;nnen Sie diese oft retten, indem Sie eine neue Datenbank aufsetzen und alle Objekte der alten Datenbank in die neue Datenbank importieren. Leider ber&uuml;cksichtigt die Import-Funktion nicht die Verweise des VBA-Projekts. Je nach der Anzahl der Verweise kann das &Uuml;bertragen der Verweise recht m&uuml;hsam werden. Zum Gl&uuml;ck kann man fast alles automatisieren, was sich sonst &uuml;ber die Benutzeroberfl&auml;che von Access erledigen l&auml;sst. In diesem Fall bauen wir uns ein Add-In, mit dem wir der aktuell ge&ouml;ffneten Datenbank die Verweise einer ausgew&auml;hlten Datenbank hinzuf&uuml;gen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-10T09:41:39+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952\" \/>\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=\"22\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Verweise aus anderer Datenbank importieren\",\"datePublished\":\"2020-07-10T09:41:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/\"},\"wordCount\":3255,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/f56005a82c1e405abcf67a2629f85952\",\"articleSection\":[\"2020\",\"3\\\/2020\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/\",\"name\":\"Verweise aus anderer Datenbank importieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/f56005a82c1e405abcf67a2629f85952\",\"datePublished\":\"2020-07-10T09:41:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/f56005a82c1e405abcf67a2629f85952\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/f56005a82c1e405abcf67a2629f85952\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verweise_aus_anderer_Datenbank_importieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verweise aus anderer Datenbank importieren\"}]},{\"@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":"Verweise aus anderer Datenbank importieren - 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\/Verweise_aus_anderer_Datenbank_importieren\/","og_locale":"de_DE","og_type":"article","og_title":"Verweise aus anderer Datenbank importieren","og_description":"Wenn eine Datenbank besch&auml;digt ist, k&ouml;nnen Sie diese oft retten, indem Sie eine neue Datenbank aufsetzen und alle Objekte der alten Datenbank in die neue Datenbank importieren. Leider ber&uuml;cksichtigt die Import-Funktion nicht die Verweise des VBA-Projekts. Je nach der Anzahl der Verweise kann das &Uuml;bertragen der Verweise recht m&uuml;hsam werden. Zum Gl&uuml;ck kann man fast alles automatisieren, was sich sonst &uuml;ber die Benutzeroberfl&auml;che von Access erledigen l&auml;sst. In diesem Fall bauen wir uns ein Add-In, mit dem wir der aktuell ge&ouml;ffneten Datenbank die Verweise einer ausgew&auml;hlten Datenbank hinzuf&uuml;gen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-07-10T09:41:39+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"22\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Verweise aus anderer Datenbank importieren","datePublished":"2020-07-10T09:41:39+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/"},"wordCount":3255,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952","articleSection":["2020","3\/2020","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/","url":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/","name":"Verweise aus anderer Datenbank importieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952","datePublished":"2020-07-10T09:41:39+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/f56005a82c1e405abcf67a2629f85952"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Verweise_aus_anderer_Datenbank_importieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Verweise aus anderer Datenbank importieren"}]},{"@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\/55001241","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=55001241"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001241\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}