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 Menü im Hauptformular, rechts daneben der Inhaltsbereich

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
Menügruppe mit Symbolen, Einzügen und Auswahl

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:

  • ParentID verweist auf die ID des übergeordneten Eintrags, 0 ist die oberste Ebene. Die Verschachtelungstiefe ist nicht begrenzt.
  • SortOrder bestimmt die Reihenfolge innerhalb einer Ebene.
  • Caption, Icon (ein Unicode-Codepunkt als Dezimalzahl) und Comment (Tooltip) machen den Eintrag sichtbar.
  • Vier Ja/Nein-Spalten — Admin, Group1, Group2, Group3 — entscheiden, in welchen Berechtigungsgruppen der Eintrag erscheint.
  • ClickEvent schließ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.

Die drei Designs nebeneinander — DarkModern, Glass, LightBusiness
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:

  1. modMenu.bas, modMenuActions.bas und Form_frmMenu.cls importieren.
  2. tblMenu anlegen (die mitgelieferten Beispieldaten mit 63 Einträgen zeigen alle vierzehn Arten).
  3. Auf frmMenu ein Webbrowser-Steuerelement webMenu platzieren und drei Ereignisse auf [Ereignisprozedur] setzen — Bei Dokument vollständig, Bei Maustaste Auf, Bei Klicken.
  4. Auf dem Wirtsformular zwei Unterformulare: frmMenu für das Menü, subContent für die Inhalte.
  5. 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.

Hamburger Menu
Demonstration of Functionality and Operation
0
Views
0
Comments
YouTube
Ansehen

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

LinkedIn

Newsletter

Newsletter