Steuerelement-Design ab Access 2010

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Steuerelement-Design ab Access 2010

Mit Access 2010 hat Microsoft den Steuerelementen von Access einige neue Eigenschaften spendiert. Dabei können Sie die meisten Eigenschaften ganz einfach über die Benutzeroberfläche einstellen. Wer allerdings etwa Steuerelemente per VBA-Code zu Formularen hinzufügt oder diese in einem Rutsch anpassen möchte, muss Forschungsarbeit leisten: Die Zusammenhänge zwischen den Eigenschaften der Benutzeroberfläche und den entsprechenden VBA-Eigenschaften sind nämlich nicht auf den ersten Blick ersichtlich.

Voraussetzungen

Die in diesem Beitrag beschriebenen Techniken setzen mindestens Access 2010 voraus.

Neues ab Access 2010

Mit Access 2010 wurden einige neue Eigenschaften für Steuerelemente eingeführt. Dementsprechend wurden auch die Standardeigenschaften für die meisten Steuerelemente angepasst. Das ist leider hier und da etwas schiefgegangen ... siehe beispielsweise Bild 1. Dort haben wir einem Formular eine Schaltfläche und eine Umschaltfläche hinzugefügt.

Beispielformular mit der zu bearbeitenden Schaltfläche

Bild 1: Beispielformular mit der zu bearbeitenden Schaltfläche

Während die Schaltfläche als gelungen bezeichnet werden kann, ist bei der Umschaltfläche scheinbar etwas schiefgelaufen: Sie sieht aus wie eine gezoomte Variante eines eigentlich viel kleineren Steuerelements und unterscheidet sich deutlich vom Design der Schaltfläche.

Umschaltfläche – was ist passiert?

Wir werden nicht reproduzieren können, was Microsoft sich bei der Gestaltung dieses Steuerelements gedacht hat, dessen Design sich ja eigentlich an das der Schaltfläche anlehnen sollte. Interessanterweise hat Microsoft dieses scheinbare Problem noch nicht einmal in Access 2013 korrigiert – dort sieht die Umschaltfläche immer noch so wie im Sceenshot aus.

Aber es ist eine gute Möglichkeit, die Eigenschaften dieser beiden Steuerelemente zu untersuchen und herauszufinden, wie wir das Design der Umschaltfläche an das der Schaltfläche angleichen.

Über die Benutzeroberfläche gelingt dies übrigens recht leicht: Sie müssen im Formularentwurf lediglich eine nach Ihren Wünschen formatierte Schaltfläche markieren, auf den Ribbon-Eintrag Start|Zwischenablage|Format übertragen klicken und dann die Umschaltfläche anklicken.

Schon sieht die Umschaltfläche genauso aus wie die herkömmliche Schaltfläche (s. Bild 2).

Die Umschaltfläche lässt sich leicht anpassen.

Bild 2: Die Umschaltfläche lässt sich leicht anpassen.

Unterschiede zwischen Steuerelementen

Wir könnten nun das Eigenschaftsfenster zu Rate ziehen und Eigenschaft für Eigenschaft die Werte für die Schaltfläche und die Umschaltfläche vergleichen. Das geht allerdings auch eleganter: Wir speichern das Formular zunächst unter dem gewünschten Namen und sichern dessen Code dann als Textdatei auf der Festplatte. Angenommen, das Formular heißt frmSchaltflaechen, dann verwenden wir die folgende Anweisung:

SaveAsText acForm, "frmSchaltflaechen", currentproject.Path & "frmSchaltflaechen.txt"

Dies legt eine Textdatei im Verzeichnis der Datenbankdatei an. Diese öffnen wir und suchen uns die beiden Teile heraus, die mit Begin CommandButton beziehungsweise mit Begin ToggleButton beginnen. Kopieren Sie beide Teile und fügen Sie diese in neue Textdateien ein, erhalten Sie, wenn Sie diese nebeneinander positionieren, die Ansicht aus Bild 3.

Unterschiede der Eigenschaften von Umschaltfläche und Schaltfläche

Bild 3: Unterschiede der Eigenschaften von Umschaltfläche und Schaltfläche

Wie es aussieht, gibt es eine ganze Reihe von Eigenschaften, die wir uns ansehen müssen!

Formatierung per Benutzeroberfläche

Bevor wir uns die einzelnen VBA-Eigenschaften ansehen, werfen wir jedoch einen Blick auf die Möglichkeiten, welche die Benutzeroberfläche bietet. Diese finden Sie auf dem Ribbon-Tab Format, wenn Sie in der Entwurfsansicht eines Formulars auf eine Schaltfläche klicken.

Während Eigenschaften wie die zur Schriftformatierung sich nicht geändert haben, finden Sie in der Gruppe Steuerelementformatierung, die eigentlich recht unscheinbar aussieht, eine große Vielzahl neuer Möglichkeiten. Bild 4 zeigt die verschiedenen Einstellungen für alle Eigenschaften in aufgeklappter Form.

Möglichkeiten zum Formatieren von Schaltflächen

Bild 4: Möglichkeiten zum Formatieren von Schaltflächen

Designs analysieren

Wie aber erfahren wir nun, welche der vielen Einstellungen sich wie auf die VBA-Eigenschaften der betroffenen Steuerelemente auswirken? Ganz einfach: Wir vergleichen einfach Eigenschaft für Eigenschaft zwischen zwei verschiedenen Designs. Natürlich soll dies nicht manuell geschehen – wir erledigen dies per VBA-Code. Dazu erstellen Sie ein neues Formular namens frmEigenschaften und fügen diesem eine Schaltfläche namens frmSchaltflaeche hinzu.

Außerdem benötigen wir eine Tabelle, in der wir die Eigenschaftswerte des Formulars vor und nach einer Änderung speichern. Diese soll tblEigenschaften heißen und im Entwurf wie in Bild 5 aussehen. Wichtig ist, dass Sie für das Feld EigenschaftName einen eindeutigen Index definieren – auf diese Weise kann für jede Eigenschaft nur ein Satz von Werten gespeichert werden. Die beiden Felder EigenschaftWertAlt und EigenschaftWertNeu nehmen den vorherigen und den aktuellen Wert der Eigenschaft auf.

Tabelle zum Speichern der unterschiedlichen Eigenschaftswerte

Bild 5: Tabelle zum Speichern der unterschiedlichen Eigenschaftswerte

Für diese Tabelle erstellen Sie ein Unterformular namens sfmEigenschaften. Dieses zeigt die drei Felder EigenschaftName, EigenschaftWertAlt und EigenschaftWertNeu in der Datenblattansicht an.

Das Unterformular ziehen Sie in das bereits angelegte Formular frmEigenschaften. Die Kombination aus Haupt- und Unterformular sollte nun wie in Bild 6 aussehen.

Formular zum Ermitteln der Unterschiede zwischen zwei Designs

Bild 6: Formular zum Ermitteln der Unterschiede zwischen zwei Designs

Prozedur zum Speichern von Eigenschaften

Nun benötigen wir noch eine Prozedur, welche die aktuellen Eigenschaften der Schaltfläche frmSchaltflaeche in der Tabelle tblEigenschaften speichert. Diese lösen wir praktischerweise mit der einzigen Schaltfläche auf dem Formular aus. Die Prozedur sieht wie in Listing 1 aus. Sie füllt die Variable db mit einen Verweis auf die aktuelle Datenbank, um später die Execute-Methode nutzen zu können. Vor dem wenige Sekunden dauernden Durchlaufen und Speichern aller Eigenschaften zeigt die Prozedur den Mauszeiger als Sanduhr an und deaktiviert das Neuzeichnen des Formulars, da dieses sonst unnötig flackert. Diese beiden Einstellungen macht die Prozedur anschließend wieder rückgängig. Die Variable cmd wird mit einem Verweis auf die Schaltfläche cmdSchaltflaeche gefüllt. Die Eigenschaften müssen wir glücklicherweise nicht alle von Hand eintippen – wir können die Properties-Auflistung des CommandButton-Steuer­elements nutzen, um alle vorhandenen Eigenschaften in einer For Each-Schleife zu durchlaufen. Die Laufvariable prp dieser Schleife hat den Datentyp Property.

Private Sub cmdSchaltflaeche_Click()
     Dim prp As Property
     Dim cmd As CommandButton
     Dim strWertAlt As String
     Dim strWertNeu As String
     Dim db As DAO.Database
     Set db = CurrentDb
     DoCmd.Hourglass False
     Me.Painting = False
     Set cmd = Me!cmdSchaltflaeche
     For Each prp In cmd.Properties
         Select Case prp.Name
             Case "InSelection" 'nur in der Entwurfsansicht
             Case Else
                 On Error Resume Next
                 strWertAlt = Nz(DLookup("EigenschaftWertNeu", "tblEigenschaften", _
                     "EigenschaftName = '" & prp.Name & "'"), "")
                 strWertNeu = Replace(Nz(prp.Value, ""), "'", "''")
                 db.Execute "INSERT INTO tblEigenschaften(EigenschaftName, EigenschaftWertAlt, " _
                     & "EigenschaftWertNeu) VALUES('" _
                     & prp.Name & "', '" & strWertAlt & "', '" & strWertNeu & "')", dbFailOnError
                 Select Case Err.Number
                     Case 3022
                         db.Execute "UPDATE tblEigenschaften SET EigenschaftWertAlt = '" & strWertAlt _
                             & "', EigenschaftWertNeu = '" & strWertNeu & "' WHERE EigenschaftName = '" _
                             & prp.Name & "'", dbFailOnError
                     Case 0
                     Case Else
                     Debug.Print Err.Number, Err.Description
                 End Select
                 On Error GoTo 0
         End Select
         Me!sfmSchaltflaechen.Form.Requery
     Next prp
     Me.Painting = True
     DoCmd.Hourglass False
End Sub

Listing 1: Aufzeichnen der Eigenschaften einer Schaltfläche

In dieser Schleife prüfen wir in einer Select Case-Bedingung den Namen der Property. Bei der Eigenschaft InSelection soll nichts geschehen, da diese Eigenschaft nur in der Entwurfsansicht verfügbar ist. Für alle übrigen Eigenschaften deaktiviert die Prozedur zunächst kurzzeitig die Fehlerbehandlung – den Hintergrund erfahren Sie gleich.

Die Prozedur speichert nun einen eventuell bereits im Feld EigenschaftWertNeu der Tabelle tblEigenschaften gespeicherten Wert für die aktuelle Eigenschaft in der Variablen strWertAlt. Den bereits vorhandenen Wert ermittelt die Prozedur per DLookup, wobei der mit prp.Name ermittelte Eigenschaftsname als Vergleichswert beim Kriterium dient. Den aktuellen Wert der Eigenschaft speichert die Prozedur in der Variablen strWertNeu. Dabei ersetzt die Prozedur gleich eventuell im Eigenschaftswert enthaltene einfache Anführungszeichen durch zwei einzelne Anführungszeichen.

Schließlich legt die folgende INSERT INTO-Aktionsabfrage einen neuen Datensatz in der Tabelle tblEigenschaften an, wobei der Name sowie der alte und der neue Eigenschaftswert in den entsprechenden Feldern landen.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.