Hamburger Menü für Microsoft Access
Ein hierarchisches Navigationsmenü für Access, das seine gesamte Struktur und alle Aktionen aus einer Tabelle bezieht — ein neuer Menüpunkt ist ein neuer Datensatz, nicht ein neuer Zweig im Code.
Ein Menü, das aus einer Tabelle lebt
Wer in Access ein Navigationsmenü selbst baut, kennt die Stelle, an der es unübersichtlich wird: das große Select Case, das für jeden Menüpunkt einen eigenen Zweig braucht. Jeder neue Eintrag heißt neuer Code, neu kompilieren, neu ausliefern.
Das Hamburger Menü dreht das um. Es ist ein hierarchisches Navigationsmenü, das als HTML und JavaScript im acEdgeBrowser-Steuerelement gerendert und aus einer Tabelle gespeist wird. Der entscheidende Unterschied: Was ein Klick auslöst, steht in der Tabelle, nicht im Code. Jeder Eintrag trägt in der Spalte ClickEvent eine Anweisung wie FORMSUB:frmKunden|id=3 — ein Klick öffnet dann das Formular frmKunden im Inhaltsbereich, gefiltert auf id=3.
Ein neuer Menüpunkt ist damit ein neuer Datensatz. Kein neuer Zweig, kein Kompilieren, keine neue Auslieferung.
Das Produkt ist als Baustein für bestehende Access-Projekte gedacht, nicht als fertiges Programm: zwei Codemodule und ein Trägerformular, dazu Beispiele, die Sie behalten oder entfernen können.
Was es kann
- Beliebig tief verschachtelte Einträge mit Auf- und Zuklappen
- Vier Berechtigungsgruppen steuern, wer welchen Eintrag sieht
- Vierzehn Aktionsarten: Formulare, Berichte, Tabellen, Abfragen, Makros, VBA-Prozeduren und Webseiten
- Filterbedingung und typisierte Werte je Eintrag
- Drei Designs und drei Größen, zur Laufzeit umschaltbar
- Unicode-Symbole je Eintrag
Die Tabelle als Steuerpult
Das Herz ist die Tabelle tblMenu. Jede Zeile ist ein Eintrag; ein paar Spalten legen fest, wo er hängt und was er tut:
ParentIDverweist auf dieIDdes übergeordneten Eintrags,0ist die oberste Ebene. Die Verschachtelungstiefe ist nicht begrenzt.SortOrderbestimmt die Reihenfolge innerhalb einer Ebene.Caption,Icon(ein Unicode-Codepunkt als Dezimalzahl) undComment(Tooltip) machen den Eintrag sichtbar.- Vier Ja/Nein-Spalten —
Admin,Group1,Group2,Group3— entscheiden, in welchen Berechtigungsgruppen der Eintrag erscheint. ClickEventschließlich sagt, was der Klick auslöst.
Ist ClickEvent leer, markiert der Eintrag nur und klappt gegebenenfalls auf — der Normalfall für Gruppenknoten.
Ein wichtiges Detail: ID ist kein AutoWert. Weil ParentID auf ID verweist, würde ein AutoWert beim Import in eine andere Datenbank neue Nummern vergeben — die Verweise zeigten danach ins Leere und die Hierarchie zerfiele. Die Nummern vergeben Sie selbst; der Primärschlüssel sichert die Eindeutigkeit.
Vierzehn Aktionsarten
Der ClickEvent folgt immer demselben Aufbau:
ART:Objekt[|Where][|Wert][|Wert]... Die vierzehn Arten decken so ziemlich alles ab, was man aus einem Menü heraus tun will:
| Art | Wirkung |
|---|---|
FORMOPEN / FORMDIALOG / FORMSUB | Formular als Fenster, modal oder im Inhaltsbereich |
REPORTOPEN / REPORTPRINT / REPORTSUB | Bericht als Vorschau, auf den Drucker oder in den Inhaltsbereich |
TABLEOPEN / TABLESUB | Tabelle als Datenblatt oder im Inhaltsbereich |
QUERYOPEN / QUERYSUB | Abfrage als Datenblatt oder im Inhaltsbereich |
CODERUN / CODEOPEN | Öffentliche Prozedur aufrufen oder Modul im Editor zeigen |
WEBOPEN | Adresse im Standardbrowser |
MACRORUN | Makro ausführen |
Bei den zehn Objekt-Arten ist der erste Wert nach dem Objekt die Filterbedingung — geschrieben wie in einer Abfrage, aber mit einfachen Anführungszeichen für Text:
FORMSUB:frmKunden|Name='Müller' Alles Weitere sind typisierte Werte. Sie werden in VBA-Schreibweise notiert und kommen typisiert an, nicht als Text: "Text" als String, 42 als Long, 3.14 als Double (immer mit Punkt), #2026-08-23# als Datum (immer ISO), True/False als Boolean. Ein Eintrag darf bis zu zehn Werte tragen. Der Platzhalter {ID} wird dabei durch die ID des angeklickten Eintrags ersetzt:
CODERUN:MenuAction_Protokoll|{ID}|"Menü" Im Zielobjekt liegen die Werte bereits vor dem Öffnen bereit und lassen sich sauber abholen — bei einem Unterformular, das von Access grundsätzlich kein OpenArgs erhält, ist das der einzige Weg:
Private Sub Form_Load()
Me.txt1 = MenuValue_Get("Param1")
Me.txt2 = MenuValue_Get("Param2")
End Sub Aussehen zur Laufzeit umschalten
Drei Designs — mnuDesignDarkModern, mnuDesignGlass und mnuDesignLightBusiness — und drei Größen stehen bereit. Beides ist zur Laufzeit umschaltbar: Man ruft ReloadMenu mit Gruppe, Design und Größe erneut auf. Die Seite selbst wird dabei nie neu geladen; übertragen wird nur, was sich geändert hat.
With Me.frmMenu
.Visible = True
DoEvents ' Steuerelement braucht sein Fenster
.Form.ReloadMenu mnuGroupAdmin, mnuDesignLightBusiness, mnuSizeNormal
.Form.StartPolling
End With Eingebaut in fünf Handgriffen
Das Menü zieht in ein bestehendes Formular ein, ohne dass etwas umgebaut werden muss:
modMenu.bas,modMenuActions.basundForm_frmMenu.clsimportieren.tblMenuanlegen (die mitgelieferten Beispieldaten mit 63 Einträgen zeigen alle vierzehn Arten).- Auf
frmMenuein Webbrowser-SteuerelementwebMenuplatzieren und drei Ereignisse auf[Ereignisprozedur]setzen — Bei Dokument vollständig, Bei Maustaste Auf, Bei Klicken. - Auf dem Wirtsformular zwei Unterformulare:
frmMenufür das Menü,subContentfür die Inhalte. - Mit einem Umschaltknopf ein- und ausblenden.
Zwingend sind dabei nur modMenu.bas und Form_frmMenu.cls; modMenuActions.bas brauchen Sie, sobald ein Eintrag CODERUN: benutzt. Ob alles sitzt, sagt ein Aufruf im Direktbereich:
Menu_SelfTest Gemeldet werden Tabelle, optionale Spalten, Gruppendurchsetzung und der temporäre Pfad. Ein zweites Menu_LastSkippedRows() verrät nach jedem Tabellenumbau, ob Access einen fehlerhaften Datensatz still übersprungen hat — denn jede Zeile wird einzeln verarbeitet, ein unbrauchbarer Eintrag bricht den Aufbau nicht ab.
Zwei Dinge, die man wissen muss
tblMenu ist Quellcode, keine Daten. Ein Datensatz kann über CODERUN: eine Prozedur starten, und eine Filterbedingung ist ein Access-Ausdruck, der Funktionen aufrufen kann. Wer in diese Tabelle schreiben darf, kann ausführen, was der Access-Prozess ausführen kann — schützen Sie sie wie den VBA-Code, nicht wie eine Kundenliste. Die Browserseite selbst kann übrigens keine Aktion erfinden: Sie meldet nur eine ID, alles Übrige schlägt VBA in seinem eigenen, gruppengefilterten Zwischenspeicher nach.
Die Reihenfolge beim Anzeigen ist heikel. Weil das Menü im Edge-Steuerelement eines Unterformulars lebt, gilt: erst sichtbar machen, dann DoEvents, dann mit der Seite reden. JavaScript in ein noch unsichtbares Steuerelement zu schicken, lässt Access ohne VBA-Fehler abstürzen. Aus demselben Grund navigiert das Menü nicht aus Form_Load, sondern erst beim ersten Zeitgebertakt. An diese eine Regel muss man sich halten — danach läuft es.
Grenzen
Das Menü baut alle Zeilen einmal auf und schreibt beim Auf- und Zuklappen nur noch Sichtbarkeiten; bis in den Bereich einiger hundert Einträge ist das unauffällig. Zwei Access-Instanzen desselben Benutzers kommen sich nicht in die Quere, weil die temporäre HTML-Datei die Prozess-ID im Namen trägt — zwei Menüs innerhalb einer Anwendung teilen sich dagegen die Wertablage, was bei gleichzeitiger Bedienung zu vermischten Werten führen kann.
Vorausgesetzt werden Microsoft Access ab Office 2024 beziehungsweise Microsoft 365 (32/64-bit), die installierte WebView2-Laufzeit und Windows. Zusätzliche Verweise braucht es nicht: Die UTF-8-Dateiausgabe und der Zugriff auf den VBA-Editor laufen über Late Binding, DAO ist in Access ohnehin gesetzt.
Download
Tabellengesteuertes Hamburger Menü für Microsoft Access: HTML/JavaScript im Edge-Steuerelement, vierzehn Aktionsarten, Berechtigungsgruppen, drei Designs — als Baustein in bestehende Projekte einzubauen.
Voraussetzungen: Ab Office 2024 und Microsoft 365, 32/64-bit
Dateigröße: 5,0 MB




