Home > Artikel > Ausgabe 12/2012 > Das Registersteuerelement in der Praxis

Das Registersteuerelement in der Praxis

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Bereits ohne den Einsatz von VBA können Sie das Registersteuerelement prima nutzen, um die Steuerelemente eines Formulars platzsparend auf mehrere Registerseiten aufzuteilen. Aber erst VBA entfaltet die vollen Möglichkeiten dieses Steuerelements: Sie können damit programmgesteuert ermittelten, welche Registerseite gerade aktiv ist, diese automatisch einstellen oder sogar per VBA Registerseiten hinzufügen und entnehmen, wenn Sie dies nicht von Hand erledigen möchten.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1212_RegistersteuerelementPraxis.mdb.

Registersteuerelement programmieren

Bevor wir zu den Praxisbeispielen kommen, schauen wir uns an, wie Sie das Aussehen, das Verhalten und die Interaktion des Registersteuerelements per VBA beeinflussen können.

Aktuelle Seite abfragen

Wenn Sie für ein Registersteuerelement namens tab­BeispielVBA in einem Formular wie frmBeispiel­VBA aus Bild 1 die aktuell angezeigte Seite abfragen möchten, erledigen Sie dies etwa im Direktfenster mit folgender Anweisung:

Beispielregistersteuerelement

Bild 1: Beispielregistersteuerelement

Debug.Print Forms!frmBeispielVBA!tabBeispielVBA.Value

0

Ist die erste Seite aktiviert, liefert dies den Index der Seite, nämlich 0. Für die zweite Seite würde dies den Wert 1 liefern und so weiter. Da Value die Standardeigenschaft dieses Steuerelements ist, können Sie auch die Kurzform ohne Angabe der Eigenschaft verwenden:

Debug.Print Forms!frmBeispielVBA!tabBeispielVBA

Aktuelle Seite einstellen

Wenn Sie per VBA die aktuell sichtbare Registerseite einstellen möchten, gelingt dies auf ähnliche Weise, wie dieser Aufruf zeigt – ebenfalls testweise im Direktfenster abzusetzen:

Forms!frmBeispielVBA!tabBeispielVBA = 0

Damit aktivieren Sie die erste Registerseite, durch die Angabe anderer Werte die entsprechend indizierte Seite.

Informationen einer Seite ermitteln

Wenn Sie Informationen wie Name, Beschriftung et cetera einer bestimmten Seite des Registersteuerelements ermitteln möchten, können Sie dies mit der Pages-Auflistung erledigen. Damit greifen Sie über den Index oder den Namen der Registerseite auf alle enthaltenen Seiten zu.

Den Namen der ersten Registerseite erhalten Sie über das Direktfenster etwa so:

  Forms!frmBeispielVBA!tabBeispielVBA.Pages(0).Name

pge1

Die Beschriftung erhalten Sie auf ähnliche Weise:

Forms!frmBeispielVBA!tabBeispielVBA.Pages(0).Caption

Die Beschriftung etwa der ersten Seite des Registersteuerelements stellen Sie wie folgt ein:

Forms!frmBeispielVBA!tabBeispielVBA.Pages(0)._

Caption = "Seite 1"

Informationen zu allen Seiten, die sich aktuell im Registersteuerelement befinden, können Sie mit einer For Each-Schleife durchlaufen und ausgeben (diese Prozedur finden Sie im Beispielformular frmBeispielVBA):

Private Sub cmdAlleSeitennamen_Click()

     Dim pge As Page

     For Each pge In Me.tabBeispielVBA.Pages

         Debug.Print pge.Name

     Next pge

End Sub

Aktuelle Seite beim Klicken ausgeben

Wenn Sie beim Wechseln der Registerseite auswerten möchten, welche die aktuelle Seite ist, legen Sie dafür eine entsprechende Ereignisprozedur an. Aber für welches Ereignis? Das Registersteuerelement liefert zwei, die dafür in Frage kommen könnten – Beim Klicken und Bei Änderung.

Um herauszufinden, welches Ereignis beim Wechseln der Registerseite ausgelöst wird, legen Sie einfach für beide Ereigniseigenschaften den Wert [Ereignisprozedur] an und klicken je einmal auf die Schaltfläche mit den drei Punkten, um die entsprechende Ereignisprozedur anzulegen (siehe Bild 4).

Anlegen von Ereignisprozeduren für die Ereigniseigenschaften des Registersteuerelements

Bild 2: Anlegen von Ereignisprozeduren für die Ereigniseigenschaften des Registersteuerelements

Fügen Sie im VBA-Editor für beide Prozeduren einen Haltepunkt hinzu, indem Sie auf die graue Leiste links vom Code klicken (siehe Bild 2).

Ereignisprozeduren mit Haltepunkten

Bild 3: Ereignisprozeduren mit Haltepunkten

Zeigen Sie das Formular dann in der Formularansicht an und wechseln Sie die Registerseite. Dies öffnet den VBA-Editor, wobei die Prozedur tabBeispielVBA_Change gelb markiert ist (siehe Bild 3). Ein Klick auf die Taste F5 lässt den Code weiterlaufen. Die Prozedur tabBeispielVBA_Click wird jedoch nicht mehr gestartet. Dies bedeutet, dass nur das Ereignis Beim Ändern durch den Wechsel der Registerseite ausgelöst wird.

Nur diese Prozedur wird beim Wechsel der Registerseite ausgelöst.

Bild 4: Nur diese Prozedur wird beim Wechsel der Registerseite ausgelöst.

Fügen wir dieser Prozedur doch eine Anweisung hinzu, welche den Index der aktuellen Registerseite in einem Meldungsfenster ausgibt:

Private Sub tabBeispielVBA_Change()

     MsgBox Me!tabBeispielVBA

End Sub

Danach wollen wir aus dem Indexwert noch den Namen der Registerseite sowie die Beschriftung entnehmen. Dies gelingt durch die folgende Erweiterung – diesmal mit Debug.Print zur Ausgabe im Direktfenster:

Private Sub tabBeispielVBA_Change()

     Debug.Print Me!tabBeispielVBA, _

         Me!tabBeispielVBA.Pages(Me!tabBeispielVBA).Name

End Sub

Der erste Ausdruck liefert den Index (also den Wert der Value-Eigenschaft), der zweite Ausdruck den Namen der Registerseite. Dazu verwendet er die Pages-Auflistung, über die Sie mit der Angabe des Indexwertes auf alle Registerseiten zugreifen können. Name wiederum gibt den Namen des Registerseite-Elements aus.

Wann aber wird die Beim Klicken-Ereigniseigenschaft des Registersteuerelements ausgelöst? Dies gelingt ausschließlich, wenn Sie auf den freien Bereich im Kopf des Registersteuerelements klicken.

Registersteuerelement als Assistent

Die einzelnen Seiten des Registersteuerelements eignen sich hervorragend, um die einzelnen Schritte eines Assistenten abzubilden. Das gilt insbesondere, da Sie die Steuerelemente zum Abarbeiten der einzelnen Schritte so bequem auf verschiedenen Seiten des Registersteuerelements unterbringen und Schritt für Schritt bearbeiten können.

Bild 5 zeigt ein schematisches Beispiel für einen solchen Assistenten. Hier wird vereinfachend nur je ein Text auf jeder Seite des Assistenten angezeigt. Der Benutzer soll mit den beiden Schaltflächen Zurück und Weiter durch die einzelnen Schritte navigieren können. Die Besonderheit ist, dass nicht nur das Anklicken der beiden Schaltflächen die Anzeige der aktuellen Seite des Registersteuerelements beeinflussen soll. Andersherum soll die Zurück-Schaltfläche bei aktivierter erster Registerseite deaktiviert werden, denn weiter zurück kann der Benutzer an dieser Stelle nicht mehr gehen (siehe Bild 6). Und die Weiter-Schaltfläche soll, wenn der Benutzer die letzte Seite des Assistenten aufgerufen hat, den Text Beenden erhalten und umgekehrt (siehe Bild 7).

Beispiel für den Einsatz in einem Assistenten

Bild 5: Beispiel für den Einsatz in einem Assistenten

Ausblenden der Zurück-Schaltfläche für den ersten Schritt

Bild 6: Ausblenden der Zurück-Schaltfläche für den ersten Schritt

Ändern der Beschriftung der Weiter-Schaltfläche im letzten Schritt des Assistenten

Bild 7: Ändern der Beschriftung der Weiter-Schaltfläche im letzten Schritt des Assistenten

Damit dies gleich mit dem Laden des Formulars reibungslos klappt, ruft die durch die Ereigniseigenschaft Beim Laden ausgelöste Prozedur Form_Load eine weitere Prozedur namens SchaltflaechenEinstellen auf:

Private Sub Form_Load()

     Call SchaltflaechenEinstellen

End Sub

Diese kümmert sich dann um die korrekte Einstellung der Eigenschaften der betroffenen Steuerelemente:

Private Sub SchaltflaechenEinstellen()

     Me!cmdZurueck.Enabled = Not Me!tabAssistent = 0

     Select Case tabAssistent

         Case 2

             Me!cmdWeiter.Caption = "Beenden"

         Case Else

             Me!cmdWeiter.Caption = "Weiter"

     End Select

End Sub

Die Prozedur stellt zunächst den Wert der Eigenschaft Enabled der Schaltfläche cmdZurueck auf den Wert des folgenden Ausdrucks ein:

Not Me!tabAssistent = 0

Das bedeutet, das Enabled den Wert True das Steuerelement tabAssistent nicht den Wert 0 hat. Der Wert des Steuerelements entspricht dem Index der aktuell angezeigten Seite, also wird die Schaltfläche deaktiviert, wenn das Registersteuerelement die erste Seite anzeigt und aktiviert, wenn eine andere Seite erscheint.

Dies könnten Sie – übersichtlicher, aber auch länger – auch so schreiben:

If Me!tabAssistent = 0 Then

     Me!cmdWeiter.Enabled = False

Else

     Me!cmdWeiter.Enabled = True

End If

Der zweite Teil stellt innerhalb einer Select Case-Bedingung den Wert der Eigenschaft Caption der zweiten Schaltfläche namens cmdWeiter entweder auf den Wert Weiter oder auf Beenden ein.

Letzteres geschieht, wenn tabAssistent den Wert 2 hat, also die Seite mit dem Index 2 angezeigt wird (hier die dritte Seite). Um das Ganze flexibler zu gestalten, können Sie statt dem Wert 2 den folgenden Ausdruck verwenden:

Case tabAssistent.Pages.Count - 1

Die Count-Eigenschaft der Pages-Auflistung ermittelt die Anzahl der Seiten. Subtrahiert man 1 von diesem Wert, erhält man den Index der letzten Registerseite. Das Registersteuerelement kann nun beliebig viele Registerseiten enthalten – die Beschriftung der Schaltfläche cmdWeiter wird nur für die letzte Seite auf Beenden eingestellt.

Beim Öffnen des Formulars zeigt das Registersteuerelement automatisch die erste Registerseite an. Dadurch wird die Schaltfläche cmdZurueck gleich deaktiviert. Wenn der Benutzer nun auf die Schaltfläche Weiter klickt, soll die nächste Registerseite angezeigt werden. Dazu stellen Sie mit der folgenden Anweisung den Index auf den nächsthöheren Wert ein:

Me!tabAssistent = Me!tabAssistent + 1

Dies soll jedoch nur geschehen, wenn aktuell nicht die letzte Registerseite angezeigt wird. Dies prüfen Sie mit dem folgenden Ausdruck:

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!