Mit Access 2007 sind die Menüleiste und die Symbolleisten von Access weggefallen. Die Befehle wurden stattdessen in das so genannte Ribbon übertragen. Das Ribbon bietet wesentlich mehr Möglichkeiten als seine Vorgänger, aber es ist auch aufwändiger zu programmieren. Dies gelingt nicht mehr einfach per VBA, sondern Sie müssen sich zusätzlich auch noch in XML einarbeiten – zumindest in die grundlegenden Techniken. Das ist aber kein Problem, denn wir zeigen Ihnen in dieser Artikelreihe alles, was Sie wissen müssen, um Ihren Anwendungen selbst definierte Ribbons hinzuzufügen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1611_Ribbon.accdb.
Schaltfläche, Aktion – fertig!
In der ersten Ausgabe dieser Artikelreihe haben wir Ihnen gezeigt, wie Sie tab-, group– und button-Elemente zu einem Ribbon hinzufügen und eine Schaltfläche mit einem Attribut namens onAction ausstatten, für das wir eine VBA-Routine hinterlegen, die beim Anklicken der Schaltfläche ausgelöst wird. Damit haben wir schon die notwendigsten Funktionen des Ribbons abgedeckt. Aber es gibt natürlich noch viele Feinheiten und Erweiterungsmöglichkeiten sowie einige Steuerelemente, die wir Ihnen noch vorstellen werden. Bevor wir damit fortfahren, schauen wir uns allerdings noch an, wie Sie eine Schaltfläche eines Ribbons (und später auch andere Steuerelemente) mit Bilder ausstatten. So können Sie eine ansprechende und gleichzeitig ergonomische Benutzeroberfläche erstellen.
Bilder im Ribbon
Um Bilder auf den Schaltflächen des Ribbon anzuzeigen, benötigen Sie folgende Dinge:
- die anzuzeigende Bilddatei,
- die Angabe eines auf die Bilddatei verweisenden Eintrags für das Attribut image des jeweiligen Steuerelements,
- eine für das Callback-Attribut loadImage des Elements custom-UI hinterlegte VBA-Funktion, welche das Bild in die Schaltfläche lädt.
Außerdem benötigen wir einige Hilfsfunktionen, die wir in einem eigenen Modul in der Datenbank hinterlegen wollen.
Bilddatei hinzufügen
Um Bilder im Ribbon anzuzeigen, benötigen Sie zunächst eine entsprechende Bilddatei. Diese fügen Sie dann in die seit Access 2010 standardmäßig in einer Anwendung enthaltene Tabelle MSysRecourses ein. Das hört sich aufwendiger an, als es ist. Alles, was Sie dazu tun müssen, ist das öffnen eines Formulars in der Entwurfsansicht, ein Mausklick auf den Ribbon-Eintrag Entwurf|Bild einfügen|Bild einfügen|Durchsuchen … (siehe Bild 1) und die Auswahl der gewünschten Bilddatei im Grafik einfügen-Dialog.
Bild 1: Hinzufügen einer Bilddatei per Formular-Entwurf
Hier können Sie optimalerweise auf eine Bibliothek von Icons zugreifen wie im Beispiel aus Bild 2. Wir verwenden übrigens die Icon-Sammlung von www.iconexperience.com.
Bild 2: Auswahl der Bilddatei
Nachdem wir ein Bild zur Datenbank hinzugefügt haben, erscheint dieses in der Liste der Bilder im soeben zum Hinzufügen genutzten Ribbon-Dialog (siehe Bild 3).
Bild 3: Hinzugefügte Bilddatei im Ribbon
Außerdem, und das ist für uns entscheidend, erscheint die Bilddatei auch in der Tabelle MSysResources. Diese können Sie erst sehen, wenn Sie die Optionen Systemobjekte anzeigen und Ausblendete Objekte anzeigen der Optionen des Navigationsbereichs aktiviert haben. Dann erscheint in dieser Tabelle ein neuer Eintrag mit der hinzugefügten Bilddatei (siehe Bild 4). Dies ist der gängige Speicherplatz für Bilddateien, die in Schaltflächen in Formularen oder auch im Bild-Steuerelement angezeigt werden sollen. Wichtig ist, dass wir uns den Namen ohne Dateiendung merken, in diesem Fall also schlicht apple.
Bild 4: Neue Bilddatei in der Tabelle MSysResources
Hilfsroutinen hinzufügen
Nun fügen Sie das Modul mdlRibbonImages aus der Beispieldatenbank zu der Zieldatenbank hinzu, in der Sie das Ribbon anlegen und mit Bildern versehen möchten. Dieses enthält als wichtigstes Element für uns die Funktion PicFromSharedResource_Ribbon, die als einzigen Parameter den Wert des Bildes in der Spalte Name der Tabelle MSysResources erwartet. Sie liefert ein Objekt des Typs StdPicture zurück, welches wir in der nachfolgend definierten Ribbon-Callback-Routine direkt dem Ribbon-Steuerelement zuweisen können.
Routine loadImage hinzufügen
Zu dem Modul namens mdlRibbons, dem Sie schon im ersten Teil der Artikelreihe die onAction-Routine hinzufügt haben, fügen Sie nun noch die Routine aus Listing 1 hinzu. Diese hat zwei Parameter, von denen der erste vom aufrufende Steuerelement geliefert (control) und der zweite an dieses Steuerelement zurückgegeben wird (image). Innerhalb dieser Prozedur müssen wir nun einige Zeilen Code hinterlegen, welche dafür sorgen, dass die Bilddatei aus der Tabelle MSysResources an die Ribbon-Schaltfläche zurückgegeben wird, deren Name mit dem ersten Parameter übergeben wurde. Dazu lesen wir zunächst mit der DLookup-Funktion den Wert des Feldes ID für den Datensatz mit dem übergebenen Wert im Feld Name aus. Konnte dieser nicht gefunden werden, wird die Variable lngID nicht mit dem Wert aus ID, sondern mit dem Wert 0 gefüllt. Sollte bei diesem Aufruf der Fehler 3078 auftreten, ist die Tabelle MSysResources offensichtlich nicht vorhanden und muss dann nachträglich hinzugefügt werden, worauf eine entsprechende Meldung hinweist. Hat lngID den Wert 0, ist das angeforderte Bild nicht vorhanden, was ebenfalls zu einer Meldung führt.
Public Sub loadImage(control, ByRef image) Dim lngID As Long On Error Resume Next lngID = Nz(DLookup("ID", "MSysResources", "Name = '" & control & "'"), 0) If Err.Number = 3078 Then MsgBox "Die Tabelle 'MSysResources' mit den Images für die Anzeige im Ribbon fehlt." & vbCrLf _ & vbCrLf, vbOKOnly + vbExclamation, "Tabelle MSysResources fehlt" Exit Sub End If On Error GoTo 0 If lngID = 0 Then MsgBox "Das Image '" & control & "' ist nicht in der Tabelle MSysResources vorhanden. " & vbCrLf _ & "Fügen Sie dieses über zur Tabelle MSysResources hinzu, " & vbCrLf _ & "beispielsweise durch Hinzufügen eines Bildes zu einem Formular." Else Set image = PicFromSharedResource_Ribbon(CStr(control)) End If End Sub
Listing 1: Routine zum Laden einer Bilddatei in ein Ribbon-Steuerelement
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: