Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Menüschaltflächen lösen Funktionen in Formularmodulen aus

Was für Ribbons gilt, funktioniert auch bei Menüs, Symbolleisten und Kontextmenüs: Die für die Eigenschaft OnAction angegebene Funktion wird auch ausgelöst, wenn sie sich als privat deklarierte Funktion im Klassenmodul des aktuell im Fokus befindlichen Formulars befindet.

Beispieldatenbank

Die Beispieldatenbank zu diesem Artikel finden Sie unter dem folgenden Link.

Private Funktion auslösen

Stellen Sie sich einmal vor, Sie zeigen eine benutzerdefinierte Symbolleiste zu einem bestimmten Formular an oder öffnen von diesem aus ein benutzerdefiniertes Kontextmenü. Alles schön und gut: Die durch die Steuerelemente der Menüs ausgelösten Funktionen werden öffentlich deklariert in einem Standardmodul untergebracht, und gut. Allerdings ist das nicht besonders wartungsfreundlich: Code, der in Zusammenhang mit einem Formular ausgelöst wird, sollte sich möglichst auch in dessen Klassenmodul befinden (außer natürlich, der Code wird an mehreren Stellen innerhalb der gleichen Anwendung aufgerufen).

Alles kein Problem: Entgegen gängiger Meinungen können Sie die Funktion, die Sie für die OnAction-Eigenschaft eines Menüsteuerelements angeben, auch im Klassenmodul eines Formulars hinterlegen - sogar als privat deklarierte Funktion!

Schauen wir uns ein Beispiel an. Die folgende Routine erzeugt auf die schnelle einen neuen Eintrag in der Menüleiste einer Datenbank unter Access 2003 und älter:

Public Sub AddSampleButton()
    Dim cbr As Office.CommandBar
    Dim cbc As Office.CommandBarButton
    Set cbr = CommandBars("Menu bar")
    On Error Resume Next
    cbr.Controls("TestAction").Delete
    On Error GoTo 0
    Set cbc = cbr.Controls.Add(1, , , , True)
    With cbc
        .OnAction = "=TestAction()"
        .Caption = "TestAction"
        .Visible = True
        .Style = msoButtonCaption
    End With
End Sub

Wenn Sie im gleichen Standardmodul (oder einem beliebigen anderen) die folgende Funktion hinterlegen, wird diese bei Betätigung des Menüsteuerelements anstandslos ausgeführt:

Public Function TestAction()
    MsgBox "Öffentliche Funktion aus einem Standardmodul ausgelöst."
End Function

Was aber, wenn wir eine Funktion wie die folgende im Klassenmodul eines Formulars unterbringen?

Private Function TestAction()
    MsgBox "Private Funktion aus dem Klassenmodul eines Formulars ausgelöst."
End Function 

Ganz einfach: Wenn dieses Formular zum Zeitpunkt der Betätigung des Menüsteuerelements den Fokus besitzt, führt Access die private Funktion aus dem Klassenmodul dieses Formulars aus.

Somit können Sie für erheblich mehr Ordnung im Code Ihrer Datenbank sorgen, wenn Sie Symbolleisten und Kontextmenüs in Zusammenhang mit Formularen verwenden und die durch die in den Menüs enthaltenen Steuerelementen ausgelösten Funktionen in externen Standardmodulen untergebracht haben.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.