schauan (Andre Schau)
13.Oktober 2012

"Pseudo"-Optionbuttons und -Checkboxen

Beispieldatei Pseudo-Optionbuttons und Checkboxen (xlsm)

Oft gibt es Fragestellungen zur Kenntlichmachung von Auswahlen, bei denen dem Anwender die Möglichkeiten der standardmäßig in Excel vorhandenen Optionbuttons und Checkboxen nicht ausreichen. Mal werden sie kleiner benötigt, und da verschwindet der Text, mal braucht man sie größer, und der Text lässt sich nicht formatieren, mal braucht man ein anderes Symbol ...
Zusätzlich soll das alles mit möglichst wenig Makros auskommen - wäre ja auch etwas aufwändig, zu jedem Button ein eigenes Makro zu schreiben.

Ich habe dafür eine Lösung mit "Pseudo"-Optionbuttons und -Checkboxen auf Basis von Commandbuttons und Bildern erstellt. Die Beispiele sind nur ein kleiner Einblick in die Möglichkeiten und können natürlich noch weiter ausgebeut werden. Zudem schneide ich in einem Beispiel das Thema Klassenprogrammierung an - keine Angst, so schlimm wie man es sich vielleicht vorstellt, ist es gar nicht. Siehe dazu auch meine (ganz) kurze Einführung in die Klassenprogrammierung Ich nutze die Klassen hier auch nur, um den Buttons Aktionen zuzuweisen. Die Buttons werden manuell erstellt und nicht per code, da sie mit der Mappe gespeichert werden. Somit stehen sie beim nächsten Öffnen wieder bereit.
Die in den jeweiligen Kapiteln erwähnten Grundlagen bzw. Vorbereitungen sind in den Beispielen natürlich schon enthalten. Sie sind als Hinweise für das eigenständige Nachvollziehen gedacht.

ActiveX - Buttons mit Klassenprogrammierung

ActiveX - Buttons

Vorbereitung:

Auf einem Tabellenblatt werden n Commandbuttons aus den ActiveX - Steuerelementen bzw. der Steuerelement-Toolbox (vor Office 2007) hinzugefügt. Das gewünschte Sonderzeichen kann anhand der Schriftartentabelle ermittelt und entsprechend eingefügt werden. Im code kann man dann entweder mit den Buchstaben aus der Standardschriftart oder mit dem code arbeiten. Ich habe in den Beispielen das jeweilige Standardschriftzeichen verwendet. Aufgrund des vorbestimmten Randabstandes des Textes müssen die Buttons mit einer gewissen Mindestgröße erzeugt werden, um die Aufschrift noch lesbar zu erhalten. Die Buttons sollten für ein besseres Handling umbenannt und durchnumeriert werden. Die codes sind im Modul mdlActiveX und dem Klassenmodul clsCmdBtnAuswahl.

Hinweise:

Für einen leeren Button sollte man das Leerzeichen verwenden. Nimmt man eine leere Zeichenkette, dann kann es vorkommen, dass der Button beim Speichern der Mappe Fonteinstellungen verliert und beim erneuten Öffnen entsprechende Fehlermeldungen erscheinen.

Sofern während der eigentlichen Arbeit mit der Mappe Steuerelemente hinzugefügt werden, wird die Makroausführung durch Excel unterbrochen. Die Buttons müssen danach neu initialisiert werden. Das kann man durch Ausführung des entsprechenden Makros auslösen oder durch Schließen und Öffnen der Mappe.

Ausführung:

Beim Öffnen der Datei werden die Buttons initialisiert. Das entsprechende Initialisierungsmakro wird Im Modul DieseArbeitsmappe im WorkBook_Open - Eventmakro aufgerufen. Die Buttons werden sie einer Klasse zugewiesen, erhalten entsprechend des gewünschten Types die zugehörige Aktion und werden dann in einer Collection gesammelt. Bei Betätigung eines Buttons wird das entsprechende Eventmakro des Klassenmoduls ausgeführt. Im Eventmakro sind die Eigenschaften des gedrückten Buttons ausles- und einstellbar. Hier wird z.B. die Symbolik des Buttons geändert. Anhand des Namens könnten dann auch unterschiedliche Aktionen eingeleitet werden.
Weitere Informationen finden sich in den Makros, der code ist ausführlich kommentiert.


Formular - Buttons

ActiveX - Buttons

Vorbereitung:

Auf einem Tabellenblatt werden n Commandbuttons aus den Formular - Elementen hinzugefügt. Das gewünschte Sonderzeichen kann anhand der Schriftartentabelle ermittelt und entsprechend eingefügt werden. Im code kann man dann entweder mit den Buchstaben aus der Standardschriftart oder mit dem code arbeiten. Ich habe in den Beispielen das jeweilige Standardschriftzeichen verwendet. Der Randabstandes des Textes ist hier deutlich kleiner als bei den ActiveX - Buttons, die Buttons können deutlich kleiner gestaltet werden. Die Buttons sollten für ein besseres Handling umbenannt und durchnumeriert werden. Die codes sind im Modul mdlFormular.

Hinweise:

Für einen leeren Button sollte man das Leerzeichen verwenden. Nimmt man eine leere Zeichenkette, dann kann es vorkommen, dass der Button beim Speichern der Mappe Fonteinstellungen verliert und beim erneuten Öffnen entsprechende Fehlermeldungen erscheinen.

Die Makros sind den Buttons fest zugewiesen, sodass eine Unterbrechung der Makroausführung hier keine Auswirkungen wie beim vorherigen Beispiel hat. Pro Typ ist nur jeweils ein Makro notwendig.

Ausführung:

Beim Öffnen der Datei werden die Buttons initialisiert. Das entsprechende Initialisierungsmakro wird Im Modul DieseArbeitsmappe im WorkBook_Open - Eventmakro aufgerufen. Das Makro dient dazu, den Buttons die Makros zuzuweisen. In dem Zusammenhang könnte man auch einen definierten Grundzustand herstellen. Bei fester Zuweisung von Makros zu den Buttons kann diese Initialisierung entfallen.
Bei Betätigung eines Buttons wird das entsprechende Eventmakro im Modul ausgeführt. Im Eventmakro ist der Name des gedrückten Buttons auslesbar. Hier wird durch Änderung des Schriftzeichens die Symbolik des Buttons geändert. Anhand des Namens könnten dann auch unterschiedliche Aktionen eingeleitet werden.
Beim Speichern der Mappe wird der Zustand der Buttons einschliesslich der anfangs zugewiesenen Aktionen mit gesichert.
Weitere Informationen finden sich in den Makros, der code ist ausführlich kommentiert.


Bild - Buttons

ActiveX - Buttons

Vorbereitung:

Auf einem Tabellenblatt werden n Bilder als zukünftige Buttons hinzugefügt. Für den jeweiligen Schaltzustand ist je ein Bild notwendig. Dadurch ist ein beliebiges Aussehen der Buttons möglich.

Die Bilder sollten für ein besseres Handling umbenannt und durchnumeriert werden. Dabei sollten die für die beiden Zustände jeweils zusammengehörigen Bilder die gleiche Indexzahl erhalten (siehe dazu die code-Kommentare). Die codes sind im Modul des Tabellenblattes BilderButton. Hinweise:

Die Makros sind den Buttons fest zugewiesen, sodass eine Unterbrechung der Makroausführung hier keine Auswirkungen wie beim ersten Beispiel hat. Pro Typ ist nur jeweils ein Makro notwendig.

Ausführung:

Wegen der festen Zuweisung von Makros zu den Buttons kann die in den vorigen Beispielen angewandte Initialisierung entfallen.
Bei Betätigung eines Buttons wird das entsprechende Eventmakro im Modul ausgeführt. Im Eventmakro ist der Name des gedrückten Buttons auslesbar. Der gedrückte Button wird unsichtbar geschalten, der zugehörige Button für den gegenteiligen Zustand sichtbar. Hier im Beispiel sind die Buttons nebeneinander an- und zugeordnet. Anhand des Namens könnten dann auch unterschiedliche Aktionen eingeleitet werden.
Im Modul habe ich noch weitere Makros hinterlegt, z.B. um alle Buttons gleichzeitig sichtbar zu schalten oder einen definierten Zustand zu erreichen. Das kann z.B. beim Programmieren und Testen hilfreich sein.
Weitere Informationen finden sich in den Makros, der code ist ausführlich kommentiert.