{"id":55001176,"date":"2019-02-01T00:00:00","date_gmt":"2020-05-13T21:05:54","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1176"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"COMAddIn_fuer_den_VBAEditor_programmieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/","title":{"rendered":"COM-Add-In f&uuml;r den VBA-Editor programmieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Der VBA-Editor hinkt Visual Studio um Lichtjahre hinterher. Doch es gibt gute Nachrichten: Mit einem COM-Add-In auf Basis von .NET k&ouml;nnen Sie auch den VBA-Editor noch um Funktionen erweitern. Das zeigen ja auch andere Werkzeugk&auml;sten wie etwa die MZ-Tools. Wir wollen in diesem Artikel einmal zeigen, wie Sie ein COM-Add-In in Visual Studio programmieren, das dann beim &ouml;ffnen des VBA-Editors zu seiner Erweiterung zur Verf&uuml;gung steht.<\/b><\/p>\n<p>In diesem Artikel schauen wir uns zun&auml;chst an, welche Schritte grunds&auml;tzlich zum Erstellen eines COM-Add-Ins f&uuml;r den VBA-Editor n&ouml;tig sind. Die Funktion des COM-Add-Ins beschr&auml;nken wir auf das N&ouml;tigste &#8211; darauf gehen wir dann in einem weiteren Artikel ein und f&uuml;gen dem Add-In dann n&uuml;tzliche Funktionen hinzu.<\/p>\n<h2>Neues Projekt erstellen<\/h2>\n<p>Visual Studio 2017 stellt zwar Projektvorlagen f&uuml;r COM-Add-Ins f&uuml;r die Office-Anwendungen Excel, Outlook, Word et cetera bereit, jedoch nicht f&uuml;r Access oder den VBA-Editor der Office-Anwendung. Also m&uuml;ssen wir uns selbst behelfen und die notwendigen Elemente selbst zusammenstellen.<\/p>\n<p>Dazu legen Sie unter Visual Studio zun&auml;chst ein neues Projekt mit der Vorlage <b>Visual Basic|Windows Desk-top|Klassenbibliothek <\/b>an und speichern dieses unter dem Namen <b>VBECOM-AddIn <\/b>(siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_001.png\" alt=\"Anlegen des neuen Projekts\" width=\"649,559\" height=\"360,1963\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anlegen des neuen Projekts<\/span><\/b><\/p>\n<p>Damit erstellen Sie ein neues Projekt, dass zun&auml;chst lediglich die Klasse <b>Class1.vb <\/b>enth&auml;lt.<\/p>\n<h2>Verweise hinzuf&uuml;gen<\/h2>\n<p>Danach f&uuml;gen wir dem Projekt einige Verweise hinzu, wobei Sie jeweils &uuml;ber den Men&uuml;eintrag <b>Projekt|Verweise hinzuf&uuml;gen&#8230; <\/b>starten. Hier wollen wir als einen Verweis auf die <b>Extensibility<\/b>-Bibliothek hinzuf&uuml;gen. Diese finden wir nur &uuml;ber den <b>Durchsuchen<\/b>-Dialog des Verweis-Managers, den Sie &uuml;ber die entsprechende Schaltfl&auml;che &ouml;ffnen (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_002.png\" alt=\"Verwalten der Verweise\" width=\"649,559\" height=\"331,3907\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Verwalten der Verweise<\/span><\/b><\/p>\n<p>Hier finden Sie dann etwa unter dem Verzeichnis <b>C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Visual Studio Tools for Office\\PIA\\Common <\/b>die Datei <b>Extensibility.dll <\/b>(siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_003.png\" alt=\"Auswahl der Datei Extensibility.dll\" width=\"649,559\" height=\"329,0983\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Auswahl der Datei Extensibility.dll<\/span><\/b><\/p>\n<p>Achtung: Wenn Sie einfach <b>Extensibility <\/b>in das Suchfeld eingeben, werden Sie vermutlich die falsche Version erwischen, was dazu f&uuml;hren kann, dass das Add-In nicht geladen werden kann!<\/p>\n<h2>Weitere Verweise hinzuf&uuml;gen<\/h2>\n<p>Danach erg&auml;nzen wir das Projekt um weitere Verweise, wozu wir ebenfalls den <b>Verweis-Manager <\/b>ben&ouml;tigen. Die weiteren Verweise finden Sie im Bereich <b>Assemblys<\/b>, wo Sie am einfachsten den passenden Suchbegriff in das Suchen-Feld eingeben. Die erste so zu erg&auml;nzende Bibliothek hei&szlig;t beispielsweise <\/p>\n<p>Sie ist in zwei verschiedenen Verzeichnissen verf&uuml;gbar, n&auml;mlich in <b>C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Visual Studio Tools for Office\\PIA\\Office15 <\/b>und <b>C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Visual Studio Tools for Office\\PIA\\Office15<\/b>. Wir konnten keinen Unterschied bei den beiden DLLs feststellen. Es spielt also keine Rolle, welche Sie verwenden. Also w&auml;hlen wir einfach einen der beiden aktuelleren Eintr&auml;ge aus (siehe Bild 4). Warum aber &uuml;berhaupt einen Verweis auf die Access-Bibliothek, obwohl wir doch ein COM-Add-In f&uuml;r den VBA-Editor erstellen wollen Ganz einfach: So haben wir auch die M&ouml;glichkeit, einmal auf die Objekte der Access-Datenbank zuzugreifen, um gegebenenfalls etwa VBA-Klassen auf Basis von Tabellen oder Formularen erstellen zu lassen. Auf die gleiche Weise f&uuml;gen wir nun auch noch Verweise auf die Bibliotheken <b>Microsoft.Office.Interop.Access.Dao<\/b>, <b>Microsoft.VBE.Interop <\/b>und <b>Microsoft.VBE.Interop.Forms <\/b>hinzu. Au&szlig;erdem ben&ouml;tigen wir etwa f&uuml;r die Anzeige von Meldungsfenstern noch den Namespace <b>System.Windows.Forms<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_004.png\" alt=\"Einbinden des Namespaces Microsoft.Office.Interop.Access\" width=\"649,559\" height=\"331,3907\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Einbinden des Namespaces Microsoft.Office.Interop.Access<\/span><\/b><\/p>\n<p>Insgesamt sieht die Liste der Verweise nun wie in Bild 5 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_005.png\" alt=\"Liste der Verweise des Projekts\" width=\"424,7115\" height=\"433,2058\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Liste der Verweise des Projekts<\/span><\/b><\/p>\n<h2>Klasse Connect erstellen<\/h2>\n<p>Nun f&uuml;gen wir dem Projekt eine neue Klasse namens <b>Connect <\/b>hinzu. Dazu w&auml;hlen Sie im Kontextmen&uuml; des Eintrags <b>VBECOMAddIn <\/b>des Projektmappen-Explorers den Befehl <b>Hinzuf&uuml;gen|Klasse&#8230;<\/b> aus.<\/p>\n<p>F&uuml;r die neue Klasse vergeben Sie im nun erscheinenden Dialog <b>Neues Element hinzuf&uuml;gen <\/b>den Namen <b>Connect <\/b>(siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_006.png\" alt=\"Hinzuf&uuml;gen der Klassendatei VBECOMAddIn\" width=\"649,559\" height=\"331,5145\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Hinzuf&uuml;gen der Klassendatei VBECOMAddIn<\/span><\/b><\/p>\n<h2>Namespaces hinzuf&uuml;gen<\/h2>\n<p>Der neuen Klassendatei f&uuml;gen wir nun zun&auml;chst die Verweise auf die Namespaces der soeben hinzugef&uuml;gten Bibliotheken hinzu, und zwar im Kopf des Moduls:<\/p>\n<pre>Imports Microsoft.Office.Interop\r\nImports Extensibility\r\nImports Microsoft.Office.Interop.Access\r\nImports Microsoft.Office.Interop.Access.Dao\r\nImports System.Windows.Forms\r\nImports System.Runtime.InteropServices\r\nImports Microsoft.Vbe.Interop\r\nImports Microsoft.Vbe.Interop.Forms<\/pre>\n<h2>Extensibility-Schnittstelle implementieren<\/h2>\n<p>Danach folgt ein Schritt, mit dem wir die Schnittstelle <b>Extensibility.IDTExtensibility2 <\/b>f&uuml;r die Klasse <b>Connect <\/b>implementieren. Dazu f&uuml;gen wir in der Zeile unterhalb der Zeile <b>Public Class Connect<\/b> die Anweisung <b>Implements <\/b>ein und erg&auml;nzen dann wie in Bild 7 zu erkennen auf <b>Implements Extensibility.IDTExtensibility2<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_007.png\" alt=\"Implementieren der Schnittstelle Extensibility.IDTExtensibility2\" width=\"549,6265\" height=\"283,553\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Implementieren der Schnittstelle Extensibility.IDTExtensibility2<\/span><\/b><\/p>\n<p>Diese Anweisung wird nun noch rot unterstrichen markiert. Der Grund ist einfach: Wir haben zwar angegeben, dass wir die Schnittstelle implementieren wollen, allerdings haben wir nicht alle Member dieser Schnittstelle implementiert. Einen Hinweis darauf liefert auch die Fehlerliste (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_008.png\" alt=\"Fehlende Member der Implementierung von Extensibility.IDTExtensibility2\" width=\"649,559\" height=\"262,8984\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Fehlende Member der Implementierung von Extensibility.IDTExtensibility2<\/span><\/b><\/p>\n<p>Diesen Fehler k&ouml;nnen wir allerdings recht schnell beheben. Dazu klicken Sie zun&auml;chst mit der rechten Maustaste auf den markierten Code und w&auml;hlen aus dem Kontextmen&uuml; den Eintrag <b>Schnellaktionen und Refactorings&#8230; <\/b>aus. Daraufhin erscheint eine Auswahl mit zwei M&ouml;glichkeiten, von denen wir den zweiten Eintrag namens <b>Schnittstelle implementieren <\/b>ausw&auml;hlen. Dies zeigt alle Member an, die durch diesen Schritt automatisch zur Klasse hinzugef&uuml;gt w&uuml;rden (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_009.png\" alt=\"Implementieren per Schnellaktionen und Refactorings\" width=\"700\" height=\"451,9868\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Implementieren per Schnellaktionen und Refactorings<\/span><\/b><\/p>\n<p>W&auml;hlen Sie diesen Eintrag aus, erg&auml;nzt diese Schnellaktion die Klasse wie in Bild 10.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_010.png\" alt=\"Die Klasse mit allen Membern der Implementierung der Schnittstelle Extensibility.IDTExtensibility2\" width=\"649,559\" height=\"440,7446\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Die Klasse mit allen Membern der Implementierung der Schnittstelle Extensibility.IDTExtensibility2<\/span><\/b><\/p>\n<h2>Neue GUID ermitteln<\/h2>\n<p>Nun ben&ouml;tigen wir eine eindeutige GUID, mit der wir das Add-In versehen. Diese ermitteln wir, indem wir den Men&uuml;punkt <b>Extras|GUID erstellen <\/b>aufrufen. Im nun erscheinenden Dialog w&auml;hlen wir die letzte Option aus und klicken zum Erstellen der neuen GUID auf die Schaltfl&auml;che <b>Neue GUID<\/b> (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_011.png\" alt=\"Ermitteln einer neuen GUID\" width=\"499,6607\" height=\"418,3455\" \/><\/p>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Ermitteln einer neuen GUID<\/span><\/b><\/p>\n<p>Dann kopieren Sie diese mit der Schaltfl&auml;che <b>Kopieren <\/b>in die Zwischenablage. Die GUID hat nicht exakt die Form, die wir ben&ouml;tigen, sodass wir diese noch etwas anpassen m&uuml;ssen.<\/p>\n<p>Dann f&uuml;gen wir diese in die Attribut-Klasse <b>ComVisible <\/b>direkt &uuml;ber der Zeile <b>Public Class Connect <\/b>ein und legen die <b>ProgID <\/b>auf <b>VBECOMAddIn.Connect <\/b>fest, also auf <b><Projektname>.<Klasse><\/b>. Das Ergebnis sieht dann wie folgt aus:<\/p>\n<pre>&lt;ComVisible(<span style=\"color:blue;\">True<\/span>), Guid(\"6317A901-A2F4-490F-961C-9AE170B734CD\"), ProgId(\"VBECOMAddIn.Connect\")&gt;\r\n<span style=\"color:blue;\">Public Class<\/span> Connect\r\n...\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Die hier angegebene GUID merken wir uns, da wir diese sp&auml;ter noch f&uuml;r verschiedene Registry-Eintr&auml;ge ben&ouml;tigen.<\/p>\n<p>Innerhalb des Klassenmoduls deklarieren wir zwei Variablen, die erstens einen Verweis auf den VBA-Editor (<b>VBE<\/b>) und das Add-In (<b>AddIn<\/b>) aufnehmen sollen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>_VBE<span style=\"color:blue;\"> As <\/span>VBE\r\n<span style=\"color:blue;\">Private <\/span>_AddIn<span style=\"color:blue;\"> As <\/span>AddIn<\/pre>\n<p>Danach ersetzen wir in der Methode <b>OnConnection <\/b>die Anweisung <b>Throw New NotImplementedException() <\/b>durch die Zeilen aus Listing 1.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OnConnection(Application<span style=\"color:blue;\"> As Object<\/span>, _\r\n     ConnectMode<span style=\"color:blue;\"> As <\/span>ext_ConnectMode, AddInInst<span style=\"color:blue;\"> As Object<\/span>, _\r\n     ByRef custom<span style=\"color:blue;\"> As <\/span>Array) Implements IDTExtensibility2.OnConnection\r\n     Try\r\n         _VBE = DirectCast(Application, VBE)\r\n         _AddIn = DirectCast(AddInInst, AddIn)\r\n         Select Case ConnectMode\r\n                 <span style=\"color:blue;\">Case <\/span>Extensibility.ext_ConnectMode.ext_cm_Startup\r\n                     MessageBox.Show(\"Add-In geladen (Startup): \" & _AddIn.ProgId)\r\n                 <span style=\"color:blue;\">Case <\/span>Extensibility.ext_ConnectMode.ext_cm_AfterStartup\r\n                     MessageBox.Show(\"Add-In geladen (AfterStartup): \" & _AddIn.ProgId)\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     Catch ex<span style=\"color:blue;\"> As <\/span>Exception\r\n         MessageBox.Show(ex.ToString())\r\n     End Try\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Ereignisprozedur beim Verbinden<\/span><\/b><\/p>\n<p>Die Methode erledigt gleich mehrere Schritte. Als Erstes werfen wir allerdings einen Blick auf die Parameter der Methode. Der erste Parameter namens <b>Application <\/b>liefert einen Verweis auf die aufrufende Anwendung. Der dritte hei&szlig;t <b>AddInInst <\/b>und liefert einen Verweis auf das Add-In selbst.<\/p>\n<p>Wir konvertieren die damit gelieferten Verweise mit der <b>DirectCast<\/b>-Methode in die Typen <b>VBE <\/b>und <b>AddIn<\/b>. Danach pr&uuml;fen wir den Inhalt des zweiten Parameters namens <b>ConnectMode<\/b>. Dieser kann verschiedene Werte liefern, zum Beispiel <b>ext_cm_Startup <\/b>oder <b>ext_cm_AfterStartup<\/b>. Diese haben die folgende Bedeutung:<\/p>\n<ul>\n<li><b>ext_cm_Startup<\/b>: Das Add-In wurde direkt beim Start geladen.<\/li>\n<li><b>ext_cm_AfterStartup<\/b>: Das Add-In wurde &uuml;ber den Add-In-Manager geladen.<\/li>\n<\/ul>\n<p>Wir wollen zum Testen in beiden F&auml;llen jeweils ein Meldungsfenster ausgeben, dass angibt, mit welchem Wert f&uuml;r den Parameter <b>ConnectMode <\/b>das Add-In gestartet wurde.<\/p>\n<p>F&uuml;r die Methode <b>OnStartupComplete <\/b>f&uuml;gen wir ebenfalls die Methode <b>MessageBox.Show <\/b>ein:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OnStartupComplete(ByRef custom<span style=\"color:blue;\"> As <\/span>Array) Implements IDTExtensibility2.OnStartupComplete\r\n     MessageBox.Show(\"Add-In geladen (OnStartupComplete): \" & _AddIn.ProgId)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>In den &uuml;brigen Methoden entfernen wir jeweils die Anweisung <b>Throw New NotImplementedException()<\/b>. Dies reicht allerdings noch nicht aus, um das Add-In auszuprobieren.<\/p>\n<h2>Eigenschaften des Projekts einstellen<\/h2>\n<p>Danach &ouml;ffnen Sie die Eigenschaften des Projekts &uuml;ber den Eintrag <b>My Project <\/b>des Projektmappen-Explorers. Hier pr&uuml;fen Sie zun&auml;chst, ob der Assemblyname und der Stammnamespace die gleichen Bezeichnungen aufweisen &#8211; in diesem Fall <b>VBECOMAddIn<\/b> (siehe Bild 12).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_012.png\" alt=\"Pr&uuml;fen der Bezeichnungen von Assembly und Stammnamespace\" width=\"649,559\" height=\"237,5485\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Pr&uuml;fen der Bezeichnungen von Assembly und Stammnamespace<\/span><\/b><\/p>\n<p>Nach diesem Schritt stellen wir auch noch f&uuml;r das Add-In ein, dass es f&uuml;r COM-Interop registriert werden soll, und zwar im Bereich <b>Kompilieren <\/b>der Eigenschaften des Projekts (Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_013.png\" alt=\"Registrierung f&uuml;r COM-Interop aktivieren\" width=\"649,559\" height=\"688,4215\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Registrierung f&uuml;r COM-Interop aktivieren<\/span><\/b><\/p>\n<p>Im gleichen Bereich pr&uuml;fen Sie auch noch, ob die Eigenschaft <b>Ziel-CPU <\/b>den Wert <b>AnyCPU <\/b>aufweist und korrigieren diesen gegebenenfalls.<\/p>\n<p>Au&szlig;erdem kontrollieren wir, ob die Option <b>Assembly signieren <\/b>im Bereich <b>Signierung<\/b> der Eigenschaften des Projekts deaktiviert ist (siehe Bild 14).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_014.png\" alt=\"Deaktivierung der Signierung der Assembly\" width=\"649,559\" height=\"343,4718\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Deaktivierung der Signierung der Assembly<\/span><\/b><\/p>\n<h2>Projekt erstellen<\/h2>\n<p>An dieser Stelle k&ouml;nnen wir das Projekt bereits erstellen, und zwar &uuml;ber den Men&uuml;befehl <b>Erstellen|Projektmappe erstellen<\/b>.<\/p>\n<p>Gegebenenfalls schl&auml;gt dies jedoch mit der Fehlermeldung aus Bild 15 fehl. Wir ben&ouml;tigen also Administrator-Berechtigungen, um das Add-In zu erstellen. Dazu schlie&szlig;en Sie Visual Studio und &ouml;ffnen es anschlie&szlig;end als Administrator. Wenn Sie eine Verkn&uuml;pfung zu Visual Studio in der Taskleiste haben, k&ouml;nnen Sie hier zuerst das Kontextmen&uuml; des Taskleisten-Eintrags &ouml;ffnen und dann das Kontextmen&uuml; des Eintrags <b>Visual Studio 2017<\/b>. Hier finden Sie dann den Befehl <b>Als Administrator ausf&uuml;hren<\/b>, mit dem Sie Visual Studio als Administrator starten (siehe Bild 16). In diesem Modus k&ouml;nnen Sie das Add-In dann ohne Probleme erstellen. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_016.png\" alt=\"&ouml;ffnen von Visual Studio als Administrator\" width=\"349,7625\" height=\"296,0952\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: &ouml;ffnen von Visual Studio als Administrator<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_015.png\" alt=\"Fehlermeldung beim Erstellen des Projekts ohne Administrator-Berechtigungen\" width=\"649,559\" height=\"183,5185\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Fehlermeldung beim Erstellen des Projekts ohne Administrator-Berechtigungen<\/span><\/b><\/p>\n<p>Damit sind die Arbeiten in Visual Studio bereits abgeschlossen und wir k&ouml;nnen uns den Eintr&auml;gen f&uuml;r die Registry widmen.<\/p>\n<h2>Registry-Eintr&auml;ge anlegen<\/h2>\n<p>Damit der VBA-Editor &uuml;berhaupt bemerkt, dass Sie sich die M&uuml;he gemacht haben, ein neues Add-In anzulegen, das die Funktionen des VBA-Editors erg&auml;nzen soll, nehmen Sie bestimmte Eintr&auml;ge in der Windows-Registry vor. Die betroffenen Bereiche der Registry werden beim Start des VBA-Editors standardm&auml;&szlig;ig durchsucht und die dort gefundenen Eintr&auml;ge ber&uuml;cksichtigt. F&uuml;r interne Zwecke reicht es aus, wenn wir die notwendigen Registry-Eintr&auml;ge halbmanuell eintragen. Wenn Sie ein Add-In weitergeben m&ouml;chten, sollten Sie es als Setup verpacken, aber diesen Schritt wollen wir an dieser Stelle noch nicht gehen. Halbmanuell hei&szlig;t, dass wir nicht direkt die Eintr&auml;ge im Registry-Editor vornehmen, sondern diese in eine <b>.reg<\/b>-Datei schreiben, die wir dann ausf&uuml;hren und so die Eintr&auml;ge zur Registry hinzuf&uuml;gen.<\/p>\n<p>Die <b>.reg<\/b>-Datei legen Sie als einfache Textdatei an, die Sie anschlie&szlig;end umbenennen &#8211; beispielsweise in <b>VBECOMAddIn.reg<\/b>. Diese enth&auml;lt zun&auml;chst einige Einstellungen, die angeben, welche Beschreibung f&uuml;r das Add-In hinterlegt werden soll, wie das Ladeverhalten aussieht und wie der Name des Add-Ins ist:<\/p>\n<pre>Windows Registry Editor Version 5.00\r\n[HKEY_CURRENT_USER\\Software\\Microsoft\\VBA\\VBE\\6.0\\Addins\\VBECOMAddIn.Connect]\r\n\"CommandLineSafe\"=dword:00000000\r\n\"Description\"=\"Grundger&uuml;st f&uuml;r ein COM-Add-In f&uuml;r den VBA-Editor\"\r\n\"LoadBehavior\"=dword:00000000\r\n\"FriendlyName\"=\"VBECOMAddIn\"\r\n...<\/pre>\n<p>Wenn Sie das Add-In nicht <b>VBECOMAddIn <\/b>genannt haben oder wenn Sie weitere Add-Ins mit anderen Namen erstellen, m&uuml;ssen Sie <b>VBECOMAddIn <\/b>entsprechend ersetzen. F&uuml;r <b>LoadBehavior <\/b>k&ouml;nnen Sie folgende Werte angeben:<\/p>\n<ul>\n<li><b>0<\/b>: Nicht <b>Geladen\/Endladen<\/b>, nicht <b>Beim Start laden<\/b>. Das Add-In wird nicht automatisch geladen, sondern muss vom Benutzer im Add-In-Manager manuell geladen werden. Die Einstellungen im Add-In-Manager des VBA-Editors sehen wie in Bild 17 aus. Nach dem Laden durch Aktivieren der Option <b>Geladen\/Entladen <\/b>wird der Registry-Wert auf <b>2 <\/b>eingestellt. Beim n&auml;chsten &ouml;ffnen des VBA-Editors steht der Wert aber wieder auf <b>0<\/b>.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_017.png\" alt=\"Unser Add-In nach dem Start des VBA-Editors mit der Einstellung 0 f&uuml;r die Registry-Eigenschaft LoadBehavior\" width=\"424,7115\" height=\"334,272\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Unser Add-In nach dem Start des VBA-Editors mit der Einstellung 0 f&uuml;r die Registry-Eigenschaft LoadBehavior<\/span><\/b><\/p>\n<li><b>1<\/b>: <b>Geladen\/Endladen<\/b>, <b>Beim Start laden<\/b>. Hier wird das Add-In direkt geladen &#8211; die Einstellungen sehen nun wie in Bild 18 aus. Nach dem ersten Start mit diesen Einstellungen hat der Registry-Eintrag den Wert <b>3<\/b>.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_018.png\" alt=\"Unser Add-In nach dem Start des VBA-Editors mit der Einstellung 1 f&uuml;r die Registry-Eigenschaft LoadBehavior\" width=\"424,7115\" height=\"334,272\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Unser Add-In nach dem Start des VBA-Editors mit der Einstellung 1 f&uuml;r die Registry-Eigenschaft LoadBehavior<\/span><\/b><\/p>\n<li><b>2<\/b>: Nicht <b>Geladen\/Entladen<\/b>, nicht <b>Beim Start laden<\/b>.<\/li>\n<li><b>3<\/b>: <b>Geladen\/Entladen<\/b>, <b>Beim Start laden<\/b>. Auch hier wird das Add-In direkt geladen. Der Wert bleibt auf <b>3 <\/b>stehen.<\/li>\n<\/ul>\n<p>In der Registry sieht der Bereich mit den soeben beschriebenen Eintr&auml;gen wie in Bild 19 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_019.png\" alt=\"VBE-Bereich der Registry mit unserem Add-In\" width=\"649,559\" height=\"237,032\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: VBE-Bereich der Registry mit unserem Add-In<\/span><\/b><\/p>\n<h2>Weitere Registry-Eintr&auml;ge<\/h2>\n<p>Mit diesen Registry-Informationen allein wird das Add-In jedoch noch nicht gestartet. Wir ben&ouml;tigen noch weitere Eintr&auml;ge. In diesen m&uuml;ssen wir die weiter oben f&uuml;r die Klasse <b>Connect <\/b>ermittelte GUID angeben und diese mit dem soeben definierten Schl&uuml;ssel <b>VBECOMAddIn.Connect <\/b>verkn&uuml;pfen. Das erledigen wir mit den folgenden Zeilen, die wir der oben begonnenen Registry-Datei <b>VBECOMAddIn.reg <\/b>hinzuf&uuml;gen. Hier ist besonders wichtig, dass Sie den Pfad der DLL-Datei exakt wie nachfolgend beschrieben angeben und diesen nat&uuml;rlich an den von Ihnen verwendeten Pfad anpassen:<\/p>\n<pre>[HKEY_CLASSES_ROOT\\WOW6432Node\\CLSID\\{6317A901-A2F4-490F-961C-9AE170B734CD}]\r\n@=\"VBECOMAddIn.Connect\"\r\n[HKEY_CLASSES_ROOT\\WOW6432Node\\CLSID\\{6317A901-A2F4-490F-961C-9AE170B734CD}\\Implemented Categories]\r\n[HKEY_CLASSES_ROOT\\WOW6432Node\\CLSID\\{6317A901-A2F4-490F-961C-9AE170B734CD}\\InprocServer32]\r\n@=\"mscoree.dll\"\r\n\"ThreadingModel\"=\"Both\"\r\n\"Class\"=\"VBECOMAddIn.Connect\"\r\n\"Assembly\"=\"VBECOMAddIn\"\r\n\"RuntimeVersion\"=\"v2.0.50727\"\r\n\"CodeBase\"=\"file:\/\/\/C:\\Users\\User\\Dropbox\\Daten\\Fachmagazine\\VisualStudioDatenbankentwicklung\\2018\\05\\VBAAddIn\\VBECOMAddIn\\VBECOMAddIn\\bin\\Debug\\VBECOMAddIn.dll\"\r\n[HKEY_CLASSES_ROOT\\WOW6432Node\\CLSID\\{6317A901-A2F4-490F-961C-9AE170B734CD}\\ProgId]\r\n@=\"VBECOMAddIn.Connect\"<\/pre>\n<p>Nun speichern Sie Registry-Datei unter <b>VBECOMAddIn.reg <\/b>und f&uuml;hren diese mit einem Doppelklick aus. Dabei erscheint erst eine R&uuml;ckfrage und dann schlie&szlig;lich die Best&auml;tigung &uuml;ber den Eintrag der Informationen in die Registry (siehe Bild 20).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_020.png\" alt=\"Meldungen beim Eintragen der Informationen in die Registry\" width=\"649,559\" height=\"276,5629\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Meldungen beim Eintragen der Informationen in die Registry<\/span><\/b><\/p>\n<p>Dabei entsteht zun&auml;chst der Registry-Eintrag aus Bild 21. Dieser ist die genaue Zuordnung der GUID zu der dazu geh&ouml;renden Bibliothek, also unserer Add-In-DLL. F&uuml;r den Schl&uuml;ssel <b>VBECOMAddIn.Connect <\/b>wird hierbei das Element <b>CLSID <\/b>auf den Wert der GUID festgelegt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_021.png\" alt=\"Die Verkn&uuml;pfung zwischen GUID und Klasse\" width=\"649,559\" height=\"113,198\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 21: Die Verkn&uuml;pfung zwischen GUID und Klasse<\/span><\/b><\/p>\n<p>Schlie&szlig;lich kommen noch einige Informationen wie in Bild 22 hinzu. Besonders wichtig ist hier, dass die Eigenschaft <b>CodeBase <\/b>den Pfad zur erzeugten DLL enth&auml;lt. Sollte dieser nicht vorhanden sein, f&uuml;gen Sie ihn noch hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_022.png\" alt=\"Werte f&uuml;r das Registry-Element InprocServer32\" width=\"649,559\" height=\"196,396\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 22: Werte f&uuml;r das Registry-Element InprocServer32<\/span><\/b><\/p>\n<h2>Add-In ausprobieren<\/h2>\n<p>Wir haben dem Add-In Meldungen hinzugef&uuml;gt, die erstens in der Methode <b>OnConnection <\/b>ausgef&uuml;hrt werden (hier gleich zwei) und zweitens in der Methode <b>OnStartupComplete<\/b>.  Wenn Sie nun nach dem Erstellen des Projekts und dem Eintragen der Registry-Informationen Access und dann den VBA-Editor &ouml;ffnen, geschieht erst einmal nichts. Kein Wunder, denn wir haben die Eigenschaft <b>LoadBehavior <\/b>in der Registry zun&auml;chst auf den Wert <b>0 <\/b>eingestellt. Dadurch werden die Eigenschaften <b>Geladen\/Entladen <\/b>und <b>Beim Start laden <\/b>f&uuml;r unser Add-In im Add-In-Manager zu Beginn erst einmal deaktiviert. Aktivieren Sie die Eigenschaft <b>Geladen\/Entladen <\/b>nun wie in Bild 23, &auml;ndert sich der Wert in der Spalte <b>Ladeverhalten <\/b>in der Liste der Add-Ins auf <b>Geladen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_1176_023.png\" alt=\"Laden des Add-Ins\" width=\"424,7115\" height=\"334,272\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 23: Laden des Add-Ins<\/span><\/b><\/p>\n<p>Schlie&szlig;en wir dann den Dialog, erscheint die Meldung, die durch den zweiten <b>Case<\/b>-Zweig der Methode <b>OnConnection <\/b>ausgel&ouml;st wird und die das Laden nach dem Starten der Anwendung aufzeigt. Der Wert des Registry-Eintrags <b>LoadBehavior <\/b>wird nach dem Schlie&szlig;en von Access auf <b>2 <\/b>eingestellt, wodurch dieser im Anschluss wieder auf <b>0 <\/b>zur&uuml;ckgesetzt wird.<\/p>\n<p>Nun &ouml;ffnen wir Access und den VBA-Editor erneut und aktivieren im Add-In-Manager des VBA-Editors beide Optionen, n&auml;mlich <b>Geladen\/Entladen <\/b>und <b>Beim Start laden<\/b>. Schlie&szlig;en wir den Dialog, erscheint wieder die gleiche Meldung wie oben (also zweite Bedingung in <b>OnStartupComplete<\/b>). <b>LoadBehavior <\/b>hat nun den Wert <b>3<\/b>. Dieser bleibt nach dem Schlie&szlig;en von Access erhalten.<\/p>\n<p>&ouml;ffnen wir Access nun erneut und wechseln dann zum VBA-Editor, erscheint schon vor dem Anzeigen des VBA-Editors die Meldung, die wir in der Methode <b>Startup <\/b>definiert haben und dann die der zweiten Bedingung der Methode <b>OnStartupComplete<\/b>.<\/p>\n<p>Erst dann erscheint der VBA-Editor. Damit kennen wir nun die grundlegenden Abl&auml;ufe. Da das Add-In in der Regel auch direkt beim &ouml;ffnen des VBA-Editors angezeigt werden soll, behalten wir den Wert <b>3 <\/b>f&uuml;r die Eigenschaft <b>LoadBehavior <\/b>in der Registry bei.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit diesem Artikel haben wir die Grundlagen zum Erstellen eines COM-Add-Ins auf Basis von Visual Basic f&uuml;r den VBA-Editor erl&auml;utert. In weiteren Artikeln zeigen wir, wie Sie das Add-In im VBA-Editor aufrufen k&ouml;nnen, zum Beispiel durch die Auswahl von Men&uuml;-, Symbol- oder Kontextmen&uuml;-Eintr&auml;gen oder auch durch Tastenkombinationen. Au&szlig;erdem werden wir praktische Anwendungsf&auml;lle f&uuml;r den Einsatz von COM-Add-Ins im VBA-Editor liefern.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VBECOMAddIn.zip<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/AE4D3260-B49D-429A-846B-52257B7793E3\/aiu_1176.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der VBA-Editor hinkt Visual Studio um Lichtjahre hinterher. Doch es gibt gute Nachrichten: Mit einem COM-Add-In auf Basis von .NET k&ouml;nnen Sie auch den VBA-Editor noch um Funktionen erweitern. Das zeigen ja auch andere Werkzeugk&auml;sten wie etwa die MZ-Tools. Wir wollen in diesem Artikel einmal zeigen, wie Sie ein COM-Add-In in Visual Studio programmieren, das dann beim &Ouml;ffnen des VBA-Editors zu seiner Erweiterung zur Verf&uuml;gung steht.<\/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":[66012019,662019,44000025],"tags":[],"class_list":["post-55001176","post","type-post","status-publish","format-standard","hentry","category-66012019","category-662019","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>COM-Add-In f&uuml;r den VBA-Editor programmieren - 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\/COMAddIn_fuer_den_VBAEditor_programmieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"COM-Add-In f&uuml;r den VBA-Editor programmieren\" \/>\n<meta property=\"og:description\" content=\"Der VBA-Editor hinkt Visual Studio um Lichtjahre hinterher. Doch es gibt gute Nachrichten: Mit einem COM-Add-In auf Basis von .NET k&ouml;nnen Sie auch den VBA-Editor noch um Funktionen erweitern. Das zeigen ja auch andere Werkzeugk&auml;sten wie etwa die MZ-Tools. Wir wollen in diesem Artikel einmal zeigen, wie Sie ein COM-Add-In in Visual Studio programmieren, das dann beim &Ouml;ffnen des VBA-Editors zu seiner Erweiterung zur Verf&uuml;gung steht.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:05:54+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"COM-Add-In f&uuml;r den VBA-Editor programmieren\",\"datePublished\":\"2020-05-13T21:05:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/\"},\"wordCount\":2714,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/4c7224d269ff45adbe48c58397cf39bf\",\"articleSection\":[\"1\\\/2019\",\"2019\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/\",\"name\":\"COM-Add-In f&uuml;r den VBA-Editor programmieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/4c7224d269ff45adbe48c58397cf39bf\",\"datePublished\":\"2020-05-13T21:05:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/4c7224d269ff45adbe48c58397cf39bf\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/4c7224d269ff45adbe48c58397cf39bf\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/COMAddIn_fuer_den_VBAEditor_programmieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"COM-Add-In f&uuml;r den VBA-Editor programmieren\"}]},{\"@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":"COM-Add-In f&uuml;r den VBA-Editor programmieren - 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\/COMAddIn_fuer_den_VBAEditor_programmieren\/","og_locale":"de_DE","og_type":"article","og_title":"COM-Add-In f&uuml;r den VBA-Editor programmieren","og_description":"Der VBA-Editor hinkt Visual Studio um Lichtjahre hinterher. Doch es gibt gute Nachrichten: Mit einem COM-Add-In auf Basis von .NET k&ouml;nnen Sie auch den VBA-Editor noch um Funktionen erweitern. Das zeigen ja auch andere Werkzeugk&auml;sten wie etwa die MZ-Tools. Wir wollen in diesem Artikel einmal zeigen, wie Sie ein COM-Add-In in Visual Studio programmieren, das dann beim &Ouml;ffnen des VBA-Editors zu seiner Erweiterung zur Verf&uuml;gung steht.","og_url":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:05:54+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"COM-Add-In f&uuml;r den VBA-Editor programmieren","datePublished":"2020-05-13T21:05:54+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/"},"wordCount":2714,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf","articleSection":["1\/2019","2019","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/","url":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/","name":"COM-Add-In f&uuml;r den VBA-Editor programmieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf","datePublished":"2020-05-13T21:05:54+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/4c7224d269ff45adbe48c58397cf39bf"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/COMAddIn_fuer_den_VBAEditor_programmieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"COM-Add-In f&uuml;r den VBA-Editor programmieren"}]},{"@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\/55001176","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=55001176"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001176\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}