Access kennt keine Themes – also baue ich sie selbst

Wenn Du Light/Dark-Modus in Access willst, musst Du Hand anlegen.
Kein native Theme-Engine. Keine CSS.
Aber: Mit sauberer VBA-Logik geht’s trotzdem.

Ich zeig Dir, wie ich es mache.

Farbdefinitionen zentral verwalten

Ich lege alle Farbwerte in einer Tabelle ab.

Beispiel: Tabelle tblDesign

ThemeElementFarbeHex
lightHintergrund#FFFFFF
lightText#000000
darkHintergrund#1E1E1E
darkText#DADADA

Das kann man erweitern: Button-Farben, Rahmen, Hover, etc.

Farbe aus Tabelle laden

Function HoleFarbe(theme As String, element As String) As Long
  Dim hex As String
  hex = Nz(DLookup("FarbeHex", "tblDesign", "Theme='" & theme & "' AND Element='" & element & "'"), "#FFFFFF")
  HoleFarbe = RGB(CInt("&H" & Mid(hex, 2, 2)), _
                  CInt("&H" & Mid(hex, 4, 2)), _
                  CInt("&H" & Mid(hex, 6, 2)))
End Function

Theme beim Öffnen anwenden

Ich speichere das aktuelle Theme z. B. in einer Konfig-Tabelle oder als globale Variable.

Anwendung auf Formular:

Sub AnwendenDesign(frm As Form, theme As String)
  On Error Resume Next

  frm.Detail.BackColor = HoleFarbe(theme, "Hintergrund")

  Dim ctl As Control
  For Each ctl In frm.Controls
    Select Case ctl.ControlType
      Case acLabel, acTextBox
        ctl.ForeColor = HoleFarbe(theme, "Text")
      Case acCommandButton
        ctl.BackColor = HoleFarbe(theme, "ButtonHintergrund")
        ctl.ForeColor = HoleFarbe(theme, "ButtonText")
    End Select
  Next
End Sub

Theme bei Formularstart setzen

Im Form_Load-Ereignis:

Private Sub Form_Load()
  Call AnwendenDesign(Me, AktuellesTheme)
End Sub

AktuellesTheme kann z. B. eine globale Variable sein:

Public AktuellesTheme As String

Oder aus Tabelle geladen:

Function LadeAktuellesTheme() As String
  LadeAktuellesTheme = Nz(DLookup("Wert", "tblEinstellungen", "SchlĂŒssel='Theme'"), "light")
End Function

Theme umschalten per Button

Private Sub btnThemeWechseln_Click()
  If AktuellesTheme = "light" Then
    AktuellesTheme = "dark"
  Else
    AktuellesTheme = "light"
  End If

  Call AnwendenDesign(Me, AktuellesTheme)
End Sub

Optional: Theme in Tabelle speichern.

Sub SpeichereTheme(theme As String)
  CurrentDb.Execute "UPDATE tblEinstellungen SET Wert='" & theme & "' WHERE SchlĂŒssel='Theme'", dbFailOnError
End Sub

Buttons mit Hover-Farbe

Access kennt kein Hover.
Aber per Timer-Event kann man’s nachbauen.
Oder mit Drittanbieter-Steuerelementen.

Ich mach’s pragmatisch: Kein Hover, aber deutliche Farben.

Farbige Icons dynamisch einbinden

Du kannst je nach Theme andere Bildpfade laden:

If AktuellesTheme = "dark" Then
  Me.imgLogo.Picture = CurrentProject.Path & "\images\logo_dark.png"
Else
  Me.imgLogo.Picture = CurrentProject.Path & "\images\logo_light.png"
End If

Design auf alle Formulare anwenden

Sub DesignAufAlleFormulare(theme As String)
  Dim frm As Form
  Dim i As Integer

  For i = 0 To Forms.Count - 1
    Set frm = Forms(i)
    Call AnwendenDesign(frm, theme)
  Next
End Sub

Oder beim Öffnen zentral steuern.

Mein Fazit

Light/Dark-Modus in Access ist kein Haken in den Optionen.
Du baust ihn Dir selbst – mit Farben, Logik und VBA.
Ist Aufwand. Aber sieht professionell aus.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert