Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Button Backcolor

Button Backcolor
22.06.2022 11:44:44
Antonio
Hallo,
suche schon lang und nichts gefunden über Button1 bei Click farbe wechsel und über Button2 farbe zurück.
Ich versuche es besser zu erklären:
ich habe in einer UserForm 10 Button und möchte das wenn ein Button geclicked wird das dieser die Farbe ändert, dann weiß ich der Button
ist aktiv und läuft was.
Beim clicken auf einen anderen Button, soll der erste seine ursprüngliche Farbe annehmen und der zweite soll sich färben.

Private Sub ButtonGroup_Click()
With ButtonGroup
If .BackColor = &H8000000F Then
.BackColor = &HC0C0FF
Else
.BackColor = &H8000000F
End If
End With
End Sub

Option Explicit
Public WithEvents ButtonGroup As CommandButton
Private Sub ButtonGroup_Click()
Dim Caption As String
Dim Ws As Worksheet
Set Ws = Tabelle1
'Select Case
If ButtonGroup.Caption = "C" Then
Ws.Range("Y35") = 11
If ButtonGroup.BackColor = &H8000000F Then
ButtonGroup.BackColor = &HC0C0FF
Else
ButtonGroup.BackColor = &H8000000F
End If
End If
If ButtonGroup.Caption = "Db" Then
Ws.Range("Y35") = 10
If ButtonGroup.BackColor = &H8000000F Then
ButtonGroup.BackColor = &HC0C0FF
Else
ButtonGroup.BackColor = &H8000000F
End If
End If
'End Select
End Sub
Mit beiden Coden muss ich zweimal auf ein Button clicken damit die Farbe zurückgesetzt wird.
Nicht das Wahre,
Kann mir Jemand bitte helfen mit evtll. ein Selest Case?
Vielen Dank im Voraus
LG Antonio

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Button Backcolor
22.06.2022 11:49:14
Nepumuk
Hallo Antonio,
lade eine Kopie deiner Mappe mit dem Userform hoch. Die Daten kannst du löschen.
Gruß
Nepumuk
AW: Button Backcolor
22.06.2022 12:11:16
Antonio
Please hold the line......
AW: Button Backcolor
22.06.2022 12:20:18
Antonio
Hallo Nepumuk, bitte sehr
https://www.herber.de/bbs/user/153713.xlsm
Daten brauche ich nicht zu löschen, weiß fast jeder das ich seit Jahre mich mit Musik beschäfftige.
Es geht darum Töne und Akkorde in einer andere Tonart zu Transponieren.
Im TextBox auf der UserForm ist die aktulle Tonart eingetragen und bei den Buttons farblich erkenntlich,
ich bin noch ziehmlich am anfang, jetzt mit Tabelle1 später ListBoxen, wo die Töne und Akkorde aufgelistet sind.
Wenn ich jetzt eine andere Tonart wähle (im moment sind nur zwei Button belegt) den blaues Button muss blau bleiben (ORIGINAL TONART)
die anderen sollen ein andere Farbe annehmen wie schon voher beschrieben.
Vielen Dank für deine Meldung
bis später
Antonio
Anzeige
Habe was geschrieben
22.06.2022 13:04:21
Antonio
Hallo Nepumuk,
habe jergendwie so gelost:

Private Sub CommandButton1_Click()
FarbeAendern "CommandButton1"
End Sub
Private Sub CommandButton2_Click()
FarbeAendern "CommandButton2"
End Sub
Private Sub CommandButton3_Click()
FarbeAendern "CommandButton3"
End Sub
Private Sub CommandButton4_Click()
FarbeAendern "CommandButton4"
End Sub
Private Sub CommandButton5_Click()
FarbeAendern "CommandButton5"
End Sub
Private Sub CommandButton6_Click()
FarbeAendern "CommandButton6"
End Sub
Private Sub FarbeAendern(strName)
Dim Ws As Worksheet
Set Ws = Tabelle1
Dim bt As Control
For Each bt In UserForm1.Controls
If bt.Name = strName Then
Select Case strName
Case "CommandButton1"
bt.BackColor = &HC0C0FF
Ws.Range("Y35") = 11
Case "CommandButton2"
bt.BackColor = &HC0C0FF
Ws.Range("Y35") = 10
Case "CommandButton3"
bt.BackColor = &HC0C0FF
Case "CommandButton4"
bt.BackColor = &HC0C0FF
Case "CommandButton5"
bt.BackColor = &HC0C0FF
Case "CommandButton6"
bt.BackColor = &HC0C0FF
End Select
Else
If bt.BackColor = &HC0C0FF Then
bt.BackColor = &H8000000F
End If
End If
Next bt
End Sub
In UserForm1 einfügen.
Is nicht optimal und bei so viele Buttons sehr lang, der Code ist nur für 6 Buttons
Vielleicht hast du eine bessere Lösung.
LG Antonio
Anzeige
AW: Button Backcolor
22.06.2022 13:57:06
Antonio
Hallo Nepumuk,
das ist eigentlich MEGA professionell.
Leider was Übersehen:

den blaues Button muss blau bleiben (ORIGINAL TONART)
den Button der über die TextBox Farbe ändert (bei mir in der erste Mappe) in Blau, sollte blau bleiben damit ich weiß in welche ursprüngliche
Tonart der Song war, das Transponieren dient dazu mit anderen Instrumente gemeinsam spielen zu können, man kann später ein transponierter Stück
speichern, aber der original sollte bleiben und mit ein Click auf den blaues Button ist alles wieder hergestellt.
Sorry für diese Unannehmlichkeit aber konntest du es ändern.
Bin morgen wieder dabei.
LG Antonio
Anzeige
AW: Wunderbar
22.06.2022 14:46:40
Antonio
Hallo Nepumuk,
sehr GUT
Danke
LG Antonio
AW: Button Backcolor
22.06.2022 14:38:06
Daniel
Hi
mal ein Lösungsansatz ohne Klassenprogrammierung.
1. erstelle ein Label, setzte den Hintergrund transparent und lege es über die Buttons, die umgefärbt werden sollen.
2. erstelle für dieses Label folgenden Code im MouseUp-Event.

Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim c As Control
Dim xUF As Single
Dim yUF As Single
xUF = X + Label1.Left
yUF = Y + Label1.Top
For Each c In Me.Controls
If c.Top > Label1.Top And _
c.Left > Label1.Top And _
(c.Top + c.Height) = yUF And _
(c.Left + c.Width) >= xUF Then
c.BackColor = vbRed
Else
c.BackColor = vbGreen
End If
End If
Next
End Sub
der Code geht durch alle Steuerelemente und prüft als erstes, ob sie unter dem Label liegen.
dann prüft der Code, ob das Steuerelement auch unter dem Klickpunkt liegt und nimmt die entsprechende Färbung vor.
(die Farben kannst du ja anpassen)
gleichzeitig wird geprüft, ob der Button nicht der ist, der in der Textbox angegeben ist.
auf diese weise kannst du das für beliebig vielen Buttons mit einem einzigen Makro machen, ohne dass du Klassenprogrammierung lernen und verstehen musst.
wobei sich allerdings die Frage stellt, warum du nicht einfach zwei List- oder Comboboxen verwendest (Tonart1, Tonart2)
das wäre dann noch viel einfacher.
Gruß Daniel
Anzeige
@Daniel
22.06.2022 14:57:58
Antonio
Hallo Daniel,
wie schon geschrieben bin ziehmlich am Anfang, werde dein Code erst Morgen ausprobieren können.
Mit Nepumuk Lösung bin ich sehr zufrieden und wollte erstmal eine Richtung und Resultate sehen um zu wissen: was ist der nächste Schritt?
Ich würde auch von der Tabelle wegkommen um das Ganze über ListBoxen zu automatisieren. (Zukunft Musik)
Die ListBoxen mit Töne und Akkorden habe schon, diese war eine Versuchsmappe, weil Transponieren an sich schwierig ist, ich meine mit der Programmierung.
Muss sehr gut überlegt sein um mich nicht zu verstricken, da glaube ich gab sowas wie MOD12 oder so.
Aber Danke für deinen Beitrag, werde mich Morgen auf jedenfall melden.
LG Antonio
Anzeige
AW: @Daniel
23.06.2022 06:26:53
Antonio
Gutenmorgen,
Hallo Daniel, die Farbänderung funzt super aber ich verliere dadurch den Click event der Buttons.
Hast da eine Idee?
LG Antonio
AW: @Daniel
23.06.2022 07:52:13
Daniel
Naja das was bei Klick auf einen Button passieren soll, musst du dann in dieses Makro einbaueneinbauen und zwar an der Stelle, wo auch der abgeklickte Button gefärbt wird, also im True-Teil des zweiten Ifs. c ist dann der angeklickte Button.
Gruß Daniel
AW: @Daniel
23.06.2022 09:27:31
Antonio
Also Daniel, damit dein Macro nicht überfüllt wird, habe ein Sub um die Button anzusprechen geschrieben.
Auf " c.Name " reagiert nicht
Auf " c.Caption " auch nicht

Sub ButtonClick()
Dim Ws As Worksheet
Set Ws = Tabelle1
Dim c As Control
Dim strName As String
For Each c In Me.Controls
If c.Name = strName Then
Select Case strName
Case "CommandButton1"
c.BackColor = &HC0C0FF
Ws.Range("Y35") = 11
Case "CommandButton2"
c.BackColor = &HC0C0FF
Ws.Range("Y35") = 10
Case "CommandButton3"
c.BackColor = &HC0C0FF
Ws.Range("Y35") = 9
Case "CommandButton4"
c.BackColor = &HC0C0FF
Ws.Range("Y35") = 8
Case "CommandButton5"
c.BackColor = &HC0C0FF
Ws.Range("Y35") = 7
Case "CommandButton6"
c.BackColor = &HC0C0FF
Ws.Range("Y35") = 6
End Select
End If
Next c
End Sub
und im Macro der Call

Private Sub Label2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim c As Control
Dim xUF As Single
Dim yUF As Single
xUF = X + Label2.Left
yUF = Y + Label2.Top
For Each c In Me.Controls
If c.Top > Label2.Top And _
c.Left > Label2.Top And _
(c.Top + c.Height) = yUF And _
(c.Left + c.Width) >= xUF Then
Call ButtonClick
c.BackColor = &HC0C0FF
Else
c.BackColor = &H8000000F
End If
End If
Next
End Sub
Ich hoffe an der richtige Stelle.
Kannst bitte nachschauen?
LG Antonio
Anzeige
AW: @Daniel
23.06.2022 09:58:32
Daniel
aua, da stimmt viel nicht.
warum dieser Umweg?
was soll den passieren, wenn man auf einen dieser Buttons, die unter dem Label liegen, klickt?
welche Buttons sind denn hier betroffen?
Haben wir das umfärben der Buttons nicht schon mit dem Click-Makro des Labels erledigt?
wenn du den Code in ein eingenes Makro auslagern wills, musst du dem Makro auch mitteilen, welcher Button geklickt wurde.
das macht man mit Parameterübergabe:

Call ButtonClick(c) 
und im aufgerufenen Marko dann dieses, eine weitere Dimensioniertung dieser Variable darf dann nicht erfolgen

Sub ButtonClick(c as Control)
was du da mit strName machst, weiß ich auch nicht, du verwendst strName, ohne der Variable einen Wert zugewiesen zu haben, das ist sinnlos.
wenn du bei Klick auf einen der Buttons einen Wert in eine Zelle schreiben willst, dann kannst du auch vorbereitend diesen Wert in die TAG-Eigenschaft des Buttons schreiben (Eigenschaftsliste) und dann einfach im Click-Event des Labels programmieren:

Tabelle1.Range("Y35").value = c.Tag
bei dem, was ich bisher von deiner Aufgabenstelltung gesehen habe, könntest du das ganze mit zwei LISTBOXEN genauso erledigen, ohne dafür eine einzige Zeile VBA.Code schreiben zu müssen.
Gruß Daniel
Anzeige
AW: @Daniel
23.06.2022 11:37:27
Antonio
Hallo Daniel,
ich hatte schon geschrieben das ich von der Tabelle weg wollte.
Meinst du zwei ListBox in einer Form? Das wäre super.
Befor ich weiter mache, könntest du mir zeigen wie das gehen sollte mit den ListBoxen?
(Wenn du wirklich meine Aufgabestellung verstanden hast, weßt du auch das im Tabellenblatt viele Formel sind und die, meinerseits umzusetzen, finde ich es schwierig. Wäre ich sowieso später auf die Frage gekommen ob es möglich ist alles in einer Form zu verlagern.)
Vielen Dank im Voraus
LG Antonio
AW: @Daniel
23.06.2022 12:02:57
Daniel
Hi
es kommt darauf an, wie du arbeiten willst.
wenn du alles in der Userform machst, musst du viel programmieren
wenn du viel im Tabellenblatt machst, musst du wenig programmieren.
die hier gezeigte Aufgabe kannst du so lösen.
1. in einem Tabellenblatt alle möglichen Tonarten in Spalte A untereinander auflisten
2. in Spalte B daneben den zahlenwert schreiben, der bei auswahl einer Tonart in die Zelle Y35 geschrieben werden soll
Für die Listbox, die die Buttons ersetzen soll, machst du folgende einstellungen in der Eigenschaftsliste:
ControlSource: 'Tabelle1'!Y35
RowSource: 'TabelleX'A1:B12 (also den Zellbereich in dem die anzugeigenden Werte stehen
Columns: 2
BoundColumn: 2 'das ist die Listenspalte, aus der die Ergebnisse genommen werden
ColumnsWidth: 20,0 die 0 blendet die zweite Spalte mit den Zahlenwerten aus, so dass du nur die Texte siehst
Wenn du die Textbox auch durch eine Listbox ersetzen willst, kannst du auch die gleiche Methodik und die gleiche Tabelle für RowSource verwenden, nur halt eine andere ControlSource. Wenn du den Text (erste Tabellenspalte) brauchst, eben BoundColumn = 1
funktioniert genauso, wie das was du bis jetzt hast, nämlich:
- Tonart anzeigen
- Tonart auswählen
- Zahlenwert in Zelle schreiben
- gewählte Tonart farblich markieren
aber ohne eine einzige Zeile VBA-Code.
Gruß Daniel
Anzeige
AW: @Daniel
23.06.2022 12:30:02
Antonio
Hallo Daniel,
ich werde versuchen deine Ratschläge zu folgen und das ganz umgestalten.
Ob es mir gelingt ..........
Trotzdem vielen Dank für alles.
LG Antonio
AW: somit wohl geschlossen? (owT)
24.06.2022 15:47:22
EtoPHG

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige