|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| | | | | |
Benutzerabhängige Befehlsleisten
Klaus Giesen, Wuppertal
Access verfügt wie allen anderen Office-Anwendungen auch über eine Reihe Standardmenü- und Symbolleisten. Bei individuellen Datenbankanwendungen ist es jedoch für den Anwender angenehmer und auch sicherer, wenn er für eine solche Anwendung auch über benutzerdefinierte Menü- und Symbolleisten verfügt. So können beispielsweise leicht individuelle Menü- und Symbolleisten in Abhängigkeit vom angemeldeten Benutzer erstellt werden.
Angepasste Menü- und Symbolleisten in Access
Zur Erstellungen eigener Menü- und Symbolleisten gibt es zwei Möglichkeiten.
Die erste Möglichkeit erfolgt über das Dialogfenster Anpassen, das Sie mit dem Menübefehl Extras/Anpassen oder durch Anklicken einer Leiste mit der rechten Maustaste und Auswahl des Eintrags Anpassen aufrufen können.

Abb. 1: Das Dialogfenster Anpassen
Auf diese Art der Erstellung beziehungsweise Bearbeitung wird in diesem Beitrag jedoch nicht näher eingegangen. Wir beschäftigen uns hier ausschließlich mit der zweiten Möglichkeit, Menü- und Symbolleisten per VBA zu erstellen. Diese Methode hat einige Vorzüge, wie beispielsweise:
Programmgesteuerter Aufruf
Situationsbedingte Steuerung
Bevor es losgeht, müssen Sie je nach verwendeter Access-Version die passenden Verweise erstellen.
Verweise
Aufgrund des gemeinsamen Objektmodells müssen Sie vor der Programmierung von Befehlsleisten in Access abhängig von der benutzten Version entsprechende Verweise in Ihrer Datenbank einstellen.
HinweisSie können theoretisch auch komplett ohne Verweise auskommen. Wie das funktioniert und welche Vor- und Nachteile das hat, erfahren Sie im Beitrag Verwendung von Objektvariablen in der vorliegenden Ausgabe von Access im Unternehmen. (
Access 97
In Access 97 stellen Sie einen Verweis auf die dieser Version entsprechenden Bibliothek Microsoft Office 8.0 Object Library ein. Wählen Sie dazu in der Entwurfsansicht eines Moduls aus dem Menü Extras den Befehl Verweise aus und aktivieren Sie das Kontrollkästchen vor dem entsprechenden Eintrag (s. Abb. 2).
Access 2000
Access 2000 erfordert einen Verweis auf die Microsoft Office 9.0 Object Library. Die Einstellung erfolgt genauso, wie eben beschrieben.
HinweisDie beiden Beispieldatenbanken zu diesem Beitrag enthalten jeweils den entsprechenden Verweis. Sie finden diese Beispieldatenbanken in den Versionen für Access 97 (Menus97.mdb) und Access 2000 (Menus00.mdb) auf der beiliegenden CD-ROM im Ordner mdb. (

Abb. 2: Das Dialogfenster Verweise in Access 97

Abb. 3: Das Formular frmToolBarDemo_1

Abb. 4: Befehlsleiste mit drei verschiedenen Elementen
Befehlsleistenelemente per VBA erstellen
Dieses erste Anwendungsbeispiel erstellt eine Befehlsleiste mit verschiedenen Elementen. Einige dieser Elemente führen dann Aktionen aus, so wie Sie es von Ihrer täglichen Arbeit mit Befehlsleisten her gewohnt sind. Ausgangspunkt ist das Formular frmToolBarDemo_1 der Beispieldatenbank (s. Abb. 3).
Ein Klick auf die Schaltfläche btnCreateToolBar erstellt eine Befehlsleiste mit drei verschiedenen Elementen (s. Abb. 4):
Schaltfläche
Kombinationsfeld
Menü
Die dabei ausgeführte Ereignisprozedur kann hier nur auszugsweise besprochen werden. Sie finden den vollständigen Code im Klassenmodul des Formulars in der Beispieldatenbank.
Befehlsleiste erstellen
Der in Quellcode 1 abgedruckte Code legt die neue Befehlsleiste Test Toolbar an und verankert diese links oben.
Schaltfläche erstellen
In der Befehlsleiste wird eine Schaltfläche (msoControlButton) erstellt (s. Quellcode 2).
Die Zuweisung des angezeigten Schaltflächensymbols erfolgt über die Eigenschaft FaceID.
Der Klick auf eine Schaltfläche sollte natürlich irgendeine Aktion hervorrufen. Dies erfolgt mit der Eigenschaft OnAction, die bei diesem Beispiel das Makro macAttention ausführt.
Kombinationsfeld erstellen
Das nächste Objekt in der Befehlsleiste ist ein Kombinationsfeld (s. Quellcode 3).
Set CmdBar = Application.CommandBars.Add(Name:= _ "Test Toolbar", Position:=msoBarTop, temporary:=False)
CmdBar.Enabled = True
CmdBar.Visible = True
Quellcode 1
Set cmdBtn = CmdBar.Controls.Add(Type:=msoControlButton)
With cmdBtn
.Style = msoButtonIcon
.FaceId = 352
.Caption = "Achtung"
.Style = msoButtonIconAndCaption
.Tag = "Test Button"
.OnAction = "macAttention"
End With
Quellcode 2
Set cmdComboBox = _ CmdBar.Controls.Add(msoControlComboBox)
With cmdComboBox
.AddItem "Torwart", 1
.AddItem "Libero", 2
.AddItem "Abwehr", 3
.AddItem "Mittelfeld", 4
.AddItem "Angriff", 5
.Caption = "Auswahl Position"
.Tag = "Test Combo Box"
.OnAction = "SavePosition"
.Style = msoComboLabel
.DropDownLines = 8
.DropDownWidth = 75
End With
Quellcode 3
Set cmdPopUp = mdBar.Controls.Add(Type:=msoControlPopup)
With cmdPopUp
.Caption = "&Besprechung festlegen"
.Tag = "Test PopUp"
Set cmdBtn1 = _ Controls.Add(Type:=msoControlButton)
With cmdBtn1
.Caption = "&Heute"
.OnAction = "FestlegenHeute"
.Style = msoButtonCaption
End With
Quellcode 4 (Teil 1)
Die Listeneinträge werden bei diesem Beispiel dynamisch erzeugt und die Eigenschaft OnAction ruft eine Funktion auf.
Menü erstellen
Zum Abschluss kommen wir doch noch zu einem richtigen Menü in unserer Befehlsleiste (s. Quellcode 4).
Die eigentlichen Menüpunkte sind wieder vom Objekttyp msoControlButton, aufgerufen werden wieder entsprechende Funktionen.
Notwendige Fehlerbehandlung
Wenn Sie versuchen, eine bereits existierende Befehlsleiste noch einmal zu erstellen, löst Access den Laufzeitfehler 5 aus. Da Access bei dieser Gelegenheit dazu neigt, heftig abzustürzen, muss dieser unbedingt aufgefangen werden (s. Quellcode 5).
Befehlsleiste löschen
Damit sind wir beim Löschen von Befehlsleisten angekommen. Dies erledigt folgender Ausdruck:
CommandBars("Test Toolbar").Delete
Benutzerabhängige Befehlsleisten
Das zweite Anwendungsbeispiel erzeugt dynamisch eine Menüleiste in Abhängigkeit vom angemeldeten Benutzer.
Set cmdBtn2 = _ .Controls.Add(Type:=msoControlButton)
With cmdBtn2
.Caption = "&Morgen"
.OnAction = "FestlegenMorgen"
.Style = msoButtonCaption
End With
Quellcode 4 (Fortsetzung)
btnCreateToolbar_Err:
If Err.Number = 5 Then
MsgBox "Menüleiste bereits vorhanden - muss " _ & "vor Neuerstellung gelöscht werden!"
ElseIf Err.Number <> 0 Then
MsgBox "btnCreateToolbar_Error " & _ Err.Number & " " & Err.Description
End If
Quellcode 5

Abb. 5: Die benutzerdefinierte Menüleiste

Abb. 6: Das Formular frmAnmeldung
Eine solche Auslegung ist beispielsweise dann sinnvoll, wenn bestimmte Benutzergruppen von bestimmten Funktionen ferngehalten werden sollen. Typisches Beispiel:
Das Übersichtsformular einer Datenbankanwendung: Die Menüpunkte zum Aufruf der Datenbankwartung und Benutzerverwaltung sind nur für den Administrator relevant. Allen anderen Benutzern brauchen sie nicht zur Verfügung zu stehen.
Admin-Version der Menüleiste
Das Merkmal dieser Menüleiste ist die Kombination von eingebauten und selbst erstellten Menüpunkten (s. Abb. 5).
Das Menü Datei enthält den eingebauten Menübefehl Schließen.
Das selbst definierte Menü Formular dient mit den entsprechenden Unterpunkten zum Öffnen von Formularen.
Das Menü Extras enthält einen Ausschnitt aus dem gleichnamigen Standardmenü von Access.
Bei der Benutzer-Version des Menüs fehlt der letzte Menüpunkt Extras, womit die eingangs gestellte Anforderung erfüllt ist.
|