{"id":55000470,"date":"2019-12-01T00:00:00","date_gmt":"2020-03-23T18:49:00","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=470"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Verweise_beim_Start_pruefen","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html","title":{"rendered":"Verweise beim Start pr&uuml;fen"},"content":{"rendered":"<p class='introduction'>Beim Einsatz von Access-Anwendungen gibt es manchmal Probleme, weil die Verweise auf Bibliotheken nicht korrekt gesetzt sind. Dann werden pl&ouml;tzlich VBA-Funktionen wie &#8222;Left&#8220; oder &#8222;Right&#8220; als fehlerhaft bewertet. Der Benutzer steht dann dumm da, weil er nicht wei&szlig;, was zu tun ist. Dieser Beitrag zeigt, wie Sie das Problem nachstellen k&ouml;nnen und welche L&ouml;sungsm&ouml;glichkeiten es gibt &#8211; von der manuellen Variante bis zur automatischen Korrektur des Verweises beim Start der Anwendung.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1904_VerweiseBeimStart.accdb<\/b>.<\/p>\n<h2>Fehlerhafter Verweis<\/h2>\n<p>Probleme wie die oben genannten treten meist auf, wenn Sie eine Anwendung auf Ihrem Rechner entwickeln und diese dann an einen Benutzer weitergeben, auf dessen Rechner nicht alle per Verweis referenzierten Bibliotheken vorliegen &#8211; oder diese nicht in der richtigen Version vorliegen.<\/p>\n<p>Verweise finden Sie grunds&auml;tzlich im <b>Verweise<\/b>-Dialog, den Sie vom VBA-Editors aus (zu &ouml;ffnen mit <b>Strg + G <\/b>oder <b>Alt + F11<\/b>) mit dem Men&uuml;befehl <b>Extras|Verweise <\/b>anzeigen. Dieser Dialog zeigt die Liste der eingebundenen Bibliotheken, die bei einer neuen, leeren Access-Anwendung auf Basis von Access 2016 etwa wie in Bild 1 aussieht. Die Bibliotheken hinter diesen vier Eintr&auml;ge sollten &uuml;berall, wo Access 2016 installiert ist, auch vorhanden sein.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_001.png\" alt=\"Der Verweise-Dialog von Access\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Der Verweise-Dialog von Access<\/p>\n<p>Bei umfangreicheren Anwendungen kommen meist noch Verweise auf weitere Bibliotheken hinzu, zum Beispiel um Word, Excel oder Outlook zu automatisieren, die Datenzugriffs-Bibliothek ADODB zu nutzen oder auch um die Befehle f&uuml;r die Verarbeitung von XML hinzuzuf&uuml;gen.<\/p>\n<p>Wenn Sie nun einen Verweis auf Outlook hinzuf&uuml;gen, die Datenbank auf den Zielrechner &uuml;bertragen und dann aber Outlook gar nicht auf dem Zielrechner vorliegt, gibt es Probleme wegen des fehlenden Verweises.<\/p>\n<p>Manchmal gibt es auch Probleme, wenn Sie mit einem Verweis auf die Objektbibliothek von Outlook 2016 programmieren und auf dem Zielrechner ist eine &auml;ltere Version von Outlook vorhanden.<\/p>\n<h2>Manuelle L&ouml;sung<\/h2>\n<p>Vorausgesetzt, die Bibliothek, auf die der Verweis zeigen soll, ist auf dem Zielrechner installiert und registriert, k&ouml;nnen Sie wie folgt vorgehen, um den Verweis zu erneuern:<\/p>\n<ul>\n<li>&ouml;ffnen Sie den <b>Verweise<\/b>-Dialog.<\/li>\n<li>Entfernen Sie den mit <b>NICHT VORHANDEN <\/b>markierten Verweis.<\/li>\n<li>F&uuml;gen Sie den Verweis auf die gew&uuml;nschte Bibliothek zur Liste der Verweise hinzu, indem Sie den entsprechenden Eintrag per Haken selektieren.<\/li>\n<li>Schlie&szlig;en Sie den <b>Verweise<\/b>-Dialog.<\/li>\n<\/ul>\n<p>Danach sollte die Anwendung dann wie gewohnt funktionieren. Eine Ausnahme k&ouml;nnte sein, dass Sie in Ihrer Anwendung tats&auml;chlich Funktionen einer neueren Bibliothek verwenden, die in der &auml;lteren, auf dem Zielrechner vorhandenen Version noch nicht verf&uuml;gbar ist.<\/p>\n<p>Wenn Sie eine Anwendung beim Kunden laufen haben, f&uuml;r die Sie regelm&auml;&szlig;ig neue Versionen liefern, dann ist es f&uuml;r den Kunden nat&uuml;rlich m&uuml;hselig, immer die Verweise zu aktualisieren &#8211; daher stellen wir nun eine Alternative vor.<\/p>\n<h2>Verweise automatisch beim Start aktualisieren<\/h2>\n<p>Die Alternative lautet, beim Start einer Anwendung die Verweise zu pr&uuml;fen und diese gegebenenfalls zu erneuern. Wenn ein Verweis nicht gesetzt werden kann, weil die entsprechende Bibliothek nicht verf&uuml;gbar ist, soll eine Meldung erscheinen, die den Benutzer dar&uuml;ber informiert, damit dieser mit dem Entwickler der Software herausfinden kann, wo das Problem in diesem Fall liegt.<\/p>\n<p>Zu Beispielzwecken nehmen wir an, dass wir Verweise auf die Bibliotheken f&uuml;r den Zugriff auf die Office-Anwendungen Excel, Outlook und Word hinzuf&uuml;gen sowie einen auf die Bibliothek <b>Microsoft XML, v6.0 <\/b>(siehe Bild 2).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_007.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_007.png\" alt=\"Verweise-Dialog mit zus&auml;tzlichen Verweisen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Verweise-Dialog mit zus&auml;tzlichen Verweisen<\/p>\n<p>Bei den mit diesen Verweisen referenzierten Bibliotheken handelt es sich s&auml;mtlich um registrierte Bibliotheken, f&uuml;r die es eine GUID gibt. Diese wollen wir nun zun&auml;chst ermitteln, indem wir diese per VBA-Routine im Direktbereich des VBA-Editors ausgeben:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweisePruefenUndErneuern()\r\n    <span style=\"color:blue;\">Dim <\/span>objReference<span style=\"color:blue;\"> As <\/span>Reference\r\n    <span style=\"color:blue;\">Dim <\/span>strGUID<span style=\"color:blue;\"> As String<\/span>\r\n    For Each objReference In References\r\n        <span style=\"color:blue;\">Debug.Print<\/span> objReference.Name\r\n        <span style=\"color:blue;\">Debug.Print<\/span> objReference.FullPath\r\n        <span style=\"color:blue;\">Debug.Print<\/span> objReference.Guid\r\n    <span style=\"color:blue;\">Next<\/span> objReference\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sieht dann so aus:<\/p>\n<pre>VBA\r\nC:\\Program Files (x86)\\...\\VBA7.1\\VBE7.DLL\r\n{000204EF-0000-0000-C000-000000000046}\r\nAccess\r\nC:\\Program Files (x86)\\...\\MSACC.OLB\r\n{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}\r\nstdole\r\nC:\\Windows\\SysWOW64\\stdole2.tlb\r\n{00020430-0000-0000-C000-000000000046}\r\nDAO\r\nC:\\Program Files (x86)\\...\\OFFICE16\\ACEDAO.DLL\r\n{4AC9E1DA-5BAD-4AC7-86E3-24F4CDCECA28}\r\nExcel\r\nC:\\Program Files (x86)\\...\\EXCEL.EXE\r\n{00020813-0000-0000-C000-000000000046}\r\nOutlook\r\nC:\\Program Files (x86)\\...\\MSOUTL.OLB\r\n{00062FFF-0000-0000-C000-000000000046}\r\nWord\r\nC:\\Program Files (x86)\\...\\MSWORD.OLB\r\n{00020905-0000-0000-C000-000000000046}\r\nMSXML2\r\nC:\\Windows\\SysWOW64\\msxml6.dll\r\n{F5078F18-C551-11D3-89B9-0000F81FE221}<\/pre>\n<p>Nun wollen wir ja gar nicht alle Eintr&auml;ge pr&uuml;fen, sondern nur diejenigen, die nicht eingebaut sind. Das pr&uuml;fen wir durch eine <b>If&#8230;Then<\/b>-Bedingung, mit der wir den Wert der Eigenschaft <b>BuiltIn <\/b>untersuchen. Ist diese <b>True<\/b>, handelt es sich um eine eingebaute Eigenschaft, die wir nicht ersetzen m&uuml;ssen, da diese meist vorhanden sind. Hat <b>BuiltIn <\/b>den Wert <b>False<\/b>, m&uuml;ssen wir handeln: Dann k&ouml;nnte es sein, dass ein falscher Verweis zu Fehlern f&uuml;hrt. Mit der folgenden ge&auml;nderten Version der Prozedur <b>VerweisePruefenUndErneuern <\/b>geben wir nur noch die Verweise aus, die wir erneuern k&ouml;nnen:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweisePruefenUndErneuern()\r\n    <span style=\"color:blue;\">Dim <\/span>objReference<span style=\"color:blue;\"> As <\/span>Reference\r\n    <span style=\"color:blue;\">Dim <\/span>strGUID<span style=\"color:blue;\"> As String<\/span>\r\n    For Each objReference In References\r\n        <span style=\"color:blue;\">If <\/span>objReference.BuiltIn = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n            <span style=\"color:blue;\">Debug.Print<\/span> objReference.Name\r\n            <span style=\"color:blue;\">Debug.Print<\/span> objReference.FullPath\r\n            <span style=\"color:blue;\">Debug.Print<\/span> objReference.Guid\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Next<\/span> objReference\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir dann ein &auml;hnliches Ergebnis wie weiter oben, nur dass diesmal die eingebauten Verweise nicht ber&uuml;cksichtigt werden.<\/p>\n<p>Was fangen wir nun damit an Wir k&ouml;nnten direkt in dieser Prozedur ein paar Zeilen unterbringen, die daf&uuml;r sorgen, dass die Verweise auf G&uuml;ltigkeit &uuml;berpr&uuml;ft und gegebenenfalls erneuert werden. Das w&uuml;rde dann etwa wie in Listing 1 aussehen. Hier durchlaufen wir wieder alle <b>Reference<\/b>-Objekte, schlie&szlig;en aber durch die ersten beiden <b>If&#8230;Then<\/b>-Bedingungen zuerst die eingebauten und dann die vorhandenen Verweise aus.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweisePruefenUndErneuern()\r\n     <span style=\"color:blue;\">Dim <\/span>objReference<span style=\"color:blue;\"> As <\/span>Reference\r\n     <span style=\"color:blue;\">Dim <\/span>objReferenceNew<span style=\"color:blue;\"> As <\/span>Reference\r\n     <span style=\"color:blue;\">Dim <\/span>strReference<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strGUID<span style=\"color:blue;\"> As String<\/span>\r\n     For Each objReference In References\r\n         <span style=\"color:blue;\">If <\/span>objReference.BuiltIn = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">If <\/span>objReference.IsBroken = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                 strGUID = objReference.Guid\r\n                 strReference = objReference.Name\r\n                 References.Remove objReference\r\n                 <span style=\"color:blue;\">Set<\/span> objReference<span style=\"color:blue;\">New<\/span> = References.AddFromGuid(strGUID, 0, 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 auf die Bibliothek '\" & strReference & \"' fehlt.\"\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objReference\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Fehlende Verweise werden direkt erneuert<\/p>\n<p>Sind beide <b>If&#8230;Then<\/b>-Bedingungen wahr, merken wir uns in den Variablen <b>strGUID <\/b>und <b>strReference <\/b>die GUID und den Namen der referenzierten Bibliothek. Dann f&uuml;gen wir die Referenz auf eine Bibliothek &uuml;ber die Methode <b>AddFromGUID <\/b>wieder zur Liste <b>References <\/b>hinzu. Dabei &uuml;bergeben wir als Parameter die GUID der Bibliothek sowie den Wert <b>0 <\/b>f&uuml;r die beiden Parameter <b>Major <\/b>und <b>Minor<\/b>.<\/p>\n<p>Eine fehlende Bibliothek sollte damit wieder referenziert werden k&ouml;nnen.<\/p>\n<p>Diese Prozedur rufen wir am besten beim Start der Anwendung auf, damit keine Fehler durch fehlende Verweis auftreten. Wie das gelingt, zeigen wir am Ende des Beitrags.<\/p>\n<h2>Ben&ouml;tigte Verweise an anderer Stelle speichern<\/h2>\n<p>Das Problem ist nur: Wenn der Benutzer auf irgendeine Weise einen der Verweise entfernt, ohne diesen wieder hinzuzuf&uuml;gen, treten in der Folge Probleme auf an den Stellen, wo im Code Elemente dieser Bibliothek verwendet werden.<\/p>\n<p>Wenn wir dann beim Starten der Anwendung die Prozedur aufrufen, durchl&auml;uft diese wieder alle Verweise und pr&uuml;ft die Verweise mit der Eigenschaft <b>IsBroken<\/b>. Wenn jedoch ein Verweis auf eine Bibliothek gar nicht mehr in der Liste der Verweise enthalten ist, kann er mit der hier vorliegenden Version der Prozedur auch nicht ersetzt werden &#8211; die Prozedur erf&auml;hrt ja gar nicht, das ein Verweis fehlt. Das wird erst sp&auml;ter offensichtlich, wenn die Anwendung das erste Mal auf Elemente der mit dem Verweis referenzierten Bibliothek zugreift und dadurch Laufzeitfehler ausgel&ouml;st werden.<\/p>\n<p>Also wollen wir, bevor wir die Anwendung an den Benutzer weitergeben, die Verweise, die &uuml;berpr&uuml;ft werden sollen, in irgendeiner Form speichern. Dabei gibt es zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Wir speichern die GUIDs fest im Code.<\/li>\n<li>Wir legen eine Tabelle an, der wir die Informationen &uuml;ber die Verweise hinzuf&uuml;gen. Diese Tabelle sollte dann im Frontend der Datenbankanwendung liegen, wenn diese in Frontend und Backend aufgeteilt ist.<\/li>\n<\/ul>\n<p>Die Basis f&uuml;r beide Varianten sieht beispielsweise wie in Listing 2 aus. Diese Funktion nimmt den Parameter <b>strGUID <\/b>entgegen. Im Direktbereich k&ouml;nnten wir die Funktion wie folgt aufrufen:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>VerweiseErneuern(strGUID<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objReference<span style=\"color:blue;\"> As <\/span>Reference\r\n     <span style=\"color:blue;\">Dim <\/span>bolReferenceMissing<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>bolReferenceBroken<span style=\"color:blue;\"> As Boolean<\/span>\r\n     bolReferenceBroken = <span style=\"color:blue;\">False<\/span>\r\n     bolReferenceMissing = <span style=\"color:blue;\">True<\/span>\r\n     VerweiseErneuern = <span style=\"color:blue;\">True<\/span>\r\n     For Each objReference In References\r\n         <span style=\"color:blue;\">If <\/span>objReference.Guid = strGUID<span style=\"color:blue;\"> Then<\/span>\r\n             bolReferenceMissing = <span style=\"color:blue;\">False<\/span>\r\n             <span style=\"color:blue;\">If <\/span>objReference.IsBroken = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n                 bolReferenceBroken = <span style=\"color:blue;\">True<\/span>\r\n             <span style=\"color:blue;\">End If<\/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> objReference\r\n     <span style=\"color:blue;\">If <\/span>bolReferenceMissing = <span style=\"color:blue;\">True<\/span> Or bolReferenceBroken = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         References.Remove objReference\r\n         <span style=\"color:blue;\">Set<\/span> objReference = References.AddFromGuid(strGUID, 0, 0)\r\n         <span style=\"color:blue;\">If <\/span>objReference Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n             VerweiseErneuern = <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 2: Erneuern des Outlook-Verweises<\/p>\n<pre> VerweiseErneuern(\"{00062FFF-0000-0000-C000-000000000046}\")<\/pre>\n<p>Die Funktion stellt die Variablen <b>bolReferenceBroken <\/b>auf <b>False <\/b>und <b>bolReferenceMissing <\/b>auf <b>True <\/b>ein. Dann versucht sie, einen Verweis auf die Bibliothek mit der mit <b>strGUID <\/b>&uuml;bergebenen GUID zu finden. Dies geschieht in einer <b>For Each<\/b>-Schleife &uuml;ber alle Elemente der Auflistung <b>References<\/b>. Wenn der aktuell mit <b>objReference <\/b>referenzierte Verweis die gesuchte GUID enth&auml;lt, k&ouml;nnen wir die Variable <b>bolReferenceMissing <\/b>schon einmal auf <b>False <\/b>einstellen, denn der Verweis ist ja zumindest vorhanden.<\/p>\n<p>Dann pr&uuml;ft die Prozedur mit der Eigenschaft <b>IsBroken <\/b>noch, ob der Verweis als <b>NICHT VORHANDEN <\/b>markiert ist. Das ist etwas missverst&auml;ndlich, denn <b>NICHT VORHANDEN <\/b>gibt ja nicht an, dass der Verweis fehlt, sondern die referenzierte Bibliothek. Jedenfalls stellt die Funktion die Variable <b>bolReferenceBroken <\/b>auf <b>True <\/b>ein, wenn <b>IsBroken <\/b>den Wert <b>True <\/b>aufweist. Sobald der Verweis passend zu <b>strGUID <\/b>gefunden wurde, verlassen wir dann auch mit <b>Exit For <\/b>die Schleife.<\/p>\n<p><b>objReference <\/b>enth&auml;lt somit auch einen Verweis auf das <b>Reference<\/b>-Objekt. Damit gehen wir in eine <b>If&#8230;Then<\/b>-Bedingung, in der wir pr&uuml;fen, ob entweder <b>bolReferenceMissing <\/b>oder <b>bolReferenceBroken <\/b>den Wert <b>True <\/b>hat. Das ist nun entweder der Fall, wenn der Verweis gar nicht vorhanden ist oder dieser &#8222;broken&#8220; ist.<\/p>\n<p>Dann versucht die Funktion, den Verweis mit der <b>Remove<\/b>-Methode der <b>References<\/b>-Auflistung zu entfernen und diesen dann &uuml;ber die Methode <b>AddFromGUID <\/b>erneut hinzuzuf&uuml;gen, wobei ein Verweis auf das neue <b>Reference<\/b>-Objekt in der Variablen <b>objReference <\/b>landet &#8211; aber auch nur, wenn das Hinzuf&uuml;gen erfolgreich war.<\/p>\n<p>Wenn etwa die Datei hinter der GUID nicht vorhanden ist, gelingt dies nicht und <b>objReference <\/b>bleibt leer.<\/p>\n<p>Ist <b>objReference <\/b>danach leer, wird der Wert <b>False<\/b> mit dem Funktionswert zur&uuml;ckgegeben.<\/p>\n<p>Von einer Prozedur aus k&ouml;nnten wir diese Funktion wie etwa in Listing 3 aufrufen. Dies w&uuml;rde, wenn die Outlook-Bibliothek nicht vorhanden oder fehlerhaft ist, eine Meldung liefern.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweiseErneuernAufruf()\r\n     <span style=\"color:blue;\">Dim <\/span>strGUID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strReference<span style=\"color:blue;\"> As String<\/span>\r\n     strGUID = \"{00062FFF-0000-0000-C000-000000000046}\"\r\n     strReference = \"Microsoft Outlook x.0 Object Library\"\r\n     <span style=\"color:blue;\">If <\/span>VerweiseErneuern(strGUID, strReference) = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Der Verweis auf die Bibliothek '\" & strReference & \"' ist fehlerhaft und wurde entfernt oder ist nicht \" _\r\n             & \"vorhanden. F&uuml;gen Sie den Verweis auf die Bibliothek manuell hinzu.\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 3: Aufruf der Funktion VerweiseErneuern<\/p>\n<h2>Reparieren eines Verweises testen<\/h2>\n<p>Das wollen wir nun ausprobieren. Solange der Verweis nicht auf eine nicht vorhandene Datei zeigt, was man nach dem &ouml;ffnen des <b>Verweise<\/b>-Dialog schnell durch eine Pr&uuml;fung auf den Hinweis <b>NICHT VORHANDEN<\/b> pr&uuml;fen kann.<\/p>\n<p>Ist der Verweis fehlerhaft, sieht der Eintrag im <b>Verweise<\/b>-Dialog wie in Bild 3 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_009.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_009.png\" alt=\"Der mit NICHT VORHANDEN markierte Eintrag\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Der mit NICHT VORHANDEN markierte Eintrag<\/p>\n<p>Gegebenenfalls erhalten Sie beim &ouml;ffnen des Verweise-Dialogs auch gleich eine Meldung wie in Bild 4.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_008.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_008.png\" alt=\"Hinweis auf ein Verweis-Problem\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Hinweis auf ein Verweis-Problem<\/p>\n<p>Wie aber wollen Sie das Reparieren eines Verweises testen, wenn sich auf Ihrem System &uuml;berhaupt kein Probleme verursachender Verweis befindet Dann k&ouml;nnen Sie selbst ein solches Problem schaffen. Dazu suchen Sie beispielsweise die Datei <b>MSOUTL.OLB <\/b>auf, unter Windows 10 und Office 2016 etwa im Verzeichnis <b>C:\\Program Files (x86)\\Microsoft Office\\root\\Office16 <\/b>zu finden (den Pfad finden Sie aber auch &uuml;ber die <b>FullPath<\/b>-Eigenschaft des <b>Reference<\/b>-Objekts).<\/p>\n<p>Diese benennen wir einfach in <b>_MSOUTL.OLB <\/b>um. Die dabei erscheinende Meldung, die nach Administratorberechtigungen verlangt, k&ouml;nnen Sie best&auml;tigen. Vergessen Sie nicht, die Datei sp&auml;ter wieder umzubenennen!<\/p>\n<p>Wenn Sie nun die Beispieldatenbank starten und in den <b>Verweise<\/b>-Dialog schauen, finden Sie einen als <b>NICHT VORHANDEN <\/b>markierten Eintrag der Bibliothek <b>Microsoft Outlook 16.0 Object Library<\/b>.<\/p>\n<p>Diesen k&ouml;nnen Sie dann versuchen, mit der obigen Funktion wiederherzustellen. Das wird in diesem Fall scheitern, da der Verweis tats&auml;chlich ins Leere zeigt und die hinter der GUID angegebene Datei <b>MSOUTL.OLB <\/b>nicht vorhanden ist.<\/p>\n<p>Den Fall, dass die Outlook-Bibliothek nicht in der gew&uuml;nschten Version vorhanden ist und es dadurch einen Fehler gibt, konnten wir mangels anderer Outlook-OLB-Datei nicht nachstellen. Die Prozedur sollte jedoch in diesem Fall den alten Verweis l&ouml;schen und den auf die korrekte Version hinzuf&uuml;gen k&ouml;nnen.<\/p>\n<h2>Funktion f&uuml;r mehrere Verweise aufrufen<\/h2>\n<p>Wenn Sie gleich f&uuml;r mehrere Verweise pr&uuml;fen wollen, ob diese noch vorhanden und einsatzbereit sind, k&ouml;nnen Sie die Funktion auch f&uuml;r mehrere Verweise in einer Routine aufrufen (siehe Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweiseErneuernAufrufMehrere()\r\n     <span style=\"color:blue;\">Dim <\/span>strGUID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strReference<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strMeldung<span style=\"color:blue;\"> As String<\/span>\r\n     strGUID = \"{00062FFF-0000-0000-C000-000000000046}\" 'Outlook\r\n     strReference = \"Microsoft Outlook x.0 Object Library\"\r\n     <span style=\"color:blue;\">If <\/span>VerweiseErneuern(strGUID, strReference) = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         strMeldung = strMeldung & strReference & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     strGUID = \"{00020813-0000-0000-C000-000000000046}\" 'Excel\r\n     strReference = \"Microsoft Excel x.0 Object Library\"\r\n     <span style=\"color:blue;\">If <\/span>VerweiseErneuern(strGUID, strReference) = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         strMeldung = strMeldung & strReference & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     ... weitere Verweise\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strMeldung) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strMeldung = \"Ein oder mehrere Verweise konnten nicht wiederhergestellt werden:\" _\r\n             & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & strMeldung\r\n         strMeldung = strMeldung & <span style=\"color:blue;\">vbCrLf<\/span> & \"F&uuml;gen Sie diese manuell hinzu oder kontaktieren \" _\r\n             & \"Sie den Entwickler.\"\r\n         <span style=\"color:blue;\">MsgBox<\/span> strMeldung, , \"Fehlerhafte Verweise\"\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 4: Erneuern mehrerer Verweise<\/p>\n<p>Hier &uuml;bergeben wir nacheinander die Parameter f&uuml;r die Pr&uuml;fung und gegebenenfalls Erneuerung verschiedener Verweise. Immer wenn die Funktion den Wert <b>False <\/b>zur&uuml;ckliefert, wird der Variablen <b>strMeldung <\/b>eine Zeile mit der Bezeichnung der jeweils nicht reparierten Referenz hinzugef&uuml;gt. Am Ende pr&uuml;ft die Prozedur, ob mindestens eine Referenz nicht repariert werden konnte und erg&auml;nzt die Meldung aus <b>strMeldung <\/b>aus eine f&uuml;hrende und eine folgende Zeile, die dem Benutzer mitteilen, welche Schritte nun n&ouml;tig sind.<\/p>\n<h2>Speichern der Referenzen in einer Tabelle<\/h2>\n<p>Wir k&ouml;nnen die Daten f&uuml;r die Verweise statt im Code auch in einer Tabelle speichern, was ein sp&auml;teres Hinuf&uuml;gen oder Entfernen der Verweise erleichtert. Diese Tabelle hei&szlig;t <b>tblReferences <\/b>und sieht nach dem F&uuml;llen etwa wie in Bild 5 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_010.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_010.png\" alt=\"Tabelle zum Speichern der Verweisinformationen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Tabelle zum Speichern der Verweisinformationen<\/p>\n<p>Um uns die Arbeit zu erleichtern, schreiben wir eine Prozedur, mit der wir die Daten der Verweise in die Tabelle eintragen. Diese sieht wie in Listing 5 aus. Hier durchlaufen wir alle Verweise der aktuellen Datenbank und pr&uuml;fen, welche davon nicht eingebaut sind. F&uuml;r diese f&uuml;gen wir dann per <b>INSERT INTO<\/b>-Anweisung jeweils einen Datensatz zur Tabelle <b>tblReferences <\/b>hinzu.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweiseInDB()\r\n     <span style=\"color:blue;\">Dim <\/span>objReference<span style=\"color:blue;\"> As <\/span>Reference\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM tblReferences\", dbOpenDynaset\r\n     For Each objReference In References\r\n         <span style=\"color:blue;\">If <\/span>objReference.BuiltIn = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             db.Execute \"INSERT INTO tblReferences(ReferenceGUID, ReferenceName) \" _\r\n                 & \"VALUES('\" & objReference.Guid & \"', '\" _\r\n                 & objReference.Name & \"')\", dbFailOnError\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objReference\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 5: Eintragen der Verweisdaten in die Tabelle tblReferences<\/p>\n<p>Vorher leeren wir die Tabelle noch per <b>DELETE<\/b>-Anweisung.<\/p>\n<p>Sie k&ouml;nnen nach dem Durchlaufen dieser Prozedur noch manuell die Bezeichnungen der Verweise anpassen, also etwa <b>Microsoft Outlook x.0 Object Library <\/b>statt <b>Outlook<\/b>. Das Ergebnis sieht dann wie in Bild 6 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_011.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_011.png\" alt=\"Verweisinformationen mit ausgeschriebenen Bibliotheken\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: Verweisinformationen mit ausgeschriebenen Bibliotheken<\/p>\n<p>Um die Funktion <b>VerweiseErneuern <\/b>f&uuml;r jeden Eintrag der Tabelle einmal aufzurufen, verwenden wir die Prozedur aus Listing 6. Diese erstellt ein Recordset auf Basis der Tabelle <b>tblReferences<\/b>. Danach durchl&auml;uft sie alle Datens&auml;tze dieses Recordsets und ruft f&uuml;r jeden Datensatz die Funktion <b>VerweiseErneuern <\/b>auf und &uuml;bergibt den Wert des Feldes <b>ReferenceGUID <\/b>an die Funktion.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>VerweiseErneuernAusTabelleAufruf()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblReferences\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Dim <\/span>strMeldung<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">If <\/span>VerweiseErneuern(rst!ReferenceGUID) = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             strMeldung = strMeldung & rst!ReferenceName & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strMeldung) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strMeldung = \"Ein oder mehrere Verweise konnten nicht wiederhergestellt werden:\" & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & strMeldung\r\n         strMeldung = strMeldung & <span style=\"color:blue;\">vbCrLf<\/span> & \"F&uuml;gen Sie diese manuell hinzu oder kontaktieren Sie den Entwickler.\"\r\n         <span style=\"color:blue;\">MsgBox<\/span> strMeldung, , \"Fehlerhafte Verweise\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 6: Verweise aus der Tabelle erneuern<\/p>\n<p>Liefert die Funktion den Wert <b>False <\/b>zur&uuml;ck, was bedeutet, dass ein fehlerhafter Verweis nicht repariert werden konnte, wird die Zeichenkette <b>strMeldung <\/b>um den Namen der Bibliothek in jeweils einer eigenen Zeile erg&auml;nzt. Ist mindestens ein Verweis nicht wiederherstellbar, erscheint eine Meldung wie aus Bild 7.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_012.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_012.png\" alt=\"Ein Verweis konnte nicht wiederhergestellt werden.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 7: Ein Verweis konnte nicht wiederhergestellt werden.<\/p>\n<h2>Prozedur beim Start der Anwendung aufrufen<\/h2>\n<p>Um diese Prozedur beim Start einer Anwendung aufzurufen, haben Sie zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Sie legen das <b>AutoExec<\/b>-Makro an und f&uuml;gen den Namen der Prozedur f&uuml;r eine neue Makroaktion namens <b>Ausf&uuml;hrenCode<\/b> hinzu. Dazu &auml;ndern Sie die Prozedur <b>VerweiseErneuernAusTabelleAufruf <\/b>in eine Funktion um (Entwurf des Makros siehe Bild 8).<\/li>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_470_013.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_470_013.png\" alt=\"Entwurf des AutoExec-Makros\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 8: Entwurf des AutoExec-Makros<\/p>\n<li>Oder Sie f&uuml;gen einem Formular, dass Sie f&uuml;r die Eigenschaft <b>Formular anzeigen <\/b>in den Access-Optionen der Anwendung einstellen, eine <b>Form_Load<\/b>-Prozedur hinzu, welche die Prozedur <b>VerweiseErneuernAusTabelleAufruf <\/b>startet.<\/li>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>1906_VerweiseBeimStart.accdb<\/p>\n<p><a href=\"..\/Downloads\/Beispiele\/{458DB680-02B7-4F36-9EA5-2155274260A8}\/VerweiseBeimStart.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beim Einsatz von Access-Anwendungen gibt es manchmal Probleme, weil die Verweise auf Bibliotheken nicht korrekt gesetzt sind. Dann werden pl&ouml;tzlich VBA-Funktionen wie &#8222;Left&#8220; oder &#8222;Right&#8220; als fehlerhaft bewertet. Der Benutzer steht dann dumm da, weil er nicht wei&szlig;, was zu tun ist. Dieser Beitrag zeigt, wie Sie das Problem nachstellen k&ouml;nnen und welche L&ouml;sungsm&ouml;glichkeiten es gibt &#8211; von der manuellen Variante bis zur automatischen Korrektur des Verweises beim Start der Anwendung.<\/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":[662019,66062019,44000011],"tags":[],"class_list":["post-55000470","post","type-post","status-publish","format-standard","hentry","category-662019","category-66062019","category-VBAGrundlagen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Verweise beim Start pr&uuml;fen - Access [basics]<\/title>\n<meta name=\"description\" content=\"Beim Einsatz von Access-Anwendungen gibt es manchmal Probleme, weil die Verweise auf Bibliotheken nicht korrekt gesetzt sind. Dann werden pl\u00f6tzlich VBA-Funktionen wie \u00bbLeft\u00ab oder \u00bbRight\u00ab als fehlerhaft bewertet. Der Benutzer steht dann dumm da, weil er nicht wei\u00df, was zu tun ist. Dieser Beitrag zeigt, wie Sie das Problem nachstellen k\u00f6nnen und welche L\u00f6sungsm\u00f6glichkeiten es gibt \u2013 von der manuellen Variante bis zur automatischen Korrektur des Verweises beim Start der Anwendung.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verweise beim Start pr&uuml;fen - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Beim Einsatz von Access-Anwendungen gibt es manchmal Probleme, weil die Verweise auf Bibliotheken nicht korrekt gesetzt sind. Dann werden pl\u00f6tzlich VBA-Funktionen wie \u00bbLeft\u00ab oder \u00bbRight\u00ab als fehlerhaft bewertet. Der Benutzer steht dann dumm da, weil er nicht wei\u00df, was zu tun ist. Dieser Beitrag zeigt, wie Sie das Problem nachstellen k\u00f6nnen und welche L\u00f6sungsm\u00f6glichkeiten es gibt \u2013 von der manuellen Variante bis zur automatischen Korrektur des Verweises beim Start der Anwendung.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-23T18:49:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_470_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"15\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_470_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html\",\"name\":\"Verweise beim Start pr&uuml;fen - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html#primaryimage\"},\"datePublished\":\"2020-03-23T18:49:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Beim Einsatz von Access-Anwendungen gibt es manchmal Probleme, weil die Verweise auf Bibliotheken nicht korrekt gesetzt sind. Dann werden pl\\u00f6tzlich VBA-Funktionen wie \\u00bbLeft\\u00ab oder \\u00bbRight\\u00ab als fehlerhaft bewertet. Der Benutzer steht dann dumm da, weil er nicht wei\\u00df, was zu tun ist. Dieser Beitrag zeigt, wie Sie das Problem nachstellen k\\u00f6nnen und welche L\\u00f6sungsm\\u00f6glichkeiten es gibt \\u2013 von der manuellen Variante bis zur automatischen Korrektur des Verweises beim Start der Anwendung.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Verweise_beim_Start_pruefen.html\",\"name\":\"Verweise beim Start pr&uuml;fen\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000470"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000470\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}