Zuletzt verwendete Datensätze im Ribbon

Die in diesem Formular zuletzt angezeigten Datensätze sollen auch per Ribbon angezeigt werden.

Bild 1: Die in diesem Formular zuletzt angezeigten Datensätze sollen auch per Ribbon angezeigt werden.

Im Beitrag “Zuletzt verwendete Datensätze per Listenfeld” zeige wir, wie Sie die zuletzt in einem Formular angezeigten Kundendatensätze in einem Listenfeld aufführen können, um diese schnell wieder zu öffnen. Vielleicht haben Sie im Formular zur Kundenverwaltung aber keinen Platz für diese Liste oder Sie möchten diese einfach immer verfügbar haben. Dann bietet sich das Ribbon als Ort für diese Liste an. Im vorliegenden Beitrag zeigen wir, wie Sie das Ribbon um ein Steuerelement zur Anzeige und Auswahl der zuletzt verwendeten Datensätze erweitern.

Als Formular zur Anzeige der Kundendaten verwenden wir das gleiche Formular, das wir im Artikel Zuletzt verwendete Datensätze per Listenfeld (www.access-im-unternehmen.de/1365) erstellt haben. Auf diese Weise können wir gleich abgleichen, ob das Ribbonsteuerelement die richtigen Datensätze anzeigt. Das Formular sieht wie in Bild 1 aus.

Die in diesem Formular zuletzt angezeigten Datensätze sollen auch per Ribbon angezeigt werden.

Bild 1: Die in diesem Formular zuletzt angezeigten Datensätze sollen auch per Ribbon angezeigt werden.

Welches Ribbonsteuerelement für die zuletzt verwendeten Datensätze

Als Erstes stellt sich die Frage, welches der Ribbonsteuer-elemente am besten für unsere Aufgabe geeignet ist. Eigentlich sind das alle Steuerelemente, die Listen von Einträgen anzeigen können, und dafür kommen die folgenden in Frage:

  • comboBox
  • dropDown
  • menu
  • dynamicMenu
  • gallery
  • splitButton

Und Sie können sogar, wenn Sie eine begrenzte Menge von zuletzt verwendeten Datensätzen anzeigen wollen, für jeden eine Schaltfläche anzeigen und so alle interessanten Datensätze gleichzeitig bereitstellen.

Wichtig ist nur, dass wir die Anzeige mit jedem neu im Formular verwendeten Datensatz aktualisieren, und das ist mit all diesen Elementen möglich. Also schauen wir uns anhand verschiedener Beispielen an, wie das gelingt.

comboBox oder dropDown

Die beiden Steuerelemente comboBox und dropDown haben verschiedene Eigenschaften, die sie für verschiedene Aufgaben prädestinieren. Wenn es darum geht, nicht nur den im jeweiligen Element ausgewählten Text zu ermitteln, sondern auch noch einen weiteren Wert wie beispielsweise einen Index oder eine Id für diesen Wert, dann ist das dropDown-Element die erste Wahl.

Also verwenden wir dieses als Erstes. Bevor wir es programmieren, benötigen wir jedoch noch eine Datensatzherkunft für die anzuzeigenden Elemente.

Abfrage für die zuletzt angezeigten Datensätze

In der oben beschriebenen Lösung haben wir alle Datensätze der Tabelle tblKunden, die im Formular frmKundenZuletzt angezeigt wurden, in die Tabelle tblKundenZuletzt eingetragen. Diese sah dann nach dem Durchlaufen einiger Datensätze wie in Bild 2 aus.

Tabelle mit den zuletzt angezeigten Datensätzen

Bild 2: Tabelle mit den zuletzt angezeigten Datensätzen

Das Listenfeld, das die zehn zuletzt verwendeten Datensätze angezeigt hat, nutzt eine Abfrage, um diese in der richtigen Reihenfolge aus dieser Tabelle auszulesen, also in umgekehrter Reihenfolge zum Anlegezeitpunkt.

Außerdem hatte diese Abfrage ein Kriterium, das dafür gesorgt hat, dass der aktuell im Formular angezeigte Datensatz nicht in der Liste erscheint, denn dieser Datensatz ist ja schon sichtbar.

Diese Abfrage, die direkt für das Listenfeld hinterlegt war, kopieren wir nun in eine neue Abfrage namens qryKundeZuletzt (siehe Bild 3). Danach entfernen wir das dort markierte Kriterium.

Abfrage zum Ermitteln der Datensätze in der richtigen Reihenfolge

Bild 3: Abfrage zum Ermitteln der Datensätze in der richtigen Reihenfolge

Warum das Weil es sein kann, dass das Ribbon auch angezeigt wird, obwohl das Formular gar nicht sichtbar ist.

Dann ist es natürlich wichtig, dass auch der zuletzt angezeigte Eintrag zur Auswahl steht.

Anlegen des Ribbons zur Anzeige des dropDowns

Um das Ribbon anzulegen, sind einige Schritte notwendig:

  • Hinzufügen einer Tabelle namens USysRibbons
  • Eintragen der Ribbondefinition in diese Tabelle
  • Hinzufügen der Callbackprozeduren für die Funktionalität des Ribbons
  • Festlegen der Ribbondefinition als Startribbon

Ribbontabelle mit Inhalt anlegen

Die Ribbontabelle ist eine Tabelle namens USysRibbons. Sie enthält die drei Felder RibbonID (Primärschlüsselfeld mit Autowert), RibbonName (Datentyp Kurzer Text) und RibbonXML (Datentyp Langer Text).

Ribbondefinition für das dropDown-Element erstellen

Die Ribbondefinition fügen wir in einen neuen Datensatz dieser Tabelle ein, für den wir außerdem den Wert ZuletztVerwendete im Feld RibbonName festlegen. Die Tabelle sieht dann wie in Bild 4 aus.

Die Tabelle USysRibbons mit der Ribbondefinition für die Anzeige der zuletzt angezeigten Datensätze im dropDown-Element

Bild 4: Die Tabelle USysRibbons mit der Ribbondefinition für die Anzeige der zuletzt angezeigten Datensätze im dropDown-Element

Die Ribbondefinition sehen Sie im Detail in Listing 1. Die meisten Elemente dienen der Herstellung der Struktur aus tab– und group-Element. Interessant ist das dropDown-Element mit den angegebenen Ereignisattributen. Hier legen wir die Prozeduren fest, die zum Füllen des dropDown-Elements nötig sind.

<xml version="1.0">
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad_ZuletztVerwendete">
   <ribbon>
     <tabs>
       <tab id="tabZuletztVerwendet" label="Zuletzt verwendet">
         <group id="grpZuletztDropDown" label="Zuletzt verwendet DropDown">
           <dropDown label="Zuletzt verwendet:" id="drpZuletztVerwendet" onAction="onAction" getItemCount="getItemCount" 
             getItemLabel="getItemLabel" getItemID="getItemID"/>
         </group>
       </tab>
     </tabs>
   </ribbon>
</customUI>

Listing 1: Die Definition des dropDown-Elements zur Anzeige der zuletzt verwendeten Datensätze

Ribbon-Verweis beim Laden speichern

Beim erstmaligen Anzeigen des Ribbons können wir das Ereignisattribut onLoad nutzen, um eine Prozedur anzugeben, die beim Laden des Ribbons ausgelöst wird. Hier geben wir den Wert onLoad_ZuletztVerwendete an.

Den Verweis auf die Ribbondefinition wollen wir in einer Variablen namens objRibbon_ZuletztVerwendete mit dem Datentyp IRibbonUI speichern. Dieser Datentyp ist in der Bibliothek Microsoft Office x.0 Object Library enthalten, auf die wir daher einen Verweis zum VBA-Projekt hinzufügen. Dazu wählen Sie im VBA-Editor den Menübefehl Extras|Verweise aus. Hier fügen Sie einen Verweis auf die genannte Bibliothek hinzu, sodass der Dialog anschließend wie in Bild 5 aussieht.

Hinzufügen eines Verweises auf die Office-Bibliothek

Bild 5: Hinzufügen eines Verweises auf die Office-Bibliothek

Nun können wir die Variable zum Referenzieren der Ribbondefinition zu einem neuen, leeren Modul namens mdlRibbons hinzufügen:

Public objRibbon_ZuletztVerwendete As IRibbonUI

Die beim Laden des Ribbons ausgeführte und in der Ribbondefinition für das Attribut onLoad des Elements customUI angegebene Prozedur definieren wir wie folgt:

Sub onLoad_ZuletztVerwendete(ribbon As IRibbonUI)
     Set objRibbon_ZuletztVerwendete = ribbon
End Sub

Die Prozedur liefert mit dem Parameter ribbon einen Verweis auf die Ribbondefinition, welche die Prozedur in objRibbon_ZuletztVerwendete speichert.

Hinzufügen der Callbackprozeduren für die Funktionalität des Ribbons

Nun wird es interessant, denn wir wollen das dropDown-Element mit den Daten aus der Abfrage qryKundenZuletzt füllen. Dazu haben wir im dropDown-Element drei Ereignisattribute mit entsprechenden VBA-Prozeduren definiert. In der ersten zählen wir die einzulesenden Elemente und tragen diese in ein Array ein, in der zweiten und dritten, die jeweils einmal für die ermittelte Anzahl aufgerufen werden, lesen wir die Daten aus dem Array aus und fügen die IDs und die Texte zum dropDown-Element hinzu. Als Erstes benötigen wir eine Variable, in der wir die anzuzeigenden Informationen speichern:

Private strZuletzt() As String

Danach folgt die Callbackprozedur, welche die Elemente zählt und im Array speichert. Diese füllt eine Recordset-Variable mit den Daten aus der Abfrage qryKundenZuletzt und durchläuft die einzelnen Datensätze in einer Do While-Schleife.

Dabei zählt sie die Elemente in der Variablen i und trägt gleichzeitig die Inhalte der Felder KundeID und Firma in das Array strZuletzt ein:

Sub getItemCount(control As IRibbonControl, ByRef count)
     Dim db As DAO.Database
     Dim rst As DAO.Recordset
     Dim i As Integer
     Set db = CurrentDb
     Set rst = db.OpenRecordset("SELECT * FROM  qryKundenZuletzt", dbOpenDynaset)
     Do While Not rst.EOF
         ReDim Preserve strZuletzt(1, i) As String
         strZuletzt(0, i) = rst!KundeID
         strZuletzt(1, i) = rst!Firma
         i = i + 1
         rst.MoveNext
     Loop
     count = i
End Sub

Die beiden folgenden Prozeduren werden danach für die mit count zurückgegebene Anzahl jeweils einmal aufgerufen. Die erste Prozedur getItemID liefert mit index den Index des mit id zurückzugebenden ID-Wertes, den wir aus der ersten Spalte des Arrays auslesen:

Sub getItemID(control As IRibbonControl,  index As Integer, ByRef id)
     id = strZuletzt(0, index)
End Sub

Die zweite Prozedur holt aus der zweiten Spalte des Arrays den anzuzeigenden Text für das Element:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar