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

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2007.

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

Erstellen Sie ein COM-Add-In, welches das Ribbon von Access beständig um zusätzliche Einträge erweitert.

Techniken

Ribbon, VB6

Voraussetzungen

Access 2000 und höher, Visual Studio 6

Beispieldateien

-

Shortlink

526

Accessweites Ribbon mit VB6

André Minhorst, Duisburg

Wie man ein Ribbon zu einer Access 2007-Datenbank hinzufügt, ist hinlänglich bekannt. Etwas seltener trifft man Add-Ins an, die das Ribbon von Access 2007 anpassen - unabhängig davon, welche Datenbank gerade geöffnet ist. Dieser Beitrag zeigt, wie Sie mit Visual Basic 6 ein solches Ribbon erstellen.

Als Erstes benötigen Sie natürlich Visual Studio 6 (es funktioniert auch mit Visual Studio .NET, aber Sie erhalten dort nicht so eine kleine, schnuckelige DLL zum einfachen Weitergeben oder Registrieren, sondern müssen vor der Installation eine Menge Voraussetzungen erfüllen et cetera). Dort öffnen Sie mit dem Menübefehl Datei/Neues Projekt den Dialog Neues Projekt (s. Abb. 1). Hier wählen Sie den Eintrag Addin aus, um dieses aus einer Vorlage zu erstellen.

pic001.tif

Abb. 1: Anlegen eines neuen Projekts des Typs Addin

Das Projekt enthält ein Objekt namens Connect. Öffnen Sie dieses per Doppelklick auf den passenden Eintrag im Projekt-Explorer und passen Sie die folgenden Eigenschaften an:

  • Angezeigter Name des Add-Ins: Access-Ribbon-Add-In
  • Add-In-Beschreibung: Beispiel-Add-In zum Anpassen des Access-Ribbons
  • Anwendung: Microsoft Access
  • Version der Anwendung: Microsoft Access 12
  • Anfängliches Ladeverhalten: Startup

Nun öffnen Sie das Modul dieses Designers (Kontextmenü des Eintrags Connect im Projekt-Explorer, Befehl Code anzeigen). Es enthält bereits einige Elemente, die Sie aber wie auch das Element frmAddin allesamt löschen - Sie benötigen viel weniger als die enthaltenen Elemente, die Sie auch des Lerneffekts wegen komplett neu erstellen.

Damit beginnen Sie, indem Sie einen Verweis auf die Office-Bibliothek von Office 2007 setzen. Diesen finden Sie vermutlich nicht direkt auf Anhieb im passenden Dialog, den Sie mit Projekt/Verweise öffnen. Der Grund ist, dass standardmäßig der Eintrag Microsoft Office 8.0 Object Library gesetzt ist - dies war zum Zeitpunkt der Veröffentlichung von Visual Basic Standard. Entfernen Sie diesen Verweis, schließen Sie den Verweise-Dialog und öffnen Sie ihn erneut, um nun den richtigen Eintrag namens Microsoft Office 12.0 Object Library hinzuzufügen.

Damit das Add-In das Ribbon von Access überhaupt anpassen kann, müssen Sie natürlich zunächst einmal eine entsprechende Ribbon-XML-Datei erzeugen.

Diese darf für den Anfang ganz einfach aussehen:

<customUI xmlns="http://schemas.microsoft.com/

        office/2006/01/customui">

    <ribbon startFromScratch="true">

        <tabs>

            <tab id="tabBeispiel"
                    label="Beispiel">

                <group id="grpBeispiel"

                        label="Import">

                    <toggleButton id="tglBeispiel"

                        label="Beispiel"/>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

Dieses Ribbon-XML-Dokument blendet alle übrigen Einträge aus und fügt ein einziges Ribbon-Tab mit einer Umschaltfläche hinzu.

Speichern Sie das gewünschte Ribbon-XML-Dokument im gleichen Verzeichnis wie das Projekt und fügen Sie es dem Projekt als Ressourcendatei hinzu. Dazu klicken Sie im VB-Ressource-Editor auf die Schaltfläche Benutzerdefinierte Ressource hinzufügen und wählen im nun erscheinenden Dialog die soeben erstellte XML-Datei aus. Die Ressource sollte den Namen 101 haben, damit sie im folgenden Code gefunden wird.

In die Ribbon-Erstellung einklinken

Nun müssen Sie noch dafür sorgen, dass das Add-In irgendwie mitbekommt, wann Access 2007 gestartet wird und eventuelle externe Lieferanten für Ribbon-Informationen abfragt. Das erledigen Sie, indem Sie im Modul der Connect-Klasse zunächst die Schnittstelle IRibbonExtensibility implementieren:

Implements IRibbonExtensibility

Nun fehlt nur noch die Methode IRibbonExtensibility_GetCustomUI, die Sie durch die Auswahl der passenden Kombinationsfeldeinträge im oberen Bereich des Codefensters anlegen (s. Abb. 2) und wie folgt ergänzen:

pic002.tif

Abb. 2: Anlegen der einzigen Methode der IRibbonExtensibility-Schnittstelle

Private Function _
        IRibbonExtensibility_GetCustomUI( _
        ByVal RibbonID As String) As String

    Dim bin() As Byte

    Dim sXML As String

    Dim F As Integer

    On Error GoTo Fehler

    bin = LoadResData(101, "CUSTOM")

    sXML = StrConv(bin, vbUnicode)

    IRibbonExtensibility_GetCustomUI = sXML

Ende:

    Exit Function

Fehler:

    MsgBox Err.Number & " " & Err.Description, _
        vbCritical, _
        "Fehler in " _
        & "IRibbonExtensibility_GetCustomUI"

    Resume Ende

End Function

Das war es schon - Access zeigt nun, wenn Sie das Projekt starten oder kompiliert haben, beim nächsten Öffnen direkt ein Ribbon an, das nur noch die nackte Schaltfläche dieses Beispiels enthält.

Action!

Natürlich soll die Ribbon-Schaltfläche auch noch passende Aktionen auslösen, wenn der Benutzer sie betätigt. Dazu fügen Sie der Ribbon-Definition das entsprechende OnAction-Attribut hinzu und geben als Wert den Namen der aufzurufenden VB-Routine an, die Sie in einem Standardmodul des Projekts als öffentliche Prozedur anlegen.

<button id="btnBeispiel" label="Beispiel" onAction="OnAction_btnBeispiel" />

Die Routine selbst soll zu Testzwecken zunächst einmal nur ein Meldungsfenster anzeigen und sieht wie folgt aus:

Sub OnAction_btnBeispiel(control As _
        IRibbonControl)

    MsgBox "Gedrückt"

End Sub

Die Routine müssen Sie übrigens im Modul der Connect-Klasse speichern.

Mit Bild, bitte

Ein formvollendetes Ribbon soll natürlich Schaltflächen und sonstige Steuerelemente mit Symbolen anzeigen. Auch dies ist mit dem VB6-Projekt möglich. Bilddateien weist man den Ribbon-Steuerelementen zu, indem man diese in der XML-Definition angibt und eine VB-Funktion festlegt, mit der sie eingelesen werden.

Es gibt zwei Varianten, eine solche Funktion zu platzieren - die erste wird individuell für jedes Steuerelement ausgelöst, die zweite global für alle Steuerelemente, die das image-Attribut besitzen. In jedem Fall sollten Sie jedoch ein Bild mit Transparenz einsetzen, da Sie so die Hintergrundfarbe der Ribbon-Leiste beibehalten können. Als Bild-Ressourcen lassen sich aber nur Bitmaps und Symbole hinzufügen, wobei Letztere zwar Dateien mit der Endung .ico erwarten, aber offensichtlich Probleme mit dem Importieren neuerer Icon-Formate haben.

Daher speichern Sie beispielsweise eine .png-Datei als benutzerdefinierte Ressource und wandeln diese nach dem Einlesen mit LoadResData mit der Routine ArrayToPicture aus dem Modul mdlOGL von Sascha Trowitzsch in ein Objekt des Typs IPictureDisp um. Zusätzlich müssen Sie natürlich auch die XML-Definition des Ribbons anpassen, damit das Add-In die Bilddatei überhaupt lädt:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="LoadImage">

[...]

    <button id="btnBeispiel" label="Beispiel" onAction="OnAction_btnBeispiel" image="add.png" size="large" />

[...]

Außerdem fügen Sie dem Connect-Modul die folgende Routine hinzu:

Function LoadImage(imageID As String) As _
        stdole.IPictureDisp

    On Error GoTo errLoadImage

    Dim res() As Byte

    Dim obj As stdole.IPictureDisp

    res = LoadResData(imageID, "CUSTOM")

    Set obj = ArrayToPicture(res)

    Set LoadImage = obj

exitLoadImage:

    Exit Function

errLoadImage:

    MsgBox "Error " & Err.Number & " " _
        & Err.Description

    Resume exitLoadImage

End Function

Zusammenfassung und Ausblick

Die so hinzugefügte Ribbon-Anpassung wirkt sich nunmehr bei jedem Start von Access aus. Damit auch die übrigen Elemente noch angezeigt werden, sollten Sie noch das Attribut startFromScratch auf false setzen oder komplett entfernen. Eigenen Ideen zum Hinzufügen von Funktionen steht nun nichts mehr im Wege.

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.