BEISPIEL
HINWEIS
BEISPIEL
Kapitel 15: Anwendungsdesign
Application.LoadCustomUI als Alternative
Nicht in jedem Fall lassen sich die XML-Daten in der Tabelle USysRibbons speichern. Sei es, dass Sie
dynamisch eine neue Multifunktionsleiste zusammenstellen wollen (siehe folgender Abschnitt), oder dass
die Daten aus einer externen Datei geladen werden.
Laden der XML-Daten aus einem Textfeld (dieses kann natürlich auch gebunden sein)
Private Sub Befehl6_Click()
Application.LoadCustomUI ”MeineMultifunktionsleiste”, RibbonXML.Value
End Sub
Nach diesem Aufruf steht die Definition sofort unter den Access-Optionen zur Verfügung. Doch Achtung:
Zum Zeitpunkt der Zuweisung bzw. beim Öffnen der Datenbank muss dann zum Beispiel per AutoExec-Makro
die Definition erneut geladen werden. Hier ist das Verwenden der Tabelle USysRibbons der bessere Weg.
Laden der XML-Daten aus einer externen Datei
Public Function LoadFromTXT(filename As String) As String
Dim fn&
fn = FreeFile
Open filename For Input As fn
LoadFromTXT = Input$(LOF(1), fn)
Close fn
End Function
...
Private Sub Befehl6_Click()
Application.LoadCustomUIMeineMultifunktionsleiste”, LoadFromTXT(”c:\MFL.xml”)
End Sub
Ein kleines Testprogramm
Wie Sie sicher bemerkt haben, ist das eigentliche Zuweisen der XML-Daten meist mit umständlichen Neu-
starts der Access-Datenbank verbunden. Gerade in der Entwurfsphase dürfte dies jedoch recht nervtötend
sein, da dem Programmierer wahrscheinlich diverse Fehler unterlaufen werden (Stichworte Groß-/Klein-
schreibung, fasche Attribute etc.).
Ein kleines Testprogramm (siehe Beispieldatenbank) versucht mit einem Trick dieses Manko zu umgehen:
Erstellen Sie zunächst die Tabelle USysRibbons wie oben angegeben.
Erstellen Sie für diese Tabelle ein Eingabeformular (Sie können den Assistenten verwenden).
Fügen Sie dem Formular eine zusätzliche Schaltfläche mit folgendem VBA-Code hinzu:
Option Compare Database
Option Explicit
960
HINWEIS
BEISPIEL
Private Sub Befehl1_Click()
Dim tempname As String
tempname = RibbonName1.Value + CStr(Now)
Application.LoadCustomUI tempname, RibbonXML.Value
Me.RibbonName = tempname
End Sub
Der Trick: Einem Formular (und dieses ist ja gerade geöffnet) kann per RibbonName-Eigenschaft dyna-
misch eine Multifunktionsleistendefinition zugewiesen werden. Genau dies tun wir, nachdem die XML-
Definition mit LoadCustomUI geladen wurde. Doch ein Problem muss umgangen werden: eine XML-
Definition kann unter ein und dem selben Namen nicht mehrfach geladen werden. Deshalb verwenden
wir einfach einen temporären Namen, der sich aus der aktuellen Uhrzeit bildet. Um das Löschen dieser
temporären Daten brauchen wir uns nicht zu kümmern, nach einem Datenbankneustart sind auch die
überflüssigen Daten weg.
Sie können jetzt ohne Probleme neue Einträge zur Tabelle USysRibbons hinzufügen oder diese editieren,
mit einem Klick ist das Ergebnis (oder auch die Fehlermeldung) auf dem Bildschirm zu sehen.
Abbildung 15.31 Das Testprogramm in Aktion
Es empfiehlt sich, einen speziellen Eintrag in die Tabelle USysRibbons aufzunehmen, mit dem alle Änderungen
an der Multifunktionsleiste rückgängig gemacht werden können.
Eintrag um die Standardmenüs wieder herzustellen
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
</ribbon>
</customUI>
961
Programmieren der Multifunktionsleiste

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.