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 5/2004.

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

Erweitern der VBA-Entwicklungsumgebung

André Minhorst, Duisburg

Wer hat sich nicht schon einmal die eine oder andere, vielleicht ganz individuelle Erweiterung der Entwicklungsumgebung von Access gewünscht? Klar, wie man sich einen Assistenten für bestimmte Aufgaben bastelt, ist in der Fachliteratur hinlänglich erklärt, aber den VBA-Editor mit zusätzlichen Funktionen versehen? Dieser Beitrag zeigt, wie Sie mit etwas Fremdhilfe von VB eine .dll-Datei entwickeln, die viele Wünsche erfüllen kann.

Die fertige Lösung

Wahrscheinlich verfügt nicht jeder Leser dieses Beitrags über das Microsoft Visual Studio. Das hätte den Nachteil, dass er nicht selbst Lösungen wie diese oder ähnliche erstellen kann - was einerseits sehr schade ist, denn wer die hier vorgestellte Technik einmal kennt, der möchte vermutlich für einige immer wiederkehrende Aufgaben eine automatische Lösung erstellen. Andererseits kommen Sie auch als Nicht-Visual Studio-Anwender in den Genuss der hier vorgestellten Lösung, da diese als .dll-Datei auf der Heft-CD vorliegt.

DLL registrieren

Um die fertige DLL im VBA-Editor verwenden zu können, müssen Sie diese zunächst registrieren. Dazu kopieren Sie die DLL in einen Ordner Ihrer Wahl (am besten zu den anderen DLLs im Windows-Verzeichnis unter System32).

Anschließend rufen Sie im Ausführen-Dialog (Start ( Ausführen) die Anweisung regsvr32 mit dem kompletten Pfad der DLL als Parameter auf. Beim nächsten Start von Access und der VBA-Entwicklungsumgebung stehen die Funktionen dann zur Verfügung.

Hinweis

Die DLL arbeitet mit Access ab Version 2000 zusammen. (

Nummerieren von Quellcode

Im Beitrag Professionelle Fehlerbehandlung in dieser Ausgabe von Access im Unternehmen finden Sie eine Fehlerbehandlung, die bei jedem aufgetretenen Fehler einen Eintrag in eine Datei vornimmt und dort die Fehlernummer, die Beschreibung, das Modul und die Prozedur, in der der Fehler auftritt, sowie die entsprechende Zeilennummer einträgt.

Dazu muss allerdings erst einmal eine Zeilennummer vorhanden sein; Access trägt diese nicht automatisch in eine Prozedur ein oder ermittelt diese wie andere Programmiersprachen. Wer schon einmal eine etwas umfangreichere Anwendung entwickelt hat, kann sich ungefähr vorstellen, wie viele Zeilen Code eine solche Anwendung enthält.

Der Aufwand, diese von Hand zu nummerieren, ist unverhältnismäßig groß. Hinzu kommt, dass - egal wie groß man die Abstände zwischen den einzelnen Zahlen wählt - garantiert irgendwann so viele Zeilen hinzukommen, dass man alles erneut nummerieren muss. Da kommt eine Funktion zum automatischen Nummerieren von Modulen doch gerade recht.

Wenn Sie die DLL ordnungsgemäß registriert haben, erscheint beim Öffnen der VBA-Entwicklungsumgebung eine neue Menüleiste mit drei Schaltflächen (s. Abb. 1).

Abb. 1: Zeilen nummerieren per Knopfdruck

Abb. 2: Hinzufügen einer Fehlerbehandlung

Mit einem Klick auf die Schaltfläche Modul nummerieren fügen Sie dem aktuellen Modul eine Nummerierung hinzu. Um diese wieder zu entfernen, klicken Sie einfach auf die Schaltfläche Modul entnummerieren.

Hinzufügen einer Fehlerbehandlung

Fehlerbehandlungen haben immer das gleiche Grundgerüst. Der VBA-Editor bietet auch eine eingebaute Funktion an, um eine rudimentäre Fehlerbehandlung zu integrieren, aber um die im Beitrag Professionelle Fehlerbehandlung vorgestellte Fehlerbehandlung zu verwenden, bedarf es ein paar Zeilen mehr.

Um eine Fehlerbehandlung in eine beliebige Prozedur zu integrieren, öffnen Sie einfach das gewünschte Modul, platzieren die Einfügemarke über der entsprechenden Prozedur und klicken auf die Schaltfläche Fehlerbehandlung hinzufügen. Das Ergebnis sieht beispielsweise wie in Abb. 2 aus.

Erstellen der .dll-Datei

Nur den wenigsten Anwendern dürfte bekannt sein, dass man mit einem VB-Programm die Entwicklungsumgebung von Access, nachfolgend kurz VBA-Editor genannt, um eigene Funktionen erweitern kann. Das VB-Programm nistet sich - einmal registriert - an der gewünschten Stelle im VBA-Editor ein und stellt dort fortan seine Funktionen zur Verfügung. Im vorliegenden Fall sollen die entsprechenden Funktionen über eine spezielle Menüleiste aufgerufen werden.

Um die .dll-Datei zu erstellen, benötigen Sie - wie oben erwähnt - Microsoft Visual Studio 6.0. Nach dem Start des Visual Studios bietet es Ihnen verschiedene Möglichkeiten zum Erstellen eines neuen Projekts an. Wählen Sie dort den Eintrag ActiveX-DLL aus.

Das nun erscheinende Bild mag Access-Entwicklern teilweise bekannt vorkommen, da es prinzipiell die gleichen Elemente wie der VBA-Editor enthält. Der wesentliche Unterschied ist, dass die Benutzeroberfläche der zu erstellenden Anwendungen ebenfalls hier und nicht in einer separaten Umgebung wie unter Access erzeugt werden kann.

Damit Sie das Projekt später identifizieren können, stellen Sie nun einige Eigenschaften (Menüeintrag Projekt/Eigenschaften von Projekt1...) wie in Abb. 3 ein. Entfernen Sie dann das Klassenmodul Class1 aus dem Objektexplorer (zu aktivieren mit Strg + R). Anschließend speichern Sie das Projekt unter dem Namen VBAExtensions.

Öffnen Sie nun den Dialog Komponenten (Menüeintrag Projekt/Komponenten) und aktivieren Sie auf der Registerseite Designer den Eintrag Addin Class.

Abb. 3: Eigenschaften des neuen Projekts

Abb. 4: Einstellungen des AddInDesigners

Abb. 5: Die letzten beiden Referenzen

Falls dadurch nicht automatisch eine neue Addin Class zu dem Projekt hinzugefügt wird, holen Sie das nach: Wählen Sie aus dem Kontextmenü des Eintrags VBAExtensions (VBAExtensions.vbp) im Projektexplorer den Eintrag Hinzufügen ( Addin Class aus.

Neben dem neuen Eintrag im Projektexplorer erscheint ein Dialog mit den Eigenschaften der neuen AddIn-Klasse. Ergänzen Sie die Eigenschaften wie in Abb. 4.

Stellen Sie außerdem im Eigenschaftsfenster des AddIn den Wert der Eigenschaft Public auf True ein. Die nachfolgende Meldung können Sie getrost bejahen.

Anschließend geben Sie dem Projekt noch die benötigten Referenzen mit auf den Weg. Im vorliegenden Fall benötigen Sie eine Referenz auf die Microsoft Office x.0 Object Library in der Version, die auf dem Zielrechner zum Einsatz kommt, sowie die Bibliothek Microsoft Visual Basic for Applications Extensibility 5.3
(s. Abb. 5).

Hinweis

Nachfolgend verwenden wir das Objektmodell des Microsoft Office Visual Basic Editors. Detaillierte Informationen finden Sie unter folgender Internetadresse (ohne Zeilenumbrüche): http://msdn.microsoft.com/library/default.asp?
url=/library/en-us/dnofftalk/html/office07042
002.asp (

Schließlich fügen Sie dem Projekt noch ein neues Modul hinzu, das lediglich eine Zeile enthält:

Public oVBE As VBIDE.VBE

Damit setzen Sie eine Referenz auf das oberste Objekt des entsprechenden Objektmodells und können darüber auf die Elemente des VBA-Editors zugreifen.

Um die DLL zu testen, folgt nun der übliche "Hello World"-Test. Öffnen Sie das Modul des AddInDesigner1 per Kontextmenü (Eintrag Code anzeigen). Wählen Sie aus dem linken Kombinationsfeld den Eintrag AddinInstance aus und es erscheint automatisch eine Ereignisprozedur, die Sie wie in Quellcode 1 ergänzen.

Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    ByVal AddInInst As Object, custom() As Variant)

    Set objVBAIDE = Application

    MsgBox "Hello World"

End Sub

Quellcode 1

Private cbbNummerieren As CommandBarButton

Private WithEvents evtNummerieren As CommandBarEvents

Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    ByVal AddInInst As Object, custom() As Variant)

    Set oVBE = Application

    Dim cbr As CommandBar

    Set cbr = oVBE.CommandBars.Add("VBAExtensions", Position:=msoBarTop, _
        Temporary:=True)

    cbr.Visible = True

    Set cbbNummerieren = cbr.Controls.Add(msoControlButton, Temporary:=True)

    cbbNummerieren.Style = msoButtonIconAndCaption

    cbbNummerieren.FaceId = 11

    cbbNummerieren.Caption = "Modul nummerieren"

    Set evtNummerieren = oVBE.Events.CommandBarEvents(cbbNummerieren)

End Sub

Quellcode 2

Kompilieren Sie das Projekt nun über den Menüeintrag Datei/VBAExtensions.dll erstellen... und probieren Sie die DLL aus, indem Sie eine Access-Datenbank öffnen und mit Strg + G den VBA-Editor aktivieren. Wenn das gewünschte Meldungsfenster erscheint, haben Sie bisher alles richtig gemacht - ansonsten überprüfen Sie nochmals die vorherigen Schritte.

Hinweis

Um während der Entwicklung die Fortschritte mitzuverfolgen und gegebenenfalls den Code zu debuggen, setzen Sie die gewünschten Haltepunkte und starten das Projekt per F5. Das anschließende Öffnen von Access und Aufrufen des VBA-Editors verwendet dann das Projekt wie die richtige DLL. (

Menü mit Schaltflächen
hinzufügen

Um die drei nachfolgend vorgestellten Funktionen im VBA-Editor starten zu können, benötigen Sie eine entsprechende Menüleiste mit drei Schaltflächen.

Der Übersicht halber enthält Quellcode 2 nur die Anweisungen für die Erstellung der ersten Schaltfläche mit der Beschriftung Modul nummerieren.

Die beiden ersten Zeilen des Moduls enthalten Deklarationen einer Objektvariablen für die Schaltfläche sowie die Deklaration der Ereignisse für die enthaltenen Schaltflächen.

Die Prozedur, die soeben noch den "Hello World"-Test enthielt, bestücken Sie nun wie in Quellcode 2. Die Prozedur erstellt zunächst eine neue Menüleiste mit dem Namen VBAExtensions, die nach dem Setzen der Visible-Eigenschaft auf den Wert True direkt unter den anderen Menüleisten erscheint und mit dem Schließen des VBA-Editors wieder verschwindet.

Anschließend fügt die Prozedur der Menüleiste eine Schaltfläche mit der Beschriftung Modul nummerieren hinzu und stellt das im Modulkopf deklarierte Objekt evtNummerieren so ein, dass es auf die Ereignisse der soeben angelegten Schaltfläche reagiert.

Sie müssen nun nur noch die entsprechende Ereigniseigenschaft für die neue Schaltfläche anlegen. Behilflich ist Ihnen dabei der Editor: Im linken Kombinationsfeld hat er mittlerweile einen Eintrag namens evtNummerieren hinzugefügt, dessen Auswahl automatisch eine Ereigniseigenschaft anlegt. Ergänzen Sie diese wie in folgendem Beispiel und sagen Sie das zweite Mal in diesem Beitrag "Hello World":

Private Sub evtNummerieren_Click(ByVal _
    CommandBarControl As Object, _
    handled As Boolean, CancelDefault _
    As Boolean)

    MsgBox "Hello World"

End Sub

An dieser Stelle führt das Öffnen von Access und dem VBA-Editor zum Bild aus Abb. 6.

Abb. 6: Die neue Menüleiste inklusive Schaltfläche

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:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.