Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2008.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Bauen Sie eigene Visual Basic 2008-COM-Add-Ins, um Funktionen zu Access oder zur VBA-Entwicklungsumgebung hinzuzufügen.

Techniken

VBA, Visual Basic 2008

Voraussetzungen

Access XP und höher, Visual Basic 2008 Express Edition

Beispieldateien

VB2008DLLs.zip

Shortlink

584

COM-Add-Ins mit Visual Basic 2008 Express Edition

André Minhorst, Duisburg

Für die Erstellung von COM-Add-Ins brauchte man bislang teure Werkzeuge - so schien es zumindest. Mit ein wenig Bastelei können Sie diese jedoch auch mit der kostenlosen Express Edition von Visual Basic 2008 selber bauen. Dies eröffnet eine Menge Möglichkeiten - aber lesen Sie doch einfach selbst.

COM-Add-Ins sind praktische Helferlein, die immer zu Diensten sind, wenn auch Access geöffnet ist. Im Beitrag Permanenter Query-Analyzer (s. Shortlink 544) haben wir ein solches Tool auf Basis von Visual Basic 6.0 vorgestellt, das jedoch ausschließlich mit Access 2007 zusammenarbeitet. Im vorliegenden Beitrag lernen Sie die Grundlagen kennen, um solche Add-Ins unter .NET und ohne das kostenpflichtige Visual Studio 6.0, dafür aber mit dem kostenlosen Visual Basic 2008 Express Edition zu programmieren. Mit Visual Basic 2008 können Sie COM-Add-Ins für Office 2003 und Office 2007 programmieren.

Voraussetzung für den Einsatz von COM-Add-Ins, die mit Visual Basic 2008 erstellt wurden, ist das .NET-Framework. Dieses ist jedoch genau wie Visual Basic 2008 Express Edition kostenlos, in der aktuellen Version genau genommen sogar zusammen mit diesem erhältlich.

Das ist der gravierende Nachteil gegenüber VB6-COM-Add-Ins, die ja meist einfach in Form einer DLL daherkommen und lediglich registriert werden müssen, damit man sie einsetzen kann.

Mit der Zeit wird man allerdings auch davon ausgehen können, dass beinahe jeder Windows-Rechner dieses Framework enthält. Außerdem sind COM-Add-Ins im Gegensatz zu den mit Access entwickelten Anwendungen ja auch eher Entwicklerwerkzeuge, die nicht für ein großes Zielpublikum vorgesehen sind, sondern nur für Entwickler, und deren Arbeitsrechner ist ja meist ohnehin mit halbwegs moderner Software ausgestattet.

Ein COM-Add-In besteht aus einer oder mehreren Funktionen, die vom Benutzer über die Menüleiste beziehungsweise Symbolleiste oder bei Access 2007 über das Ribbon aufgerufen werden können und entweder reinen in dem Add-In enthaltenen Code ausführt oder aber auch eine eigene Benutzeroberfläche zur Verfügung stellen, wie es beim QueryAnalyzer der Fall ist.

Im Hintergrund

COM-Add-Ins implementieren eine spezielle Schnittstelle namens IExtensibility. Diese liefert einige Ereignisprozeduren, die etwa beim Starten oder Schließen von Access ausgelöst werden. Damit Access beispielsweise beim Starten merkt, dass es da ein COM-Add-In gibt, dessen Ereignisse es feuern soll, trägt man das COM-Add-In in geeigneter Form in die Registry ein.

Access liest beim Start nach, ob dort COM-Add-Ins eingetragen sind, merkt sich diese und ruft deren Ereignisse auf. Da diese die Schnittstelle IDTExtensibility implementieren, das heißt, die dort definierten Methoden enthalten muss, benötigen Sie auch diese Schnittstelle in Form der Datei extensibility.dll.

Nun kommt diese Schnittstelle entweder mit einer der Vollversionen von Visual Studio 2008, für die man tief ins Portemonnaie greifen muss, oder mit einer älteren Version von Visual Studio. Und das war auch eines der größten Probleme beim Erstellen der Beispielanwendungen für diesen Beitrag: Es schien keine Möglichkeit zu geben, die extensibility.dll bereitzustellen, da diese offiziell nicht für Visual Basic 2008-Projekte verfügbar ist.

In der Annahme, dass die extensibility.dll auch nur mit Wasser kocht und keine weiteren Funktionen außer der Definition der Schnittstelle besitzt, erfolgten einige erfolglose Versuche, die extensibility.dll selbst herzustellen. Nach einigen Experimenten war es schließlich geschafft: Die in Visual Basic 2008 Express Edition fehlende IDTExtensibility2-Schnittstelle ließ sich mit eben jenem Produkt nachbauen.

Bevor wir zum Bau des eigentlichen COM-Add-Ins kommen finden Sie nachfolgend die Kurzanleitung zum Eigenbau der extensibility.dll.

IDTExtensibility2 selbst bauen

Die folgenden Ausführungen gehen von einem System mit Office 2003 und Visual Studio 2008 Express Edition aus. Wer eine Version höher als die Standard Edition besitzt, dürfte die extensibility.dll bereits auf dem System haben und kann diese gegebenenfalls auch weitergeben - in diesem Bereich konnten für diesen Beitrag mangels Professional-Version keine Nachforschungen angestellt werden. Mehr Informationen zu Visual Basic 2008 Express Edition und zur Installation der Software erhalten Sie im Beitrag Visual Basic 2008 Express Edition (Shortlink 580).

Nach dem Öffnen von Visual Studio legen Sie ein neues Projekt des Typs Klassenbibliothek mit dem Namen Extensibility an, ändern auch den Namen der einzigen vorhandenen Klasse von Class1.vb in Extensibility.vb und fügen den Code aus Listing 1 in die Klasse ein (den bestehenden Inhalt löschen Sie zuvor).

Listing 1: Code der Schnittstellendatei Extensibility.vb

Imports System.Runtime.InteropServices

Public Enum ext_ConnectMode

ext_cm_AfterStartup = 0

ext_cm_Startup = 1

ext_cm_External = 2

ext_cm_CommandLine = 3

ext_cm_Solution = 4

ext_cm_UISetup = 5

End Enum

Public Enum ext_DisconnectMode

ext_dm_HostShutdown = 0

ext_dm_UserClosed = 1

ext_dm_UISetupComplete = 2

ext_dm_SolutionClosed = 3D

End Enum

<ComImport(), _

Guid("B65AD801-ABAF-11D0-BB8B-00A0C90F2744"), _

TypeLibType(TypeLibTypeFlags.FAggregatable Or TypeLibTypeFlags.FHidden), _

InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _

Public Interface IDTExtensibility2

<DispId(1)> Sub OnConnection( _

<[In](), MarshalAs(UnmanagedType.IDispatch)> ByVal Application As Object, _

<[In]()> ByVal ConnectMode As ext_ConnectMode, _

<[In](), MarshalAs(UnmanagedType.IDispatch)> ByVal AddInInst As Object, _

<[In](), MarshalAs(UnmanagedType.SafeArray, SafeArraySubType:=VarEnum.VT_VARIANT)> ByRef custom As _

System.Array)

<DispId(2)> Sub OnDisconnection( _

<[In]()> ByVal RemoveMode As ext_DisconnectMode, _

<[In](), MarshalAs(UnmanagedType.SafeArray, safearraysubtype:=VarEnum.VT_VARIANT)> ByRef custom As _

System.Array)

<DispId(3)> Sub OnAddInsUpdate( _

<[In](), MarshalAs(UnmanagedType.SafeArray, safearraysubtype:=VarEnum.VT_VARIANT)> ByRef custom As _

System.Array)

<DispId(4)> Sub OnStartupComplete( _

<[In](), MarshalAs(UnmanagedType.SafeArray, safearraysubtype:=VarEnum.VT_VARIANT)> ByRef custom As _

System.Array)

<DispId(5)> Sub OnBeginShutdown( _

<[In](), MarshalAs(UnmanagedType.SafeArray, safearraysubtype:=VarEnum.VT_VARIANT)> ByRef custom As _

System.Array)

End Interface

Wenn Sie die Einfügemarke im Codefenster auf der Zeile Public Interface IDTExtensibility2 positionieren, sollte das Eigenschaftsfenster den Wert True für die Eigenschaft COM-sichtbar anzeigen - sonst holen Sie dies nach.

Damit nicht nur das Interface, sondern die gesamte Assembly COM-sichtbar ist, öffnen Sie mit einem Klick auf My Project im Projektmappen-Explorer die Eigenschaften, zeigen dort die Registerseite Anwendung an und klicken auf die Schaltfläche Assemblyinformationen... Dort aktivieren Sie die Option Assembly COM-sichtbar machen (s. Abb. 1).

missing image file

Abb. 2: Signieren der Assembly

Nun signieren Sie die Assembly noch: Dazu wechseln Sie erneut zu den Projekteigenschaften, zeigen dort die Registerseite Signierung an, aktivieren die Option Assembly registrieren... und wählen aus dem Kombinationsfeld Schlüsseldatei mit starkem Namen auswählen den Eintrag <Neu...> aus (s. Abb. 2). Folgen Sie den übrigen Anweisungen und schließen Sie den Vorgang ab.

missing image file

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Visual Basic 2008 Express Edition

Access-Add-Ins

Erweitern des VBA-Editors

Excel-Import-Assistent im Eigenbau

Add-Ins für den VBA-Editor installieren

.NET-Klassen und Formulare in Access nutzen

© 2003-2015 André Minhorst Alle Rechte vorbehalten.