Alphabetisches Register

Kennen Sie auch noch die guten alten Register-Einlagen für Aktenordner, die den Inhalt entweder nach Zahlen oder Buchstaben sortieren Ein solches Register können Sie auch unter Access in einem Formular nachbilden, beispielsweise für den schnellen Zugriff auf die Daten aller Kunden, deren Name mit einem bestimmten Buchstaben beginnt. Dieser Beitrag zeigt, wie Sie schnell ein solches Register erstellen und mit der gewünschten Funktion versehen.

Zu Beispielzwecken verwenden wir die Kundentabelle aus der Südsturm-Datenbank, unserer optimierten Version der Nordwind-Beispieldatenbank von Access 2003. Das Formular zur Anzeige des alphabetischen Registers soll den Namen frmKunden erhalten.

Fügen Sie diesem Formular ein Registersteuerelement hinzu und nennen Sie es tabKunden. Stellen Sie außerdem die Eigenschaft Feste Registerbreite so ein, dass die Großbuchstaben wie in Abb. 1 noch sichtbar sind, aber die Registerlaschen nicht zu viel Platz wegnehmen.

Obwohl Abb. 1 bereits alle Buchstaben anzeigt, sind Sie noch nicht so weit: Das Registersteuerelement zeigt beim Anlegen erst einige wenige Registerlaschen, die überdies noch nicht die gewünschten Beschriftungen enthalten.

Listing 3: Code der Klasse clsCommandbutton

Dim WithEvents m_cmd As Commandbutton
Public Property Set Commandbutton(cmd As Commandbutton)
    Set m_cmd = cmd
    m_cmd.OnClick = "[Event Procedure]"
End Property
Private Sub m_cmd_Click()
    m_cmd.Parent.KundenFiltern
End Sub

pic001.png

Abb. 1: Alphabetisches Register in der Entwurfsansicht

Außerdem sollten Sie den Registerlaschen auch entsprechende Namen geben.

Auch wenn der Aufwand für das Erstellen von 26 Registerlaschen und die Vergabe der Beschriftungen und Namen in einigen Minuten erledigt ist, geschieht dies per VBA-Code zuverlässiger.

Die Prozedur aus Listing 1 braucht hierzu kaum eine Sekunde: Sie öffnet das Formular frmKunden in der Entwurfsansicht, erstellt einen Verweis auf das Registersteuerelement tabKunden, löscht alle enthaltenen Registerseiten und erstellt 26 neue – für jeden Buchstaben des Alphabets eine, versehen mit dem Buchstaben als Beschriftung und einem Namen, der sich aus dem Präfix pge und dem jeweiligen Buchstaben zusammensetzt (pgeA, pgeB und so weiter).

Listing 1: Einstellen der Eigenschaften der Registerseiten

Public Sub RegisterEinrichten()
    Dim i As Integer
    Dim objTabControl As TabControl
    DoCmd.OpenForm "frmKunden", acDesign
    Set objTabControl = Forms!frmKunden!tabKunden
    Do While objTabControl.Pages.Count > 0
         objTabControl.Pages.Remove objTabControl.Pages.Count - 1
    Loop
    For i = 1 To 26
         With objTabControl
            .Pages.Add
            .Pages(i - 1).Caption = Chr(64 + i)
            .Pages(i - 1).Name = "pge" & Chr(64 + i)
        End With
    Next i
End Sub

Anzeige der Kunden im Unterformular

Jede Registerseite soll die Kunden anzeigen, deren Name mit dem Buchstaben auf der Registerlasche beginnt. Zur Darstellung der Kundenliste verwenden wir ein Unterformular, das seine Daten in der Datenblattansicht darstellt. Dazu erstellen Sie ein neues Formular, speichern es unter dem Namen sfmKunden, stellen die Datenherkunft auf die Tabelle tblKunden ein, ziehen alle benötigten Felder aus der Feldliste in den Detailbereich des Formularentwurfs (s. Abb. 2) und stellen schließlich die Eigenschaft Standardansicht auf Datenblatt ein.

pic002.png

Abb. 2: Das Unterformular zur Anzeige der Kundenliste in der Entwurfsansicht

Das Unterformular fügen Sie zum Formular mit dem Registersteuerelement hinzu, indem Sie es aus dem Datenblattfenster beziehungsweise dem Navigationsbereich in den Entwurf des Zielformulars ziehen.

Dabei gibt es zwei Möglichkeiten: Entweder Sie ziehen das Unterformular auf die aktuell ausgewählte Seite des Registersteuerelements, was sich dadurch bemerkbar macht, dass Access diese Seite schwarz einfärbt. Oder Sie ziehen das Unterformular an irgendeine Stelle außerhalb des Registersteuerelements.

Letzteres ist die richtige Variante: Wenn Sie das Unterformular auf eine Registerseite ziehen, würde Access dieses auch nur dann anzeigen, wenn der Benutzer die entsprechende Registerseite des Formulars ausgewählt hat. Während dies bei individuell gestalteten Registerseiten der richtige Weg ist, würde er bei unserer Lösung zur Überladung des Formulars führen: Wir müssten dann für jeden Buchstaben ein eigenes Unterformularsteuerelement zur Anzeige der Kunden mit dem jeweiligen Anfangsbuchstaben anlegen, was der Performance nicht zuträglich ist – selbst, wenn Sie dieses Unterformular jeweils erst dann füllen, wenn der Benutzer die entsprechende Registerseite aktiviert.

Wir legen also einfach ein einziges Unterformular neben dem Registersteuerelement ab und verschieben es dann wie in Abb. 3 über das Registersteuerelement.

pic003.png

Abb. 3: Das Registersteuerelement mit dem darüber platzierten Unterformular

Nun müssen wir noch dafür sorgen, dass das Unterformularsteuerelement nur diejenigen Datensätze der Tabelle tblKunden anzeigt, deren Name mit dem Buchstaben der gewählten Registerseite beginnt. Für diesen Zweck definieren wir im Klassenmodul zwei Ereignisprozeduren und eine weitere private Prozedur.

Klicken Sie in der Entwurfsansicht im Eigenschaftsfenster auf die Eigenschaft Beim Laden, wählen Sie dort den Eintrag [Ereignisprozedur] aus, klicken Sie auf die Schaltfläche mit den drei Punkten und ergänzen Sie die Prozedur Form_Load im VBA-Editor wie folgt:

Private Sub Form_Load()
    KundenFiltern
End Sub

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar