Navigationssteuerelement in der Praxis

Das Navigationssteuerelement ermöglicht ein einfaches Handling von Unterformularen. Sie können damit etwa immer das gleiche Formular als Unterformular anzeigen und die Daten je nach gedrückter Navigationsschaltfläche filtern – beispielsweise um Artikel nach Kategorien zu sortieren oder nach dem Alphabet zu filtern. Dieser Beitrag zeigt, wie Sie eine solche Lösung erstellen – aber auch, wie Sie sich die Arbeit beim Erstellen des Formulars per VBA vereinfachen können.

Wenn Sie beispielsweise ein Navigationssteuerelement erstellen, mit dem Sie die Artikel oder Kunden in einer Datenbank nach dem Alphabet filtern möchten, ist erstmal umfangreiche Handarbeit gefragt: Immerhin wollen zumindest 26 Schaltflächen für den Aufruf eines Formulars mit den entsprechenden Filterkriterien erstellt werden.

Da diese Aufgabe eines Access-Entwicklers unwürdig ist, werden wir diese natürlich per VBA automatisieren. Um dies zu erledigen, sind ein paar Grundlagen erforderlich, die wir in einem einfachen Beispiel betrachten.

Ziel ist es, ein einfaches Navigationssteuerelement mit zwei Einträgen in der ersten Ebene und jeweils zwei Einträgen in der zweiten Ebene zu erstellen. Dieses sieht nach der Fertigstellung wie in Bild 1 aus.

pic001.png

Bild 1: Navigationssteuerelement mit verschachtelten Elementen

Die zur Erstellung dieses Formulars verwendete Prozedur nutzt eine Hilfsfunktion, die sich nur um das reine Formular kümmert. Diese heißt NeuesFormular, erwartet den Namen des zu erstellenden Formulars und sieht wie folgt aus:

Public Function NeuesFormular(strForm As String)
    Dim strFormTemp As String
    Dim frm As Form
    On Error Resume Next
    DoCmd.Close acForm, strForm
    DoCmd.DeleteObject acForm, strForm
    On Error GoTo 0
    Set frm = Application.CreateForm
    strFormTemp = frm.Name
    DoCmd.Close acForm, frm.Name, acSaveYes
    DoCmd.Rename strForm, acForm, strFormTemp
End Function

Die Funktion schließt zunächst ein eventuell vorhandenes Formular gleichen Namens und löscht dieses aus der Datenbank. Danach erstellt sie mit der CreateForm-Methode ein Formular-Objekt und speichert den Namen dieses neuen Formulars in der Variablen strFormTemp zwischen. Dies ist nötig, da das Formular im geöffneten Zustand nicht umbenannt werden kann. Also schließt die Funktion das Formular und benennt es dann mit der Rename-Funktion um. Anschließend startet die eigentliche Erstellung des verschachtelten Navigationssteuerelements. Die dazu verwendete Prozedur finden Sie in Listing 1.

Listing 1: Erstellen eines Formulars mit verschachtelter Navigation

Public Sub FormularErstellen()
    Dim frm As Form
    Dim strForm As String
    Dim ctlNavigation As NavigationControl
    Dim ctlSubnavigation As NavigationControl
    Dim ctlButton As NavigationButton
    strForm = "frmNaviPerVBA"
    NeuesFormular strForm
    DoCmd.OpenForm strForm, acDesign
    Set frm = Forms(strForm)
    Set ctlNavigation = Application.CreateControl(strForm, acNavigationControl, acDetail)
    ctlNavigation.Name = "nav"
    Set ctlSubnavigation = Application.CreateControl(strForm, acNavigationControl, acDetail)
    ctlSubnavigation.Name = "navSub"
    Set ctlButton = Application.CreateControl(strForm, acNavigationButton, acDetail, ctlNavigation.Name)
    With ctlButton
        .Name = "nab1"
        .Caption = "Button 1"
    End With
    Set ctlButton = Application.CreateControl(strForm, acNavigationButton, acDetail, ctlSubnavigation.Name)
    With ctlButton
        .Name = "nab11"
        .Caption = "Button 1-1"
    End With
    Set ctlButton = Application.CreateControl(strForm, acNavigationButton, acDetail, ctlSubnavigation.Name)
    With ctlButton
        .Name = "nab12"
        .Caption = "Button 1-2"
    End With
    Set ctlButton = Application.CreateControl(strForm, acNavigationButton, acDetail, ctlNavigation.Name)
    With ctlButton
        .Name = "nab2"
        .Caption = "Button 2"
    End With
    Set ctlButton = Application.CreateControl(strForm, acNavigationButton, acDetail, ctlSubnavigation.Name)
    With ctlButton
        .Name = "nab21"
        .Caption = "Button 2-1"
    End With
    Set ctlButton = Application.CreateControl(strForm, acNavigationButton, acDetail, ctlSubnavigation.Name)
    With ctlButton
        .Name = "nab22"
        .Caption = "Button 2-2"
    End With
    DoCmd.Close acForm, strForm, acSaveYes
End Sub

Die Prozedur ruft zunächst die bereits beschriebene Funktion zum Erstellen des eigentlichen Formulars auf. Dann öffnet sie dieses Formular in der Entwurfsansicht und referenziert es mit der Objektvariablen frm.

Die CreateControl-Methode des Application-Objekts erstellt ein Steuerelement des Typs acNavigationControl, und zwar in dem mit dem dritten Parameter angegebenen Formularbereich – hier dem Detailbereich (acDetail).

Dieses Steuerelement referenziert die Prozedur dann mit der als NavigationControl deklarierten Objektvariablen ctlNavigation. Über die Name-Eigenschaft dieser Variablen legt die Funktion die Bezeichnung nav für das Steuerelement fest.

Wir möchten dem Navigationssteuerelement ein weiteres Navigationssteuerelement unterordnen, was weniger Aufwand als erwartet bedeutet: Sie brauchen dazu nämlich einfach nur ein weiteres Navigationssteuerelement zum Formular hinzuzufügen. Es ist keine Angabe des übergeordneten Navigationssteuerelements nötig, diese Eigenschaft wird automatisch auf das bereits vorhandene Navigationssteuerelement eingestellt.

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

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar