Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Verhalten CommandButton in UserForm

Forumthread: Verhalten CommandButton in UserForm

Verhalten CommandButton in UserForm
28.05.2025 22:58:45
PvDeikmann
Hallo liebes Forum,
Ich habe mir die Finger schon wund gesucht und noch nichts passendes gefunden. Daher die Frage ins Forum : Ich möchte gerne, dass meine CommandButtons in den UserForms das gleiche Verhalten aufweisen, wie die Buttons in einer MsgBox, also bei Focuserhalt einen blauen Rahmen und die Hintergrundfarbe etwas 'angepasst' . Wo kann ich einen Tip bekommen, wie das hinzubekommen ist ? Wo muss ich suchen ? Ich bin für jeden Hinweis dankbar .
Vielen Dank schon Mal ....

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verhalten CommandButton in UserForm
28.05.2025 23:48:59
JoWE
Hallo,
Du könntest ein Label deaktiviert so hinter den Commandbutton positionieren, dass nur die Ränder sichtbar sind und dann das Label jeweils bei Fokuserhalt bzw. Fokusverlust auf 'visible' bzw. auf 'hidden' setzen.
Gruß
Jochen
AW: Verhalten CommandButton in UserForm
29.05.2025 12:10:37
volti
Hallo,

da gibt es wohl keine einfache Möglichkeit.

Sollte die Lösung von JoWe als einfachste Möglichkeit nicht ausreichen, gäbe es aus meiner Sicht noch folgende (noch nicht getestete) Möglichkeiten:

1)
Nutzen des MouseMove-Events des Buttons, um festzustellen, ob sich der Cursor über dem Button befindet. Dann den Rahmen nach JoWe aktivieren und die Hintergrundfarbe des Buttons anpassen.
Nutzen des MouseMove-Events der Userform und anderer Objekte, um festzustellen, ob der Cursor den Buttonbereich verlassen hat und die Aktionen entsprechend rückgängig machen.

Zum Ermitteln des Focus kann die API-Funktion GetFocus herangezogen werden. Diese liefert aber nur das Handle des Buttons. Die Handle müssten also vorher ermittelt werden.
Etwa so:
  oCtrl.SetFocus          ' Button aktivieren

hWndCtrl = GetFocus() ' Handle holen


2)
Nutzen des API-Timers (SetTimer) um das Verlassen des Buttons abzufangen.

3)
SubClassing der Userform oder der betroffenen Buttons, je nach Verfahren.
Hierbei hookt man sich in die Messageschleife der Userform oder des Controls ein und erhält Zugang zu den von Windows versendeten Messages.
Hier kann man die benötigten Nachrichten abfangen und individuell abändern bzw. eigene Aktionen durchführen.

Hierzu gibt es Beispiele anhand der Kolorierung von Messageboxen z.B. bei Mr.Excel oder auch hier

https://www.clever-excel-forum.de/Thread-Projekt-Coole-MessageBox

die abgewandelt auch auf die UF-Buttons angewendet werden könnten.


Dieses schreibe ich nur der Vollständigkeit halber mit der Aussage: Ja, es ist möglich Deine Anforderung umzusetzen.

Praktisch ist es aber ein umfangreicher und nicht einfacher Code und m.E. nur für Leute mit professionellen VBA-Kenntnissen machbar.

viele Grüße
Karl-Heinz
Anzeige
AW: Verhalten CommandButton in UserForm
29.05.2025 00:35:02
PvDeikmann
Hallo JoWe,
das hört sich aber nicht so an, als ob es eine 'elegante' Lösung gäbe, die ich nur noch nicht gefunden habe. Auch das Ereignis GotFocus bzw LostFocus habe ich (noch) nicht bei einem CommandButton gefunden.
Trotzdem schon Mal Dank für Deine Mühe
Anzeige
AW: Beispiel
29.05.2025 22:11:35
Potter-v-D
Ersteinmal Danke für die Rückmeldungen.
Ich bin z.Zt. nicht vor Ort und werde erst am kommenden DI wieder vor dem Rechner sitzen und versuchen , Eure Tips umzusetzen. Ich melde mich dann, sollte ich keinen Erfolg haben. Euch allen ein schönes (langes) Wochenende !
Anzeige
AW: Weiteres Beispiel
30.05.2025 11:30:34
Kuwer
Hallo,

Jowes Beispiel etwas abgespeckt: Es wird nur ein Label benötigt, dessen Position und Größe automatisch angepasst wird.

https://www.herber.de/bbs/user/177624.xlsm

Gruß, Uwe
Anzeige
AW: Weiteres Beispiel
30.05.2025 12:39:31
Jowe
Hallo Uwe,
gute Verbesserung, hatte ich bei meinem "quick and dirty" überhaupt nicht dran gedacht.
Gruß
Jochen
AW: Weiteres Beispiel
30.05.2025 16:43:54
volti
Hallo,

ich greife jetzt doch noch mal Kuwers Beispiel auf und erweitere es um die Highlihting-Funktion:

Damit man unabhängig von der Anzahl der Buttons ist, wurde eine Klasse erstellt. Hierdurch können jetzt beliebig viele Buttons hinzugefügt werden, ohne dass am Code etwas geändert werden müsste.
Gleichzeitig habe ich auch das Highlighting automatisiert. Man muss nun auch die Farben nicht mehr vorgeben, sondern man kann jedem Button auch eine andere Farbe zuweisen,
Die Enter und Exit-Methode wird hier nicht unterstützt, (mit MausUp/Dn usw. war mir zu müßig), so dass hier für jeden Button wie bisher programmiert einzeln programmiert werden muss.

Der Klassencode:
Public WithEvents coCommandButton As MSForms.CommandButton


Private Declare PtrSafe Function OleTranslateColor Lib "oleaut32.dll" ( _
ByVal clr As OLE_COLOR, ByVal palet As LongPtr, col As Long) As Long
Private Declare PtrSafe Function ColorAdjustLuma Lib "shlwapi.dll" ( _
ByVal clrRGB As Long, ByVal n As Long, ByVal fScale As Long) As Long

Private Sub coCommandButton_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Buttonfarbe aufhellen
Dim iFarbe As Long, R As Object

If Not goHLBtn Is coCommandButton Then ' Nur bei Buttonmousoverwechsel einmal machen
Set R = coCommandButton.Parent.lblBlauerRahmen

If Not goHLBtn Is Nothing Then ' Alten Button zurücksetzen
goHLBtn.BackColor = Val(R.Tag)
End If

Set goHLBtn = coCommandButton ' Button global retten
iFarbe = goHLBtn.BackColor
R.Tag = iFarbe ' Aktuelle Buttonfarbe in Tag retten
OleTranslateColor iFarbe, 0, iFarbe
iFarbe = ColorAdjustLuma(iFarbe, 400, True) ' Farbe aufhellen,400 = Intensität
goHLBtn.BackColor = iFarbe ' Farbe des Button zuordnen
End If
End Sub


und die Datei

https://www.herber.de/bbs/user/177627.xlsm

Viele Grüße
KH
Anzeige
AW: Weiteres Beispiel
30.05.2025 16:59:07
JoWE
Na schau an, noch eleganteres wird der Fragesteller wohl kaum finden können.
Jochen
AW: Weiteres Beispiel
30.05.2025 18:09:35
PvDeikmann
Hallo an alle ,
Ihr seid alle die Groessten !!!
Vielen Dank , Ich bin voll dankbar !

PvDeikmann
AW: Verhalten CommandButton in UserForm
29.05.2025 01:26:45
Oberschlumpf
Hi,

das es, wie du gern hättest, keine elegantere Lösung gibt, könnte daran liegen, dass die Button in einem Userform(ular!) keine Randfarbe, sondern nur For- und Backcolor-Eigenschaft haben. Daher find zumindest ich die Idee von JoWe schon elegant.

Und ja, Got- und LostFocus hab ich auch nohc nicht gefunden - hier kann es sein, dass Got + Lost nur im richtigen VB, und nicht in VBA enthalten sind.
Aber vllt kann man den ausgewählten Button über seinen TabIndex bestimmen, um dann entsprechend das richtige Label auf sichtbar + blau oder unsichtbar zu stellen.

Wenn du es selbst nicht hinbekommst = kein Problem!, dann zeig uns bitte (d)ein Bsp-Userform mit den nötigen Controls, und wir versuchen dann unser Glück.

Ciao
Thorsten
Anzeige
AW: Verhalten CommandButton in UserForm
29.05.2025 02:09:53
JoWE
ok, wenn Du eine elegantere Lösung findest, teile es mit
AW: Verhalten CommandButton in UserForm
29.05.2025 16:30:08
Daniel
In der Userform heißen die entsprechenden Events Enter und Exit.
Bei einem Button, der mit der Maus angeklickt wird, könnte man auch MouseDown und MouseUp verwenden.
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18