{"id":55000285,"date":"2016-02-01T00:00:00","date_gmt":"2020-01-24T15:59:23","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=285"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Arbeiten_mit_externen_Bibliotheken","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html","title":{"rendered":"Arbeiten mit externen Bibliotheken"},"content":{"rendered":"<p class='introduction'>Wahrscheinlich sind Sie schon einmal auf Begriffe gesto&szlig;en, wie Verweise, VBA-Bibliotheken oder Type Libraries. Alle bezeichnen dabei dieselbe Sache. Kl&auml;ren wir auf, was es damit auf sich hat, und wie Sie als VBA-Programmierer mit VBA-Bibliotheken umgehen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1507_Libraries.zip<\/b>.<\/p>\n<h2>Das VBA-Projekt<\/h2>\n<p>Sobald Sie in eine Datenbank neu anlegen, erzeugt Access automatisch auch ein VBA-Projekt in ihr, das zun&auml;chst den gleichen Namen tr&auml;gt, wie die Datei. &ouml;ffnen Sie den VBA-Editor, so steht dieser Name ganz oben im <b>Projekt-Explorer<\/b>. Dieser Name bezeichnet bereits die grundlegende Bibliothek des VBA-Projekts dieser Datenbank. Der Inhalt dieser Bibliothek w&auml;re die Sammlung von Modulen und Klassen mit ihren Methoden, die Sie gegebenenfalls entwickeln.<\/p>\n<h2>Verweise<\/h2>\n<p>VBA funktioniert grunds&auml;tzlich nicht ohne solche Bibliotheken. Um bestimmte Funktionen und Anweisungen ausf&uuml;hren zu k&ouml;nnen, ben&ouml;tigt es eine Referenz auf diese. Von Haus aus wei&szlig; es nichts &uuml;ber Namen, wie <b>Left<\/b>, <b>Right<\/b>, <b>Abs<\/b>, <b>CurrentDb<\/b>, und so weiter. All diese Namen m&uuml;ssen aus Bibliotheken kommen, die erstens die Bezeichnungen kennen, und zweitens den Ort, wo sich die Funktionen befinden, auf die sie sich beziehen. <\/p>\n<p>Auf den ersten Blick ist dieser Zusammenhang nicht unbedingt gleich ersichtlich. Denn beim Anlegen des VBA-Projekts einer Datenbank legt Access sogleich Referenzen auf zwei Bibliotheken fest, die Teil der Office-Installation sind: <b>VBA<\/b> und <b>Access<\/b>. Das sind die beiden grundlegenden Bibliotheken, mit denen unter VBA einer Datenbank gearbeitet wird.<\/p>\n<p><b>Left <\/b>und <b>Right<\/b> etwa stammen aus der Bibliothek <b>VBA<\/b>, w&auml;hrend <b>CurrentDb <\/b>Teil der <b>Access<\/b>&#8211;<b>Library<\/b> ist. <b>Type Library<\/b>, kurz <b>Library<\/b>, und <b>Bibliothek<\/b> sind synonyme Bezeichnungen. W&auml;hrend diese Begriffe auch unter anderen Programmiersprachen g&auml;ngig sind, spricht man unter VBA eher von <b>Verweisen<\/b>, oder englisch <b>References<\/b>. Korrekt w&auml;re eigentlich die ausf&uuml;hrliche Bezeichnung <b>Verweis auf eine Bibliothek<\/b>.<\/p>\n<p>Welche Bibliotheken in das VBA-Projekt der aktuellen Datenbank integriert sind &#8211; ohne Datenbank auch kein VBA-Projekt und somit keine Bibliotheken -, erfahren Sie &uuml;ber den <b>Verweise<\/b>-Dialog des VBA-Editors. &ouml;ffnen Sie ihn &uuml;ber sein Men&uuml; und die Abfolge <b>Extras|Verweise&#8230;<\/b> . Dort (siehe Bild 1) finden Sie links eine Liste mit allen Bibliotheken, die auf Ihrem Rechner zur Verf&uuml;gung stehen. &uuml;ber die Kontrollk&auml;stchen k&ouml;nnen Sie darin beliebige Eintr&auml;ge aktivieren oder deaktivieren. Nach dem Schlie&szlig;en des Dialogs &uuml;ber <b>OK<\/b> sind die jeweiligen Bibliotheken dann in das VBA-Projekt integriert oder aus ihm entfernt. Um zu erl&auml;utern, woher die Eintr&auml;ge dieser Liste &uuml;berhaupt kommen und wie sie funktionieren, ist etwas weiter auszuholen. <\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/Verweise.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/Verweise.png\" alt=\"Der Verweise-Dialog f&uuml;r die Bibliotheken von VBA\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Der Verweise-Dialog f&uuml;r die Bibliotheken von VBA<\/p>\n<p>VBA holt sie sich aus der <b>Registry<\/b> von <b>Windows<\/b> und da aus dem Zweig <b>HKEY_CLASSES_ROOT\\TypeLib<\/b>. Dort stehen alle  Bibliotheken, die im System installiert wurden. Genauer gesagt handelt es sich um sogenannte <b>COM-Bibliotheken<\/b>, oft auch als <b>ActiveX-Komponenten<\/b> bezeichnet. Zu beschreiben, wie diese Komponenten genau arbeiten und wie die Registry-Schl&uuml;ssel mit ihnen zusammenh&auml;ngen, w&uuml;rde hier zu weit f&uuml;hren. Wesentlich ist nur, dass diese <b>COM-Bibliotheken<\/b> durch Installation von Komponenten zustande kamen und eine Art Inhaltsverzeichnis darstellen. &uuml;ber die <b>GUID<\/b>-Schl&uuml;ssel wird eine Verbindung von Name der Bibliothek und der ausf&uuml;hrbaren Datei hergestellt, die in der Regel als DLL daher kommt, oder als EXE-Datei. Ein VBA-Verweis ist also nichts anderes, als eine Referenz auf eine ausf&uuml;hrbare Datei samt ihrer Funktionsliste. <\/p>\n<p>Diese speziellen <b>COM-DLLs<\/b> unterscheiden sich von anderen dadurch, dass sie au&szlig;er den enthaltenen Exportfunktionen eben auch noch eine integrierte <b>Type Library <\/b>aufweisen. Nur diese kann VBA lesen. Der <b>Objektkatalog<\/b> von VBA ist f&auml;hig, ihren Inhalt darzustellen. Es gibt aber zus&auml;tzlich auch solche Verweise, die <b>nur<\/b> aus einer <b>Type Library<\/b> bestehen und gar keine bin&auml;ren Funktionen enthalten. Das sind etwa die Dateien mit der Endung <b>tlb<\/b> oder <b>olb<\/b>. Ein Beispiel w&auml;re die Access-Bibliothek selbst, die in der Datei <b>msacc.olb<\/b> steckt, welche sich im Office-Installationsverzeichnis befindet. Bei erfolgreicher Installation von Access hat sie sich selbst als Type Library in die Registry eingetragen.<\/p>\n<p>Dort findet VBA sie und l&auml;dt ihren Inhalt, also das Verzeichnis aller Funktionen von <b>Access<\/b>, falls ein Verweis auf sie im VBA-Projekt der Datenbank eingetragen ist. Das allerdings ist immer der Fall. Sie k&ouml;nnen ihn &uuml;ber den Verweise-Dialog auch gar nicht entfernen. Access verhindert die Manipulation der <b>Access<\/b>-Bibliothek, wie auch die von <b>VBA<\/b>. Mit alle anderen Verweisen k&ouml;nnen Sie verfahren, wie Sie m&ouml;chten.<\/p>\n<p>Sehen wir uns die Funktionsweise folgender VBA-Zeile an:<\/p>\n<pre>S = Mid$(\"ACCESS BASICS\", 8, 2)\r\n> \"BA\"<\/pre>\n<p>Der <b>Parser<\/b> von VBA analysiert sie und st&ouml;&szlig;t auf den ihm unbekannten Ausdruck <b>Mid$<\/b>. Daraufhin klappert er die Namen der Funktionen aller geladenen Bibliotheken ab und wird unter <b>VBA<\/b> f&uuml;ndig. Deren Klasse Strings enth&auml;lt diese Funktion <b>Mid$<\/b>. Weil es eine globale Funktion ist, deren Klasse immer zur Verf&uuml;gung steht und nicht erst instanziiert werden muss, ist dieser Funktionsname g&uuml;ltig. Im weiteren Verlauf schaut der <b>Parser<\/b> nach der ausf&uuml;hrbaren Datei, welche diese Funktion enth&auml;lt. Er erf&auml;hrt dies aus der <b>Registry<\/b>, wo festgehalten wurde, dass die Datei <b>vbe6.dll<\/b> f&uuml;r den Verweis verantwortlich sei. Im Windows-Suchpfad findet er sie schlie&szlig;lich unter <b>Common Files\\ Microsoft Shared\\VBA<\/b> und l&auml;dt sie in den Prozess von Access. Da die Funktion Teil einer Objektklasse <b>Strings<\/b> ist, wird weiter automatisch eine Instanz dieser Klasse erzeugt. Nun kann in ihrem <b>Interface<\/b> die Funktion <b>Mid$<\/b> angesprungen werden, deren Speicheradresse ebenfalls &uuml;ber die <b>Type Library<\/b> ermittelt wird. Die Parameter f&uuml;r die Funktion k&ouml;nnen jetzt &uuml;bergeben werden.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000285\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000285?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000285\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"2c6d4a5d32\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wahrscheinlich sind Sie schon einmal auf Begriffe gesto&szlig;en, wie Verweise, VBA-Bibliotheken oder Type Libraries. Alle bezeichnen dabei dieselbe Sache. Kl&auml;ren wir auf, was es damit auf sich hat, und wie Sie als VBA-Programmierer mit VBA-Bibliotheken umgehen.<\/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":[662015,66072015,44000011],"tags":[],"class_list":["post-55000285","post","type-post","status-publish","format-standard","hentry","category-662015","category-66072015","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>Arbeiten mit externen Bibliotheken - Access [basics]<\/title>\n<meta name=\"description\" content=\"Wahrscheinlich sind Sie schon einmal auf Begriffe gesto\u00dfen, wie Verweise, VBA-Bibliotheken oder Type Libraries. Alle bezeichnen dabei dieselbe Sache. Kl\u00e4ren wir auf, was es damit auf sich hat, und wie Sie als VBA-Programmierer mit VBA-Bibliotheken umgehen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arbeiten mit externen Bibliotheken - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Wahrscheinlich sind Sie schon einmal auf Begriffe gesto\u00dfen, wie Verweise, VBA-Bibliotheken oder Type Libraries. Alle bezeichnen dabei dieselbe Sache. Kl\u00e4ren wir auf, was es damit auf sich hat, und wie Sie als VBA-Programmierer mit VBA-Bibliotheken umgehen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:23+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\/Verweise.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=\"11\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\/Arbeiten_mit_externen_Bibliotheken.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/Verweise.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html\",\"name\":\"Arbeiten mit externen Bibliotheken - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:23+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Wahrscheinlich sind Sie schon einmal auf Begriffe gesto\\u00dfen, wie Verweise, VBA-Bibliotheken oder Type Libraries. Alle bezeichnen dabei dieselbe Sache. Kl\\u00e4ren wir auf, was es damit auf sich hat, und wie Sie als VBA-Programmierer mit VBA-Bibliotheken umgehen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.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\/Arbeiten_mit_externen_Bibliotheken.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Arbeiten_mit_externen_Bibliotheken.html\",\"name\":\"Arbeiten mit externen Bibliotheken\"}}]},{\"@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\/55000285","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=55000285"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000285\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}