Tausendsassa Datenblatt – Teil 2

Ausgangszustand wieder herstellen

Wie oben versprochen, soll die Klasse auch dafür sorgen, dass der Ausgangszustand der Datenblattansicht wieder herstellt wird; das heißt, dass die Eigenschaften wieder auf die in den Feldern Originalbreite und Originalreihenfolge gespeicherten Werte zurückgesetzt werden. Außerdem werden alle Felder wieder eingeblendet und eine eventuell vorhandene Fixierung entfernt.

Diese Aktion muss natürlich irgendwie gestartet werden. Da die betroffenen Eigenschaften am schnellsten per Kontextmenü verändert werden können, ist dies natürlich ein geeigneter Platz für einen Befehl zum Initialisieren der Datenblattansicht. Im Detail soll dies wie in Bild 5 aussehen.

Bild 5: Kontextmenüeintrag zum Initialisieren der Datenblattansicht.
Bild 5: Kontextmenüeintrag zum Initialisieren der Datenblattansicht.

Da die Klasse zum Kapseln der Formularfunktionalität jeweils dynamisch zugewiesen wird, muss auch der passende Menüeintrag per VBA erzeugt werden. Dies geschieht in den Routinen KontextmenueErzeugen und KontextmenuepunktErzeugen (Listing 6 und 7). Der Grund, warum die gleiche Anweisung direkt in mehreren Kontextmenüs eingetragen wird, ist ganz einfach: Dieser Befehl soll möglichst im kompletten Datenblatt verfügbar sein, und dieses besteht nun einmal aus verschiedenen Bereichen.

Private Sub KontextmenueErweitern()
KontextmenuepunktAnlegen "Form Datasheet Column"
KontextmenuepunktAnlegen "Form Datasheet Subcolumn"
KontextmenuepunktAnlegen "Form Datasheet Row"
KontextmenuepunktAnlegen "Form Datasheet Cell"
End Sub

Private Sub KontextmenuepunktAnlegen(strMenue As String)
Dim cbr As Object
Dim cbc As Object
Set cbr = CommandBars(strMenue)
On Error Resume Next
cbr.Controls("Datenblatt zurücksetzen").Delete
On Error GoTo 0
Set cbc = cbr.Controls.Add(1)
cbc.BeginGroup = True
cbc.Caption = "Datenblatt zurücksetzen"
cbc.TooltipText = "Stellt die ursprüngliche Reihenfolge und Spaltenbreite _
wieder her."
cbc.OnAction = "=KonfigurationWiederherstellen()"
Set cbc = Nothing
Set cbr = Nothing
End Sub

Die Aufrufe der Routine aus Listing 7 sorgen dafür, dass alle betroffenen Kontextmenüs einen Eintrag namens Datenblatt zurücksetzen erhalten, der eine Funktion namens Konfiguration- Wiederherstellen aufruft. Diese Funktion muss öffentlich sein, daher legen Sie sie in einem Standardmodul an. Den Code der Funktion können Sie Listing 8 entnehmen.

Public Function KonfigurationWiederherstellen()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim sfmDatenblatt As SubForm
Dim strFormular As String
Dim strUnterformular As String
Dim strHauptformular As String
Set db = CurrentDb
strUnterformular = Screen.ActiveControl.Parent.Name
strHauptformular = Screen.ActiveControl.Parent.Parent.Name
Set sfmDatenblatt = Forms(strHauptformular).Controls(strUnterformular)
Set rst = db.OpenRecordset("SELECT * FROM tblFelder WHERE Formular = '" &
strUnterformular & "' ORDER BY LetzteReihenfolge")
sfmDatenblatt.Controls(rst!Feldname).SetFocus
DoCmd.RunCommand acCmdUnfreezeAllColumns
Do While Not rst.EOF
sfmDatenblatt.Controls(rst!Feldname).ColumnOrder = rst!Originalreihenfolge
sfmDatenblatt.Controls(rst!Feldname).ColumnWidth = rst!Originalbreite
sfmDatenblatt.Controls(rst!Feldname).ColumnHidden = rst!Versteckt
rst.MoveNext
Loop
Set rst = Nothing
Set db = Nothing
End Function

Die Funktion ermittelt zunächst über den Ausdruck Screen.ActiveControl.Parent das Unterformular in der Detailansicht und öffnet dann eine Datensatzgruppe mit den entsprechenden Datensätzen der Tabelle tblFelder. Nach dem eventuell notwendigen Aufheben der Fixierung stellt die Routine die Eigenschaften der Spalten auf die in der Tabelle gespeicherten Originalwerte ein.