Tasten in Symbolleisten per Makro ändern

Moin,

leider habe ich nix gefunden: Ich habe div. selbstdefinierte Symbolleisten (Excel 2003). Darin Tasten, die einen Makro aktivieren. Manchmal möchte ich abhängig von der ausgelösten Aktion das Aussehen einer Taste ändern, z.B. das Tastensymbol oder dessen Farbe.
Habe schon mit „Makro aufzeichnen“ versucht, da wird aber nix abgelegt.
Wie kann ich das machen?
Geht das überhaupt?

Danke
Laika

leider habe ich nix gefunden: Ich habe div. selbstdefinierte
Symbolleisten (Excel 2003). Darin Tasten, die einen Makro
aktivieren. Manchmal möchte ich abhängig von der ausgelösten
Aktion das Aussehen einer Taste ändern, z.B. das Tastensymbol
oder dessen Farbe.

Hallo Laika,

so kannste das Aussehen des Symbols wechseln:

i = Application.CommandBars("Worksheet Menu Bar").Controls("Fadenkreuz").FaceId
If i = 463 Then
 i = 578
Else
 i = 463
End If
Application.CommandBars("Worksheet Menu Bar").Controls("Fadenkreuz").FaceId = i

Mit
.OnAction = ThisWorkbook.Name & „!EinAus“
kannste das Makro auswählen für das Symbol.

Gruß
Reinhard

Guten Morgen treuer Beantworter meiner Fragen!

Die FaceId ist laut VBA-Hilfe für benutzerdefinierte Symbolleisten immer Null. Nach meinem Verständnis ist das also eine interne Nummer der vordefinierten VBA-Icons.

i = Application.CommandBars(„Worksheet Menu
Bar“).Controls(„Fadenkreuz“).FaceId
If i = 463 Then
i = 578
Else
i = 463
End If

Application.CommandBars(„Worksheet Menu
Bar“).Controls(„Fadenkreuz“).FaceId = i

Ich habe trotzdem mal Deine Prozedur laufen lassen: Die Taste (das dafür von mir erzeugte Symbol) verschwindet dann in der Symbolleiste, ist aber als Lücke noch da und auch bedienbar!
Es ist komplett gelöscht, kriege es nur durch neu zeichnen wieder hin.

Seltsam ist auch das Verhalten von VBA: Wenn ich die Taste ansprechen will, an Stelle deines „Fadenkreuz“ muss ich die Nummer der Taste auf der Leiste angeben (was ist „Fadenkreuz“ bei Dir? Name der Taste?), wobei Trennstriche nicht mitzaehlen. Verpasse ich den Tasten einen Text, z.B.:

Toolbars("Diverses").ToolbarButtons(1).Name = "Werte kopieren"

, dann muss ich Trennstriche mitzaehlen … na ja, Kleinigkeit.

Mit

.OnAction = ThisWorkbook.Name & „!EinAus“

kannste das Makro auswählen für das Symbol.

Ja, das funktioniert gut bei mir mit

ActiveSheet.Shapes(NAME\_TASTE).OnAction = "makroname"

Gruss
Laika

Hallo Laika,

Die FaceId ist laut VBA-Hilfe für benutzerdefinierte
Symbolleisten immer Null.

ups, sorry, hab da nicht gelesen :smile: Ich benutze auch keine eigenen Symbolleisten, hab mir mal vor Jahren angeschaut wie das geht und gut iss. Die paar Makros die ich über Klick auf Symbole „oben“ steuere paassen noch gut rechts neben das Frageziechen oben in der Menueleiste.

Application.CommandBars(„Worksheet Menu Bar“).Controls(„Fadenkreuz“).FaceId

Auf diese Menueleiste bezieht sich da auch das „Worksheet Menu Bar“, die fest eingebauten haben alle englische Namen.
Und „Fadenkreuz“ ist da ein Symbol rechts neben dem Fragezeichen, was ich im Add-Manager durch Aktivierung oder Deaktivierung meiner Fadenkreuz.xla enstehen lasse oder verschwinden lasse.

Was du willst und was mein Fadenkreuz-Symbol ist, ist ein sogenannter Toggle-Button.
Damit wählt man zwei Modi aus. In meinem Fall wäre das Fadenkreuz EIN oder Fadenkreuz AUS. Und zwar beides durch Klick auf den GLEICHEN Button.

Um jetzt leicht zu erkennen welcher Modus grade eingeschaltet ist, so wechsle ich jeweils die Face-ID aus.

OnAction benutze ich nicht, könnte ich natürlich um je ein anderes Makro drauzulegen, aber ich nehme die andere Variante, das makro bleibt immer gleich, ianfangs des makros werte ich einfach die Face-ID-Nr aus, jenachdem reagiert das Makro anders.

Nach meinem Verständnis ist das also
eine interne Nummer der vordefinierten VBA-Icons.

Ja, jede XL-Version hat unteschiedlich viele, von hunderten bis tausende, deshlab sehe ich da für mich keinerlei Begrünmdung eines selbst zu malen oder umzufärben.
Ich hatte dazu hier was geschrieben so vor 6-8 Wochen, auch wie du dir alle anschauen kannst…

Ich habe trotzdem mal Deine Prozedur laufen lassen: Die Taste
(das dafür von mir erzeugte Symbol) verschwindet dann in der
Symbolleiste, ist aber als Lücke noch da und auch bedienbar!

Es ist komplett gelöscht, kriege es nur durch neu zeichnen
wieder hin.

Okay, mein Fehler, dann muß man wohl in einer eigenen Symbolleiste anders an die Sache rangehen, kann ich jetzt nix zu sagen, muß ich mir erst mal eine samt Symbolen schnitzen.

Was genau meinst du da mit tasten? Für mich ist eine Symbolleiste das was du siehst wenn du z.B. über Ansicht–Symbolleisten—Formular die Formularleiste „Holst“. Wo sind denn da Tasten?

Du hattest so ähnlich bei deiner Anfrage so für mich seltsame Wortwahlen benutzt. Da müssen wir erst mal abchecken was wir beide eigentlich genau meinen bevor wir aneinander vorbeireden.

Seltsam ist auch das Verhalten von VBA: Wenn ich die Taste
ansprechen will, an Stelle deines „Fadenkreuz“ muss ich die
Nummer der Taste auf der Leiste angeben (was ist „Fadenkreuz“
bei Dir? Name der Taste?), wobei Trennstriche nicht
mitzaehlen. Verpasse ich den Tasten einen Text, z.B.:

Toolbars(„Diverses“).ToolbarButtons(1).Name = „Werte
kopieren“

, dann muss ich Trennstriche mitzaehlen … na ja,
Kleinigkeit.

Da, schon wieder *gg* was sinnen das für Trennstriche, welche tasten.
Fadenkreuz habe ich ja schon erläutert.
Ist auch nix kriegerisches, es markiert nur farblich waagrecht und senkrecht die Zeilen und Spalten des gerade selektierten Bereiches, dient nur zur Übersicht bei vielen daten.
So wie sich manche aus gutem Grund jede zweite Zeile farbig machen um weniger oft mal in der Zeile zu verrutschen beim Ablesen, Eintragen.

Mit

.OnAction = ThisWorkbook.Name & „!EinAus“

kannste das Makro auswählen für das Symbol.

Ja, das funktioniert gut bei mir mit ActiveSheet.Shapes(NAME_TASTE).OnAction = „makroname“

Was hat nun ActiveSheet.Shapes(NAME_TASTE) mit einer Symbolleiste zu tun?

Gruß
Reinhard

Moin Reinhard,

es wird Zeit, Dir zu antworten.

Die paar Makros die ich über Klick auf
Symbole „oben“ steuere paassen noch gut rechts neben das
Frageziechen oben in der Menueleiste.

Bei mir ist da natürlich auch genug Platz, aber ich habe es gern, Aktionen mit nur einem Klick auszulösen. Mit einem Menü müsste ich erst das Menü klicken, dann den Menüpunkt suchen und anklicken. „Die Bedienfreundlichkeit eines Programms ist umgekehrt proportional (exponentiell!) zur Anzahl Klicks und Tasten, einen Vorgang auszulösen.“
Da ich sehr viel mit Excel arbeite, habe ich für alles Mögliche Tasten in eigenen Symbolleisten - z.Zt. etwa 20: „Werte kopieren“, „Werte eintragen“, „Monatsbearbeitung starten“ (da werden 10 Dateien mit Passwortanforderung geöffnet) uvm.
Den Tasten ordne ich Popup-Texte zu (ist hoffenztlich nicht zu lang):

'\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Sub BlasentexteDiverses()

 leisten\_name ("Diverses")
 With taste
 taste(1).Name = "Werte kopieren"
 taste(2).Name = "Werte eintragen"
 taste(3).Name = "Letzte Zeile bestimmen"
 taste(4).Name = "Text oder Grafikobjekt HORizontal + VERtikal MITTIG ausrichten"
 taste(5).Name = "Haftnotiz einkleben"
 taste(6).Name = "Überschrift: Times, Gr. 12, fett, unterstrichen, linksbündig"
 taste(7).Name = "Zeilenumbruch in Zellen"
 taste(8).Name = "Pfeil erzeugen"
 taste(9).Name = "Zellen gestrichelt umrahmen"
 taste(10).Name = "Symbolleiste Zeichnen öffnen"
 'taste(11) = Trennstrich
 taste(12).Name = "Stuckis Diagramm formatieren"
 taste(13).Name = "Hilfsgitternetz in Diagramm"
 taste(14).Name = "Säulenbreite = 40, Überlappung = 0"
 'taste(15) = Trennstrich
 taste(16).Name = "ActiveCell: DM in EURO umrechnen"
 taste(17).Name = "Stuckis Farbtabelle erzeugen"
 taste(18).Name = "Objekthantierung ausgeblendet öffnen"
 taste(19).Name = "Sichern"
 End With
End Sub
'\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Function leisten\_name(leiste$)
 Set taste = Toolbars(leiste).ToolbarButtons
End Function
'\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

Von dieser Art „Blasentexte…()“ habe ich noch einige, für jede Symbolleiste eine.

Application.CommandBars(„Worksheet Menu
Bar“).Controls(„Fadenkreuz“).FaceId

Damit habe ich noch nicht gearbeitet.

Was du willst und was mein Fadenkreuz-Symbol ist, ist ein
sogenannter Toggle-Button.

Genau. Das funktioniert auch gut mit der Taste „Objekthantierung ausgeblendet öffnen“ (das ist eine Sammlung von Prozeduren zur Behandlung von Zeichenobjekten, habe ich aus einem Buch). Sie toggelt zwischen öffnen und schliessen der Objekthantierung (.OnAction = „makro“). Nur das Aussehen der Taste kann ich (noch) nicht ändern.

OnAction benutze ich nicht, könnte ich natürlich um je ein anderes Makro drauzulegen, aber ich nehme die andere Variante, das makro bleibt immer gleich, ianfangs des makros werte ich einfach die Face-ID-Nr aus, jenachdem reagiert das Makro anders.

Ist wohl Geschmackssache oder das, wo man beim Erstellen am Schnellsten drauf kommt.

Nach meinem Verständnis ist das also
eine interne Nummer der vordefinierten VBA-Icons.

Ich hatte dazu hier was geschrieben so vor 6-8 Wochen, auch
wie du dir alle anschauen kannst…

Sorry, habe ich noch nicht gefunden.

Was genau meinst du da mit tasten? Für mich ist eine
Symbolleiste das was du siehst wenn du z.B. über
Ansicht–Symbolleisten—Formular die Formularleiste „Holst“.
Wo sind denn da Tasten?

Oder mit Rechtsklick auf einen leeren Bereich der Symbolleisten. Dannn kommt das gleiche Menü. Darin sind auch meine Symbolleisten aufgeführt, die ich dann anzeigen oder verschwinden lassen kann. Manche kommen automatisch beim Öffnen einer Mappe („Auto_Open()“).
Erstellen kannst Du sie über das Menü „Symbolleisten“ -> „Anpassen…“ -> „Neu…“ und ihr einen beliebigen Namen verpassen. Jeder Symbolleiste ordne ich dann (Reiter „Befehle“ im „Anpassen…“-Fensterchen) Tasten zu, denen ich dann beliebige selbstgestrickte Icons zuordnen kann.

Da, schon wieder *gg* was sinnen das für Trennstriche, welche
tasten.

„tasten“ siehe oben, „Trennstriche“ kann man zur Strukturierung einfügen. Finde im Moment aber nicht so schnell, wie man Trennstriche einfügt :frowning:(

Ja, das funktioniert gut bei mir mit

ActiveSheet.Shapes(NAME_TASTE).OnAction = „makroname“

Was hat nun ActiveSheet.Shapes(NAME_TASTE) mit einer
Symbolleiste zu tun?

Ah ja, Nachlässigkeit von mir: Ich benutze Textfelder (o.a. Zeichnen-Objekte), ordne ihnen Makros zu und ändere den Text und Farbe abhängig vom Zustand und der ausgelösten Aktion. Sind also keine Symbolleisten, sondern fest der Mappe/dem Blatt zugeordnete Objekte.

Gruss
Laika