expertenaustausch > microsoft.* > microsoft.excel

Susanne Wenzel (16.05.2005, 15:47)
Hallo NG,
meine Googelei hat leider nichts erbracht (vielleicht hatte ich auch die
falschen Stichworte), daher frage ich hier mal nach:

Welche Möglichkeiten gibt es ab ExcelXP, eine Schaltfläche in der
Symbolleiste optisch als "gedrückt" darzustellen?

In Excel2000 funktionierte das noch so schön mit:
CommandBars(xyz).Controls(xyz).State = msoButtonDown

Daraufhin wurde die Schaltfläche "eingesunken" dargestellt, also schön
erkennbar als "gedrückt".
Seit ExcelXP meldet zwar diese Codezeile immerhin keinen Fehler, aber an
der Darstellung der Schaltfläche hat sich leider auch nichts geändert.:-(

Gibt es eine Variante, wie ich meine gewünschte Darstellung wiederbekomme
oder habe ich etwas übersehen oder muss ich dieses neue "Feature" von Excel
(vermutlich wohl Office insgesamt) so hinnehmen?

Vielen Dank fürs Lesen und eventuelle Tips und
viele Grüße aus dem hohen Norden Deutschlands
Susanne
Frank Arendt-Theilen (16.05.2005, 21:48)
Hallo Susanne,
als Beispiel:

Set myControl1 = CommandBars("Custom").Controls(1)
With myControl1
.State = msoButtonDown
End With

Anmerkung:
Die With-Anweisung ist für diese Aktion zwingend.

MfG Frank
_____________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Website: Auftragsprogrammierung
Melanie Breden (16.05.2005, 21:52)
Hallo Susanne,

Susanne Wenzel schrieb:
[..]
> Gibt es eine Variante, wie ich meine gewünschte Darstellung wiederbekomme
> oder habe ich etwas übersehen oder muss ich dieses neue "Feature" von Excel
> (vermutlich wohl Office insgesamt) so hinnehmen?


die State-Eigenschaft funktioniert in Excel XP noch genauso, wie in Excel2000.
Die Schaltfläche wird durch eine farbliche Hervorherbung in hellblau als gedrückt angezeigt.

Wie lautet denn dein genauer Code?
Melanie Breden (16.05.2005, 22:07)
Hallo Frank,

Frank Arendt-Theilen schrieb:
> Set myControl1 = CommandBars("Custom").Controls(1)
> With myControl1
> .State = msoButtonDown
> End With
> Anmerkung:
> Die With-Anweisung ist für diese Aktion zwingend.


die With-Anweisung ist zwar sehr empfehlenswert und übersichtlicher,
aber dennoch nicht zwingend erforderlich!

Public Sub NeueLeiste()
Dim cmdBar As CommandBar
Dim cmdBtn As CommandBarButton

On Error Resume Next
Application.CommandBars("MyBar").Delete
On Error GoTo 0

Set cmdBar = Application.CommandBars.Add( _
Name:="MyBar", Temporary:=True)
cmdBar.Visible = True

Set cmdBtn = cmdBar.Controls.Add
cmdBtn.Caption = "TestButton"
cmdBtn.Style = msoButtonCaption
cmdBtn.OnAction = "MyMakro"
cmdBtn.State = msoButtonDown
End Sub

Public Sub MyMakro()
Application.CommandBars("MyBar").Controls("TestBut ton") _
.State = msoButtonUp
End Sub
Susanne Wenzel (17.05.2005, 05:38)
Hallo Frank,
Am Mon, 16 May 2005 21:48:29 +0200 schrieb Frank Arendt-Theilen:

> als Beispiel:
> Set myControl1 = CommandBars("Custom").Controls(1)
> With myControl1
> .State = msoButtonDown
> End With
> Anmerkung:
> Die With-Anweisung ist für diese Aktion zwingend.


der Code, den ich geliefert habe, war nur ein kleines Schnipselchen.
Problem ist nicht (jedenfalls meiner Meinung nicht, aber ich kann mich
natürlich irren) der richtige Code, sondern dass die Schaltfläche sich
nicht richtig darstellt, sie erscheint nicht "gedrückt" oder von mir aus
auch sonstwie gekennzeichnet, dass auf sie geklickt wurde.

Also ist nicht erkennbar, dass sie schon einmal gedrückt wurde. In
Abhängigkeit vom Gedrücktsein wird aber unterschiedlicher Code ausgeführt,
es wäre also (wie es der gleiche Code in Excel2000 ja auch klaglos tut)
schön, wenn optisch zu erkennen ist, "dass der Lichtschalter betätigt
wurde".

Viele Grüße aus dem hohen Norden Deutschlands
Susanne

P.S.: Ich bin ab heute 3 Tage Offline, kann mich daher frühestens
Donnerstagabend melden.
Susanne Wenzel (17.05.2005, 05:54)
Hallo Melanie,
Am Mon, 16 May 2005 21:52:33 +0200 schrieb Melanie Breden:

> Susanne Wenzel schrieb:
> die State-Eigenschaft funktioniert in Excel XP noch genauso, wie in Excel2000.


in gewissem Sinne, ja. Ich kann sie setzen und abfragen, das Überwachungs-
bzw. Direktfenster meldet mir auch den korrekten Zustand, an dem ich was
festmachen kann, bloß die Darstellung ist unerwünscht. Das gleiche Phänomen
habe ich in Excel2003 (das ich mal an einem fremden Rechner hatte)
ebenfalls erlebt.

> Die Schaltfläche wird durch eine farbliche Hervorherbung in hellblau als gedrückt angezeigt.


Meinst Du diese "XP-like" Darstellung, wenn man mit der Maus über die
Schaltfläche geht (ohne sie zu drücken), dass das Symbol leicht nach links
oben verschoben wird, die Schaltfläche einen Rand bekommt und bläulich
unterlegt wird? Sobald ich mit der Maus nicht mehr die Schaltfläche
berühre, ist die Darstellung wieder die alte.

> Wie lautet denn dein genauer Code?


Sub MeinCode

If CommandBars("Worksheet Menu Bar").Controls("MeinControl").State =
msoButtonUp Then
CommandBars("Worksheet Menu Bar").Controls("MeinControl").State =
msoButtonDown
'TueDieses
Else
CommandBars("Worksheet Menu Bar").Controls("MeinControl").State =
msoButtonUp
'TueWasAnderes
End If

End Sub

Ich habe meine Schaltfläche tatsächlich in der Hauptmenüleiste (hatte ich
schon immer), das ist also kein Verschreiber, es müsste aber meiner Meinung
nach völlig egal sein, wo sich der Button befindet.

Was ich vergessen hatte: Excel2000 und ExcelXP mit jeweils neuesten SPs.

Wäre schön, wenn Du etwas auf Lager hättest:-).

Viele Grüße aus dem hohen Norden Deutschlands
Susanne

P.S.: Wie ich Frank schon schrieb, bin ich jetzt 3 Tage Offline, kann mich
also frühestens Donnerstagabend wieder melden.
Melanie Breden (17.05.2005, 08:16)
Hallo Susanne,

Susanne Wenzel schrieb:
>> Die Schaltfläche wird durch eine farbliche Hervorherbung in hellblau als gedrückt angezeigt.

> Meinst Du diese "XP-like" Darstellung, wenn man mit der Maus über die
> Schaltfläche geht (ohne sie zu drücken), dass das Symbol leicht nach links
> oben verschoben wird, die Schaltfläche einen Rand bekommt und bläulich
> unterlegt wird? Sobald ich mit der Maus nicht mehr die Schaltfläche
> berühre, ist die Darstellung wieder die alte.


ja, das meine ich, in Excel 2003 wird eine gedrückte Schaltfläche in orange dargestellt..

> Ich habe meine Schaltfläche tatsächlich in der Hauptmenüleiste (hatte ich
> schon immer), das ist also kein Verschreiber, es müsste aber meiner Meinung
> nach völlig egal sein, wo sich der Button befindet.


Auf welcher Befehlsleiste sich der Button befindet spielt keine Rolle.
Ich denke das Problem liegt darin, wie die Schaltfläche eingefügt wurde.

Vermutlich hast du die Schaltfläche über den Anapassen-Dialog eingefügt.
Die State-Eigenschaft kann mit VBA nur verändert werden, wenn die
Schaltfläche mit VBA eingefügt wurde.

Bei dem Versuch die State-Eigenschaft einer manuell eingefügten Schaltfläche
zu ändern erhalte ich einen Laufzeitfehler.
Frank Arendt-Theilen (17.05.2005, 16:21)
Hallo Melanie,
ich habe den Code aus der Online-Hilfe getestet und er funktionierte -
aus welchen Gründen auch immer - leider nicht.
Erst nach Abänderung mit der With-Anweisung funktionierte er wie
gewünscht.
Gut, das es auch anders geht!

MfG Frank
_____________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Website: Auftragsprogrammierung
Susanne Wenzel (20.05.2005, 05:55)
Hallo Melanie,
Am Tue, 17 May 2005 08:16:59 +0200 schrieb Melanie Breden:

> Susanne Wenzel schrieb:
> ja, das meine ich, in Excel 2003 wird eine gedrückte Schaltfläche in orange dargestellt..


öfter mal was neues. Das heißt, die Hintergrundfarbe der Schaltfläche wird
geändert? Kann man die in Excel 2003 eigentlich selbst einstellen?

> Ich denke das Problem liegt darin, wie die Schaltfläche eingefügt wurde.
> Vermutlich hast du die Schaltfläche über den Anapassen-Dialog eingefügt.


Ja, hatte ich gemacht.

> Die State-Eigenschaft kann mit VBA nur verändert werden, wenn die
> Schaltfläche mit VBA eingefügt wurde.


:-(
Das hatte ich eigentlich nicht vor (fände ich ein bisschen viel Aufwand für
eine erwünschte Darstellung einer Schaltfläche).

> Bei dem Versuch die State-Eigenschaft einer manuell eingefügten Schaltfläche
> zu ändern erhalte ich einen Laufzeitfehler.


Oh je, da ging es mir mit ExcelXP ja noch richtig gut...
Das heißt also, dass ich mich dann mit einer Variante beschäftigen muss,
wie ich dem Anwender mitteile, dass die Schaltfläche bereits gedrückt wurde
(Hintergrundfarbe? Anderes Symbol?).

Hast Du da eventuell etwas in Deinem Nähkästchen? ;-)

Vielen Dank für Deine Mühen und
viele Grüße aus dem hohen Norden Deutschlands
Susanne
Melanie Breden (20.05.2005, 07:59)
Hallo Susanne,

Susanne Wenzel schrieb:
>> Die State-Eigenschaft kann mit VBA nur verändert werden, wenn die
>> Schaltfläche mit VBA eingefügt wurde.

> :-(
> Das hatte ich eigentlich nicht vor (fände ich ein bisschen viel Aufwand für
> eine erwünschte Darstellung einer Schaltfläche).


du verwendest doch sowieso Code in der Arbeitsmappe, dann ist es auch nicht
viel Aufwand die Schaltfläche beim Öffnen der Mappe zu erstellen.
Schau dir mal meinen Code dazu im posting zu Beginn des threads an.

> Das heißt also, dass ich mich dann mit einer Variante beschäftigen muss,
> wie ich dem Anwender mitteile, dass die Schaltfläche bereits gedrückt wurde
> (Hintergrundfarbe? Anderes Symbol?).


Hier würdest du auch Aufwand betreiben, der sich mit dem Erstellen der
Schaltfläche zur Laufzeit erübrigen würde.

> Hast Du da eventuell etwas in Deinem Nähkästchen? ;-)


Mein Nähkästchen würde die Schaltfläche jeweils neu stricken ;-)
Susanne Wenzel (20.05.2005, 21:56)
Hallo Melanie,
Am Fri, 20 May 2005 07:59:25 +0200 schrieb Melanie Breden:

> Susanne Wenzel schrieb:
>>> Die State-Eigenschaft kann mit VBA nur verändert werden, wenn die
>>> Schaltfläche mit VBA eingefügt wurde.


[...]

>> Das heißt also, dass ich mich dann mit einer Variante beschäftigen muss,
>> wie ich dem Anwender mitteile, dass die Schaltfläche bereits gedrückt wurde
>> (Hintergrundfarbe? Anderes Symbol?).

> Hier würdest du auch Aufwand betreiben, der sich mit dem Erstellen der
> Schaltfläche zur Laufzeit erübrigen würde.


ich werde demnach also noch einmal in mich gehen müssen, wie ich die Sache
angehen will. Der Code soll im Prinzip ja unter Excel2000 laufen und dort
gibt es keine Probleme, ich habe also noch ein bisschen Zeit.:-)

>> Hast Du da eventuell etwas in Deinem Nähkästchen? ;-)

> Mein Nähkästchen würde die Schaltfläche jeweils neu stricken ;-)


Ok, den zarten Wink habe ich verstanden.:-)

Vielen Dank für Deine Mühen und
viele Grüße aus dem hohen Norden Deutschlands
Susanne
Ähnliche Themen