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.
Bild 1: Beispielformular mit der zu bearbeitenden SchaltflächeWä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).
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.
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.
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.
Bild 5: Tabelle zum Speichern der unterschiedlichen EigenschaftswerteFü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.
Bild 6: Formular zum Ermitteln der Unterschiede zwischen zwei DesignsProzedur 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-Steuerelements 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.