|
RibbonX-Workshop / Multifunktionsleiste schnell erstellt
|
| Autor |
Nachricht |
mumpel
Fortgeschrittener
Verfasst am: 14. Okt 2008, 13:23 Rufname: René
Wohnort: Lindau (B)
|
|
Willi Wipp
Moderator

Verfasst am: 14. Okt 2008, 21:31 Rufname:
Wohnort: Raum Wiesbaden
|
| |
| Version: Office 2007 |
|
Hi mumpel,
danke fuer die Zusammenstellung. Habe den Tiltel mal mit einer kleinen Anmerkung versehen
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Zuletzt bearbeitet von Willi Wipp am 23. Dez 2009, 04:16, insgesamt einmal bearbeitet |
|
FlyingFire
Im Profil kannst Du frei den Rang ändern

Verfasst am: 17. Okt 2008, 08:30 Rufname:
Wohnort: Nähe Koblenz
|
|
| Version: Office 2007 |
|
Hey toll!!!!
Sowas hab ich schon lange gesucht
Werd es mir auf jeden Fall anschauen
LG
_________________ „Es ist ein großer Vorteil im Leben, die Fehler, aus denen man lernen kann, möglichst früh zu begehen.“
Winston Churchill
|
|
mumpel
Fortgeschrittener
Verfasst am: 13. Aug 2009, 18:22 Rufname: René
Wohnort: Lindau (B)
|
|
astern
Datenmodell-Missionar

Verfasst am: 22. Dez 2009, 20:33 Rufname: Andreas
Wohnort: Rastede
|
| |
| Version: Office 2007 |
|
Hallo!
Ich möchte hier einmal einen Weg zur Erstellung einer eigenen Multifunktionsleiste (MFL; auch "Ribbon" genannt) darstellen. Dafür gibt es zugegebenermaßen bereits mehrere sehr gute Anleitungen (z.B. Ribbons (Multifunktionsleisten) von Access) - ich möchte es hier aber noch einmal "kochrezeptartig" für den eher unerfahrenen Anwender wiederholen.
ACHTUNG: Die MFL gibt es erst ab Access 2007! Alles Weitere funktioniert also nicht mit früheren Versionen!
Also: Was ist zu tun?
Erstens: Wir müssen die Struktur einer MFL (die darin enthaltenen Befehle und Befehlsgruppen) definieren und diese Definition irgendwo ablegen.
Zweitens: Wir müssen Access zeigen, wo die Definition liegt und Access dazu bewegen, diese Definition einzulesen.
Drittens: Wir müssen Access dazu bringen, die MFL auch anzuzeigen.
Viertens: Wir müssen programmieren, was beim Click eines Nutzers auf einen Befehl in der MFL passieren soll.
zu Erstens: Definition der MFL
Sieh Dir mal die MFL von Access an: Es gibt darin mehrere Register (z.B. "Start"), innerhalb eines Registers gibt es mehrere Gruppen (z.B. "Sortieren und Filtern") und innerhalb einer Gruppe gibt es mehrere Befehle (z.B. "Filtern"). Das nennt man einen "hierarchischen Aufbau": Ein A besteht aus mehreren B, ein B besteht aus mehreren C und ein C besteht wieder aus mehreren D. Diesen Aufbau einer MFL müssen wir jetzt in einer geeigneten Form beschreiben. Dafür bietet sich das Datenformat XML an ("eXtensible Markup Language"). Das hört sich gefährlich an - aber keine Angst! Das ist ganz einfach!
XML hat nur zwei grundlegende Eigenschaften:
(1) Der Name einer hierarchischen Ebene wird in sog. Tags eingeschlossen, das sind Begriffe in dreieckigen Klammern. <group label="Sortieren und Filtern">...</group> bedeutet zum Beispiel: Es gibt eine hierarchische Ebene "group" mit dem Namen "Sortieren und Filtern" (Das Tag mit dem Schrägstrich nach der öffnenden dreieckigen Klammer ist das sog. "Ende-Tag"!)
(2) Die Tags werden ineinander geschachtelt.
| Code: | <group label="Sortieren und Filtern">
<button label="Filtern"/>
<button label="Auswahl"/>
<button label="Erweitert"/>
</group> | bedeutet: In der Gruppe "Sortieren und Filtern" gibt es drei Buttons mit den Beschriftungen "Filtern", "Auswahl" und "Erweitert". Auf unterster hierarchischer Ebene kann das Ende-Tag entfallen. Stattdessen schreibt man das Zeichen dafür (den Schrägstrich) gleich ans Ende des Beginn-Tags!
So einfach ist das! Versuchen wir jetzt einmal, die Registerkarte "Start" von Access zu beschreiben:
| Code: | <tabs>
<tab label="Start">
<group label="Ansichten">
<button label="Ansicht"/>
</group>
<group label="Zwischenablage">
<button label="Einfügen"/>
<button label="Ausschneiden"/>
<button label="Kopieren"/>
<button label="Format übertragen"/>
</group>
<group label="Schriftart">
... usw.
</group>
... usw.
</tab>
<tab label="Erstellen">
... usw.
</tab>
... usw.
</tabs> | Ein <tab> ist eine Registerkarte, eine <group> ist eine Gruppe von Befehlen auf der Registerkarte und ein <button> ist ein einzelner Befehl in einer Gruppe.
Alles klar? In derselben Form kannst Du jetzt Deine eigene MFL definieren. Du denkst Dir Namen für die tabs, die groups und die buttons aus und schreibst eine entsprechende XML-Datei. Die muss dann noch ein ganz klein wenig komplizierter sein, als das einfache Prinzipbeispiel, das ich gerade gebracht habe. Eine Vorlage dafür findest Du in der Beispieldatenbank, die ich am Ende dieses Postings zum Download anbiete.
Dort siehst Du auch, dass ein Tag noch weitere Informationen enthält - z.B. diese:
<button id="kunden" label="Kunden" onAction="OnButtonClick"/>
"id" = Name ("Identifier") des Buttons
"label" = Beschriftung des Buttons
"onAction" = Name des Befehls, der ausgeführt werden soll, wenn der Nutzer auf diesen Button clickt
"label" kennst Du schon - auf "id" und "onAction" kommen wir unter Viertens zurück!
Wo speichern wir jetzt die XML-Definition unserer MFL? Nun - Datenbanken speichern ihre Daten in Tabellen. Da bietet es sich an, auch die XML-Definition der MFL in einer Tabelle zu speichern! Wir legen also eine Tabelle MFL_DEFINITION an mit den Spalten mfl_id (Datentyp: Autowert), mfl_name (Datentyp: Text) und mfl_code (Datentyp: Memo). In der ersten (und einzigen) Zeile dieser Tabelle schreiben wir in die Spalte mfl_name: "eigene_MFL". In die Spalte mfl_code kopieren wir unsere XML-Datei hinein (bitte in der Beispieldatenbank ansehen!).
Damit haben wir Schritt 1 abgehakt: Wir haben unsere MFL definiert und die Definition so abgelegt, dass Access sie finden kann.
zu Zweitens: Laden der MFL
Dafür gibt es einen ganz bestimmten VBA-Befehl ("Application.LoadCustomUI") und wir müssen nur dafür sorgen, dass dieser Befehl beim Öffnen der Accessdatei ausgeführt wird. Deshalb schreiben wir zunächst ein kleines Programm:
- bei geöffneter Datenbank Alt-F11 drücken
- es öffnet sich das VBA-Fenster
- links (im sog. "Projekt-Explorer") mit der rechten Maustaste ganz oben auf den Namen der Datenbank clicken
- im sich öffnenden Kontextmenü "Einfügen -> Modul" wählen
- rechts (im Code-Fenster) folgendes eingeben:
| Code: | Public Function eigene_MFL_laden()
Application.LoadCustomUI "Eigene_MFL" _
, DLookup("mfl_code", "MFL_DEFINITION" _
, "mfl_name='eigene_MFL'")
End Function | Jetzt müssen wir noch mit Hilfe des Autoexec-Makros dafür sorgen, dass diese Funktion beim Öffnen der Access-Datei automatisch ausgeführt wird:
- im Access-Fenster (NICHT im VBA-Fenster!): Erstellen / Andere / Makro
- es öffnet sich der Makro-Editor
- unter "Aktion" wählen wir "AusführenCode"
- Click in das Textfeld rechts neben "Funktionsname" (unten)
- Click auf den Button mit den drei Punkten
- es öffnet sich der Ausdrucks-Generator
- Doppelclick auf "Funktionen"
- Click auf den Namen der Access-Datei
- im mittleren unteren Fenster des Ausdrucks-Generator erscheinen die Namen der Module
- dort denjenigen auswählen, in dem unsere Funktion "eigene_MFL_laden" enthalten ist
- "eigene_MFL_laden" erscheint im rechten unteren Fenster des Ausdrucks-Generators
- Doppelclick auf "eigene_MFL_laden" und Click auf "Ok"
- der Ausdrucks-Generator schließt sich
- das Makro-Fenster schließen
- Speichern = Ja
- Name = "Autoexec"
Das war's! Jetzt wird die MFL bei Öffnen der Access-Datei automatisch geladen - aber noch nicht angezeigt!
Damit der Befehl "Application.LoadCustomUI" funktioniert, ist noch folgendes zu tun:
- im VBA-Fenster: Extras / Verweise
- das Verweis-Fenster öffnet sich
- herunterscrollen und den Eintrag "Microsoft Office 12.0 Object Library" suchen
- ein Häkchen davor setzen
- "OK" clicken
- nochmal: Extras / Verweise
- der Eintrag "Microsoft Office 12.0 Object Library" steht jetzt weiter oben
- den Eintrag anclicken (-> blauer Hintergrund)
- rechts neben der Liste ist ein Button mit einem Pfeil nach oben ("Priorität")
- diesen Button wiederholt clicken, bis der Eintrag "Microsoft Office 12.0 Object Library" nicht mehr weiter nach oben rückt
- "OK"
ACHTUNG: Diese Einstellung ist in dem Access, das Du benutzt, evtl. noch nicht gemacht worden. Dann kommt auch eine Fehlermeldung, wenn Du meine Beispieldatenbank öffnest ("Fehler beim Kompilieren dieser Funktion."). Du musst dann auf "Alle Makros anhalten" clicken, die o.g. Einstellung für die "Microsoft Office 12.0 Object Library" vornehmen, Access beenden und neu starten. Danach sollte alles bestens funktionieren.
zu Drittens: Anzeigen der MFL
Jetzt musst Du die Access-Datei erst einmal schließen und wieder öffnen, damit die MFL geladen wird (was ja bekanntlich beim Öffnen der Datei geschieht!).
Anschließend:
- Click auf den Office-Button
- Access-Optionen / Aktuelle Datenbank / Name der Multifunktionsleiste (rechts, direkt unter dem dritten blauen Querbalken!)
- Wenn Du jetzt das Kombinationsfeld rechts daneben öffnest, erscheint darin "Eigene_MFL"
- Das wählen wir aus und clicken auf "Ok"
- Abschließend die Access-Datei nochmal schließen und wieder öffnen.
Traraaa! Die MFL wird angezeigt! Aber sie funktioniert noch nicht ... Darum ...
zu Viertens: Funktion der MFL
Wir kommen jetzt auf den Eintrag onAction="OnButtonClick" in unserer XML-Datei zurück. Damit ist gemeint: Wenn der Nutzer auf den Button clickt (="onAction"), führe das Programm "OnButtonClick" aus. Bestimmt hast Du Dich schon gewundert, warum bei ALLEN Clicks des Nutzers immer EIN UND DASSELBE Programm ausgeführt werden soll. Das kann doch nicht richtig sein!?
Doch, das geht! Jetzt kommt nämlich der dritte Eintrag id="kunde" ins Spiel! Daran wird unser Programm erkennen, WELCHER Button angeclickt wurde.
Wir wollen das Programm jetzt eingeben:
- bei geöffneter Datenbank Alt-F11 drücken
- es öffnet sich das VBA-Fenster
- links (im sog. "Projekt-Explorer") den Namen des Moduls anclicken, in den wir schon unter Zweitens unseren kleinen Dreizeiler geschrieben haben.
- rechts (im Code-Fenster) folgendes eingeben:
| Code: | Sub OnButtonClick(control As IRibbonControl)
' ACHTUNG: Unter VBA / Extras / Verweise muss die
' Microsoft Office 12.0 Object Library aktiviert sein!!
Select Case control.Id
Case "hauptformular"
DoCmd.OpenForm "frmHauptformular"
Case "beenden"
If MsgBox("Wollen Sie wirklich Ihre Arbeit beenden?", _
vbYesNo + vbDefaultButton2, "TRAXS") = vbYes Then DoCmd.Quit
Case "kunden"
DoCmd.OpenForm "frmKunden"
Case "subunternehmer"
DoCmd.OpenForm "frmSubunternehmer"
Case "zugmaschinen"
DoCmd.OpenForm "frmZugmaschinen"
'...
Case Else
MsgBox "OnButtonClick: Unbekannter Formularname!"
End Select
End Sub | Das bedeutet: "Sieh Dir den id-Wert an (Select Case control.id). Wenn darin "kunden" steht (Case "kunden") dann öffne das Formular "frmKunden" (DoCmd.OpenForm "frmKunden"), wenn darin "subunternehmer" steht (Case "subunternehmer") dann öffne das Formular "frmSubunternehmer" (DoCmd.OpenForm "frmSubunternehmer"), ... usw.
Für Deine eigene Access-Datenbank musst Du natürlich die label und die id's anders nennen - nämlich entsprechend den Formularen, die Du mit den Clicks in die MFL öffnen willst!
Das war's schon!
Sieh Dir das alles nochmal in meiner Beispieldatenbank an und dann:
Viel Erfolg beim Basteln Deiner ersten eigenen Multifunktionsleiste!!
MfG
A*
PS: Einen Wermutstropfen zum Schluss: Sollte die XML-Datei zur Beschreibung der MFL falsch geschrieben worden sein, so bringt Access keine Fehlermeldung! Es passiert einfach gar nichts! Du solltest daher mit einer definitiv funktionierenden XML-Datei beginnen (z.B. mit meiner) und diese schrittweise abändern, bis sie Deinen Bedürfnissen entspricht.
_________________ 1. Gebot: Du sollst lange und gründlich über Dein Datenmodell nachdenken!
2. Gebot: Du sollst keine Formulare erstellen ohne gutes Datenmodell!
| Beschreibung: |
| Die Beispieldatenbank (2007er Format) |
|
 Download |
| Dateiname: |
traxs-v09.zip |
| Dateigröße: |
174.58 KB |
| Heruntergeladen: |
26 mal |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Access Hilfe: Access erstellt Kopie beim Öffnen |
9 |
Jurugu |
113 |
27. Jan 2010, 22:06 Jurugu  |
 |
Access Tipps & Tricks: 1. Suchformular in 10 Minuten erstellt |
27 |
Thomasro |
106337 |
30. Nov 2009, 18:58 Bitsqueezer  |
 |
Access Programmierung / VBA: Schaltflächenbild für Multifunktionsleiste (Ribbon) |
2 |
Opusretis |
321 |
16. Jul 2009, 07:08 Opusretis  |
 |
Access Hilfe: Access DB erstellt und VB Form gemacht, wie verknüpfen ? |
0 |
MACfuzzi |
79 |
22. Mai 2009, 00:42 MACfuzzi  |
 |
Access Hilfe: Multifunktionsleiste minimieren mit VBA |
4 |
Gast |
2533 |
03. Feb 2009, 15:19 MK939  |
 |
Access Programmierung / VBA: Diagramm per VBA erstellt aber zickt rum |
4 |
Z.Mart |
499 |
20. Jan 2009, 17:02 Z.Mart  |
 |
Access Programmierung / VBA: Filter kann nicht über Code erstellt werden |
2 |
Sepp10 |
80 |
12. Jan 2009, 19:55 Sepp10  |
 |
Access Formulare: MDE Datenbank kann nicht erstellt werden |
3 |
anova |
738 |
26. Okt 2007, 19:09 Gast  |
 |
Access Programmierung / VBA: Recodset schnell speichern |
4 |
Geisterfahrer75 |
391 |
04. März 2007, 01:09 Willi Wipp  |
 |
Access Formulare: Mausrad erstellt neuen Eintrag |
1 |
Nil |
504 |
04. Jan 2007, 15:54 Nil  |
 |
Access Programmierung / VBA: Klick auf Speichern erstellt ein kombifeld im Formular |
1 |
chillfaktor |
382 |
13. Dez 2006, 12:09 rita2008  |
 |
Access Programmierung / VBA: Vba zu schnell! |
9 |
Svenman_1 |
697 |
24. Okt 2006, 16:28 Gast  |
| |
|