{"id":55000378,"date":"2023-08-01T00:00:00","date_gmt":"2023-11-21T14:08:08","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=378"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"OfficeVBA_per_COMDLL_mit_VBNET_erweitern","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/OfficeVBA_per_COMDLL_mit_VBNET_erweitern\/","title":{"rendered":"Office-VBA per COM-DLL mit VB.NET erweitern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/cd2efd584938417b936daa107839a167\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>VBA ist, formulieren wir es einmal freundlich, seit einiger Zeit nicht mehr aktualisiert worden. Hier und da gibt es kleine Anpassungen in den Objektbibliotheken, aber der Sprachumfang an sich hat keine gro&szlig;en Schritte gemacht. Auch VB.NET bringt nicht t&auml;glich neue Sprachkonstrukte hervor. Aber daf&uuml;r gibt es beispielsweise zahllose Erweiterungen in Form von NuGet-Paketen, die man leicht in einem VB.NET-Projekt verf&uuml;gbar machen kann. Aus VB.NET-Projekten kann man aber auch eine COM-DLL erzeugen, die wir wiederum von einem VBA-Projekt aus referenzieren und nutzen k&ouml;nnen. Und somit k&ouml;nnen wir auch den Funktionsumfang von Word, Excel, Outlook, Access und Co. erweitern. Dieser Artikel zeigt die Grundlagen zur Erstellung eines COM-Add-Ins, das wir von unseren Office-Anwendungen aus nutzen k&ouml;nnen.<\/b><\/p>\n<h2>Voraussetzung: Visual Studio .NET<\/h2>\n<p>Die einzige Voraussetzung, die wir neben der zu erweiternden Office-Anwendung brauchen, ist eine Version von Visual Studio .NET. Microsoft bietet eine f&uuml;r viele F&auml;lle kostenlos nutzbare Version an, die Du beispielsweise hier findest:<\/p>\n<pre>https:\/\/visualstudio.microsoft.com\/de\/vs\/community\/<\/pre>\n<h2>Visual Studio als Administrator &ouml;ffnen<\/h2>\n<p>Wenn wir die geplante DLL erstellen und testen wollen, ben&ouml;tigen wir in der Regel Administrator-Rechte. Dazu &ouml;ffnen wir Visual Studio direkt als Administrator. Dazu klicken wir mit der rechten Maustaste auf das Visual Studio-Icon und w&auml;hlen dort den Eintrag <b>Als Administrator ausf&uuml;hren <\/b>aus. Die anschlie&szlig;ende Meldung best&auml;tigen wir.<\/p>\n<h2>DLL-Projekt erstellen<\/h2>\n<p>Anschlie&szlig;end erstellen wir ein DLL-Projekt. Aus dem Startbildschirm von Visual Studio w&auml;hlen wir dazu den Eintrag <b>Neues Projekt erstellen <\/b>aus. Im Dialog Neues Projekt erstellen finden wir einige Auswahlfelder, mit denen wir die Auswahl aus Bild 1 treffen (<b>Visual Basic<\/b>, <b>Windows<\/b>, <b>Bibliothek<\/b>) und dann den Eintrag <b>Klassenbibliothek (.NET Framework) <\/b>selektieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_001.png\" alt=\"Auswahl des Typs f&uuml;r das neue Projekt\" width=\"649,627\" height=\"454,7387\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Auswahl des Typs f&uuml;r das neue Projekt<\/span><\/b><\/p>\n<p>Im n&auml;chsten Dialog namens Neues Projekt konfigurieren geben wir einen Projektnamen ein, in diesem Fall COMDLLBeispiel.<\/p>\n<p>Au&szlig;erdem w&auml;hlen wir den Speicherort f&uuml;r das Projekt aus und legen als <b>Framework <\/b>den Eintrag <b>.NET Framework 4.7.2 <\/b>fest (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_002.png\" alt=\"Eingabe von Projektname und Speicherort\" width=\"649,627\" height=\"454,7387\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Eingabe von Projektname und Speicherort<\/span><\/b><\/p>\n<p>Visual Studio nimmt sich nun einige Augenblicke Zeit, um das Projekt anzulegen und dieses anzuzeigen. Das Ergebnis sehen wir in Bild 3. Wir finden im Projektmappen-Explorer eine neue Projektmappe mit einer Klasse namens <b>Class1.vb <\/b>vor. Diese wollen wir als Erstes umbenennen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_003.png\" alt=\"Das neue Projekt in Visual Studio\" width=\"700\" height=\"338,8098\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das neue Projekt in Visual Studio<\/span><\/b><\/p>\n<h2>Umbenennen der Klasse <\/h2>\n<p>Das ist an sich kein Hexenwerk, wir wollen nur kurz kl&auml;ren, wo wir den Namen dieser Klasse sehen werden. Wenn wir die COM-DLL sp&auml;ter im VBA-Editor einer Office-Anwendung deklarieren und referenzieren, geschieht das in der folgenden Form:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>obj<span style=\"color:blue;\"> As <\/span>[Assemblyname].[Klassenname]<\/pre>\n<p>Neben dem Assemblynamen sollten wir also auch den Klassennamen so ausw&auml;hlen, dass wir nachher auch erkennen, was diese Klasse f&uuml;r Funktionen liefert.<\/p>\n<p>In unserem Beispiel spielt das allerdings keine gro&szlig;e Rolle und wir verwenden einfach <b>Beispielklasse<\/b>. Diesen Wert tragen wir im Projektmappen-Explorer <b>Beispielklasse.vb<\/b> statt <b>Class1.vb <\/b>ein.<\/p>\n<p>Visual Studio fragt nach, ob wir auch die Verweise auf diese Elemente umbenennen m&ouml;chten, was wir mit <b>Ja<\/b> beantworten (siehe Bild 4). Dadurch wird auch direkt der Klassenname im Code ge&auml;ndert:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_004.png\" alt=\"Umbenennen von Datei und Klasse\" width=\"499,6267\" height=\"195,558\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Umbenennen von Datei und Klasse<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> Beispielklasse\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<h2>Vorbereitungen in den Projekteigenschaften<\/h2>\n<p>Damit kommen wir zu den anzupassenden Einstellungen in den Projekteigenschaften. Diese &ouml;ffnen wir mit einem Doppelklick auf den Eintrag <b>My Project <\/b>im Projektmappen-Explorer.<\/p>\n<p>Hier k&ouml;nnen wir nun, falls gew&uuml;nscht, noch den Namen der Assembly anpassen &#8211; dieser Name erscheint sp&auml;ter im <b>Verweise<\/b>-Dialog des VBA-Editors (siehe Bild 5). Wichtiger ist jedoch ein Klick auf die Schaltfl&auml;che <b>Assemblyinformationen&#8230;<\/b>, mit dem wir einen weiteren Dialog &ouml;ffnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_005.png\" alt=\"Einstellungen in den Projekteigenschaften\" width=\"499,6267\" height=\"350,8194\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Einstellungen in den Projekteigenschaften<\/span><\/b><\/p>\n<p>Dieser hei&szlig;t <b>Assemblyinformationen<\/b> und hier aktivieren wir die Option <b>Assembly COM-sichtbar machen <\/b>(siehe Bild 6). Ohne diese Einstellung wird die COM-DLL sp&auml;ter gar nicht im <b>Verweise<\/b>-Dialog angezeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_006.png\" alt=\"Die Assemblyinformationen\" width=\"499,6267\" height=\"355,9325\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die Assemblyinformationen<\/span><\/b><\/p>\n<p>Danach schlie&szlig;en wir den Dialog wieder und aktivieren in den Projekteigenschaften den Bereich <b>Kompilieren<\/b>. Hier aktivieren wir die Option <b>F&uuml;r COM-Interop registrieren <\/b>(siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_007.png\" alt=\"Registrieren f&uuml;r COM-Interop\" width=\"649,627\" height=\"459,2853\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Registrieren f&uuml;r COM-Interop<\/span><\/b><\/p>\n<h2>Verweis bereits verf&uuml;gbar<\/h2>\n<p>Damit k&ouml;nnen wir das Projekt nun bereits erstellen. Wir w&auml;hlen dazu den Men&uuml;eintrag <b>COMDLLBeispiel erstellen <\/b>aus (oder die Tastenkombination <b>Strg + B<\/b>) &#8211; siehe Bild 8.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_378_009.png\" alt=\"Erstellen des Projekts\" width=\"649,627\" height=\"217,0947\"\/><\/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>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 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:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000378\/\">\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=\"\/data\/wp\/v2\/posts\/55000378?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<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000378\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"349bc4cffe\"\/>\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>VBA ist, formulieren wir es einmal freundlich, seit einiger Zeit nicht mehr aktualisiert worden. Hier und da gibt es kleine Anpassungen in den Objektbibliotheken, aber der Sprachumfang an sich hat keine gro&szlig;en Schritte gemacht. Auch VB.NET bringt nicht t&auml;glich neue Sprachkonstrukte hervor. Aber daf&uuml;r gibt es beispielsweise zahllose Erweiterungen in Form von NuGet-Paketen, die man leicht in einem VB.NET-Projekt verf&uuml;gbar machen kann. Aus VB.NET-Projekten kann man aber auch eine COM-DLL erzeugen, die wir wiederum von einem VBA-Projekt aus referenzieren und nutzen k&ouml;nnen. Und somit k&ouml;nnen wir auch den Funktionsumfang von Word, Excel, Outlook, Access und Co. erweitern. Dieser Artikel zeigt die Grundlagen zur Erstellung eines COM-Add-Ins, das wir von unseren Office-Anwendungen aus nutzen 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":[662023,66042023,44000035],"tags":[],"yst_prominent_words":[],"class_list":["post-55000378","post","type-post","status-publish","format-standard","hentry","category-662023","category-66042023","category-COMDLLs_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000378"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000378\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000378"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}