Formular- und Datenbankeinstellungen speichern und wiederherstellen

Einstellungen von Access

Wichtig an den Access-Einstellungen sind beispielsweise die sichtbaren und unsichtbaren Befehlsleisten. Möchten Sie diese speichern, um sie bei Bedarf wieder einzublenden, ist das im Prinzip ganz schnell erledigt. Sie durchlaufen einfach alle Befehlsleisten und prüfen deren Visible-Eigenschaft. Die Namen aller Befehlsleisten, bei denen diese den Wert True hat, fügen Sie dann an eine semikolonseparierte Liste in der Variablen strNamen an. Diese Liste speichern Sie in der Registry (Listing 1).

Const appName = "MeineAnwendung" 'Hier eindeutigen Namen festlegen
Sub AnwEinstellungenSpeichern()
Dim objCBar As CommandBar
Dim strTemp As String
'Alte Einstellungen löschen
On Error Resume Next
DeleteSetting appName, "Anwendung", _
"Symbolleisten"
'Sichtbare Befehlsleisten ermitteln
On Error GoTo 0
For Each objCBar In Application.CommandBars
If objCBar.Visible = True Then
strTemp = strTemp & ";" & objCBar.Name
End If
Next objCBar
strTemp = Mid(strTemp, 2)
SaveSetting appName, "Anwendung", _
"Symbolleisten", strTemp
End Sub

Wichtig ist allerdings, dass Sie das Semikolon als Trennzeichen, das entweder hinter dem letzten Eintrag oder wie im Beispiel vor dem ersten Eintrag steht, abschneiden, bevor Sie den Wert speichern. Dazu wird hier noch die mid-Funktion aufgerufen und das erste Zeichen abgeschnitten. Im Anschluss wird die SaveSetting-Anweisung aufgerufen, um die Zeichenfolge zu speichern. Die Konstante appName ist dazu auf Modulebene definiert.

Das Lesen und Wiederherstellen der Einstellungen ist im Prinzip auch sehr einfach. Hier gilt jedoch zu beachten, dass Sie nicht zuerst alle Befehlsleisten ausblenden können, um dann die benötigten wieder einzublenden. Das geht deshalb nicht, weil zum einen mindestens eine Menüleiste sichtbar sein muss, zudem gibt es eingebaute Symbolleisten, die Sie nicht explizit ausblenden können. Aus diesem Grund müssen Sie in einem Rutsch alle unerwünschten Befehlsleisten einblenden und die nicht erwünschten ausblenden und dabei außerdem Fehlermeldungen unterdrücken (Listing 2).

Sub AnwEinstellungenLaden()
Dim objCBar As CommandBar
Dim strTemp As String
Dim arrString As Variant
strTemp = GetSetting(appName, "Anwendung", _
"Symbolleisten", "")
If strTemp > "" Then
arrString = Split(strTemp, ";")
Else
Exit Sub
End If
'Alle nicht gespeicherten Symbolleisten ausblenden
For Each objCBar In Application.CommandBars
On Error Resume Next
objCBar.Visible = inArray(objCBar.Name, arrString)
Next objCBar
On Error GoTo 0
End Sub
Function inArray(strWert As String, varArr As Variant) As Boolean
Dim strName As Variant
inArray = False
For Each strName In varArr
If strName = strWert Then
inArray = True
Exit For
End If
Next strName
End Function

Zuerst lesen Sie also die gespeicherte Zeichenkette aus der Registry aus und spalten sie dann mit der Split-Funktion in ein Array auf.

Anschließend durchlaufen Sie alle Befehlsleisten und prüfen für jede, ob deren Name im Array enthalten ist. Dazu benötigen Sie eine zusätzliche Funktion inArray. Ihr übergeben Sie das Array und den Namen der Befehlsleiste. Sie gibt einen booleschen Wert zurück, der bestimmt, ob der Wert im Array vorhanden ist. Sie müssen daher also nur der Visible-Eigenschaft den Rückgabewert der Funktion zuweisen.