Moderne UI in Access: Custom Dialogs & Mini Notifications

Eine moderne Datenbank mit den klassischen MsgBox & InputBox zu bauen, ist wie ein neuer Porsche – aber mit Käfer-Felgen. Zeit für den nächsten Schritt: formatierbare Custom Dialogs und dezente Mini Notifications, komplett in VBA.

Warum Custom Dialogs?

Stell dir Folgendes vor: Du arbeitest seit Monaten an einer Access-Datenbank. Die Logik ist perfekt, die Leistung stimmt, die Sicherheit ist erstklassig. Dann zeigst du sie deinem Kunden – und das Erste, was dieser sieht, ist ein graues MsgBox-Fenster aus den 90er Jahren.

Abbildung 1: Standard vs. modern – Porsche mit Käfer-Felgen.

Ich zeige dir hier, wie du mit wenig Aufwand von grau zu großartig kommst. Die neue Version meiner Custom Dialogs ist ein kompletter Refactor – noch schneller, noch einfacher, noch mächtiger.

Gegenüberstellung der Features

Feature Standard Custom Dialogs Notifications
Formatierter Text ✔️
Bilder ✔️
Tabellen ✔️
Web-Inhalte ✔️
Druckbar ✔️
„Nicht mehr zeigen” ✔️
Inhalt kopieren ✔️
Verzögerte Buttons ✔️
Farbiger Header ✔️
Vorlagen ✔️
Datenauswahl ✔️
Auto-Close ✔️ ✔️
Eigene Icons ✔️
Eingebaut ✔️
Einfach zu nutzen ✔️ ✔️ ✔️
IntelliSense ✔️ ✔️ ✔️

Die Stars der Show

  • myMsgBox – die moderne Alternative zur MsgBox
  • myInputBox – schöner als die originale InputBox
  • myComboBox – wie eine InputBox, jedoch mit Datenauswahl
  • myListBox – wie die myComboBox, jedoch als ListBox (Mehrfachauswahl möglich)
  • myErrorBox – eine DialogBox zum Anzeigen von Fehlermeldungen
  • myNotification – dezentes, kurzes Feedback an den Nutzer

myComboBox und myListBox lassen sich als Werteliste oder per SQL-Abfrage füllen – auch mehrspaltige Einträge sind möglich.

Nicht jedes Feedback braucht eine DialogBox. myNotification legt sich halbtransparent über den Bildschirm, mit zentralem Icon, und schließt automatisch nach kurzer Zeit – sofortige Rückmeldung, ohne den Nutzer aus dem Workflow zu reißen.

Zwei integrierte Editoren – volle Kontrolle

Dialog-Typen-Editor: Icon anpassen, Header-Farbe und sogar den Farbverlauf des Headers festlegen. So fügen sich die Dialoge perfekt ins Design deiner Anwendung ein.

Template-Editor: komplette Dialog-Vorlagen erstellen oder bearbeiten. Dort wählst du unter anderem:

  • den Dialog-Typ (myMsgBox, myInputBox, myComboBox, myListBox),
  • Überschrift & Bodytext (Plaintext oder HTML),
  • die Button-Beschriftungen,
  • eine „Do not show again”-Checkbox, einen Druck- und einen Kopieren-Button,
  • Auto-Close-Zeit und verzögerte Anzeige der Buttons,
  • Standardwerte sowie Werte für ListBox/ComboBox (Werteliste oder SQL).
Abbildung 2: Der Template-Editor.

Direkt aus dem Editor lässt sich ein Online-HTML-Editor öffnen. Mit diesem WYSIWYG-Tool wird aus einfachem Plaintext im Handumdrehen HTML, das du direkt in den Template-Editor übernimmst.

Abbildung 3: Der Dialog-Typen-Editor.

IntelliSense inklusive

Mir war wichtig, dass die Aufrufe so einfach wie möglich sind – und dafür braucht es IntelliSense. Alle Dialog- und Notification-Typen werden deshalb über Enumerationen gesteuert.

Damit man diese Enums nicht mühsam von Hand pflegen muss, gibt es das Modul modHelper_Enumeration: Neue Enum-Einträge lassen sich zur Laufzeit dynamisch erstellen, bearbeiten oder löschen – direkt über einen komfortablen Editor.

Dazu kommen zwei Klassen:

  • clsDLG_Config – verwaltet das komplette Konfigurations-Setup und die Werte der Dialogboxen.
  • clsDLG_Result – liefert die Rückgaben: welcher Button geklickt wurde bzw. welche Werte in ListBox, ComboBox oder InputBox eingetragen/ausgewählt wurden.

Beispiele

Ein Dialog als einzelnes Kommando:

myMsgBox "Header", "This is the body text", DLG_Info, "OK", "Cancel"

Debug.Print myComboBox("QUESTION", "Please choose a value.", DLG_Question, _
    "SELECT dlg_type FROM tblDLG_Dialogs_types", "OK")

Debug.Print myInputBox("QUESTION", "Please enter a value.", DLG_Question, _
    "Default value", "OK", "Cancel")

Debug.Print myListBox("QUESTION", "Please choose a value.", DLG_Mail, _
    "1;2;3;4;3;5", "OK")

Eine MessageBox mit mehr Optionen:

With DLG_Config
    .DialogType   = DLG_Info
    .header       = "HEADER Text"
    .Body         = "HTML string"
    .Button1      = "OK"
    .Button2      = "Cancel"
    .Button3      = "Another button"
    .Printing     = True
    .CopyContent  = True
    .AutoClose    = 20
    .ButtonDelay  = 4
    .DialogWidth  = 10000
    .DialogHeight = 5000
    .Start_as_MsgBox
End With

Eine ListBox mit mehr Optionen (ComboBox funktioniert analog):

With DLG_Config
    .DialogType   = DLG_Question
    .header       = "HEADER Text"
    .Body         = "HTML string"
    .Button1      = "OK"
    .ComboValue   = "SELECT dlg_type, dlg_typeColor FROM tblDLG_Dialogs_types ORDER BY dlg_type"
    .ComboWidths  = "5cm;0cm"
    .DefaultValue = "DLG_Info"
    .Start_as_ListBox
End With

Eine InputBox über eine Vorlage:

With DLG_Config
    .TemplateName   = "delete"
    .TemplateValue1 = "Example text 1"
    .TemplateValue2 = "Example text 2"
    .DefaultValue   = "Text xxx"
    .Start_as_InputBox
End With

Eine Notification:

myNotification DLG_Cancel, Black, 1

Standarddialoge automatisch ersetzen

Bei einem Vortrag der Access User Group Europe kam die Frage auf, ob man die eingebauten Standarddialoge – MsgBox und InputBox – automatisch ersetzen könnte. Ihr habt gefragt, hier ist die Antwort: Die Funktion durchsucht die gesamte VBE, erkennt alle MsgBox- und InputBox-Aufrufe, zeigt sie an und lässt dich entscheiden, ob sie ersetzt werden.

Abbildung 4: Standarddialoge in der VBE erkennen und ersetzen.

Playground: ein Ausblick

Neben den eigentlichen Dialogen liegt ein Playground bei, der zeigt, was noch möglich ist – etwa Werte in bestehendem HTML manipulieren (Theme, Sprache) und gewählte Werte wieder auslesen.

Dabei bin ich auf eine Besonderheit gestoßen: Das Webbrowser-Control in Access liest Inhalte nur aus, wenn sie per Navigate geladen wurden. Schreibe ich den innerHTML direkt (schneller, so wie in den Templates), lassen sich Werte nicht auslesen.

Ladezeit-Falle: Das Webbrowser-Control macht vor dem Laden einer lokalen Datei einen DNS-Aufruf – das kostet spürbar Zeit. Trage 127.0.0.1 msaccess in die Hosts-Datei ein (C:\Windows\System32\drivers\etc\hosts), dann lädt die lokale HTML-Datei sofort. Meine neue Version prüft diesen Eintrag automatisch und legt ihn bei Bedarf an.

Abbildung 5: Der Playground in Aktion.

Einfach ausprobieren

Über die mitgelieferte Testing-Form kannst du alle Dialoge und Notifications direkt ausprobieren, kennenlernen und in deine eigene Anwendung übernehmen.

Standard war gestern – mit dieser Erweiterung wird dein Access-Interface intuitiver und ein gutes Stück „sexier”. Die ausführliche Beschreibung und alle Hinweise findest du wie gewohnt gut dokumentiert direkt im Code.

Download

Formatierbare Dialoge und dezente Notifications für MS Access – reines VBA, mit zwei Editoren, Vorlagen und IntelliSense.

Loading...
👁
0
Views
💬
0
Comments
Open
YouTube
Published: ...
Last updated: ...
Newsletter

Newsletter