Dropdownliste - nur Farbe ändern?
Hallo, ich möchte in Excel per Dropdown nur die Farbe des Textes ändern.
Wenn ich also die Auswahl öffne, soll der gleiche Text, jedoch in verschiedenen Farben, auswählbar sein.
Ist dies möglich? Falls ja, wie ist es realisierbar?
4 Antworten
Hallo,
eine Einfärbung unterschiedlicher Einträge in der Dropdown scheint in keiner Variante möglich zu sein. Das nächste was an deine Beschreibung herankommt wäre es die Farbe im Dropdown als Text auszuwählen und entsprechend die Farbe zu ändern:
Public lForm As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
lForm = Target.Formula
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fNam(4) As String
Dim Far(4) As Long
fNam(0) = "#Schwarz"
Far(0) = RGB(0, 0, 0)
fNam(1) = "#Rot"
Far(1) = RGB(255, 0, 0)
fNam(2) = "#Grün"
Far(2) = RGB(0, 255, 0)
fNam(3) = "#Blau"
Far(3) = RGB(0, 0, 255)
Application.EnableEvents = False
If Not IsError(Application.Match(Target.Value, fNam, 0)) Then
Target.Font.Color = Far(Application.Match(Target.Value, fNam, 0) - 1)
Target = lForm
End If
Application.EnableEvents = True
End Sub
Du brauchst nur ein gewöhnliches Dropdown mit den entsprechenden Farb-Einträgen auf der Zelle. Ein direktes Zuweisen ist nicht nötig, es funktioniert mit jeder Zelle im Blatt^^.
Falls du es allerdings auf bestimmte Zellen einschränken willst, kannst du die Bedingung um Not Intersect(Target, Range("A1:A3")) Is Nothing erweitern
ich habe jetzt den code in VBA in der entsprechende Tabelle abgespeichert,
funktionieren tut es leider nicht. Schreibt "#Schwarz" etc. anstatt die Farbe zu ändern :-(
was mach ich bloß falsch?
:? Über den SelectionChange-Teil wird ja der aktuelle Zellinhalt zwischengespeichert und der Change-Teil überschreibt die Farbe wieder mit dem ursprünglichen Zellinhalt.
Wenn er bei dir jetzt aber bei der Farbe bleibt, klingt das als wäre der Code gar nicht ausgelöst worden. Steht EnableEvents bei dir vllt aktuell auf False (und sind Makros aktiviert)?
ja, da muß ich nochmal schauen. Also makros aus modulen kann ich starten.
wo schalte ich denn EnableEvents ein? - da wirds dann ja sicher dran liegen.
Benutze dazu selbst ein Makro, k.A. wo man das im Menü findet:
Sub reset()
Application.EnableEvents = True
End Sub
Jetzt habe ich die "reset"-Zeilen eingefügt und beim oberen Makro tut sich was :-)Allerdings nicht ganz so, wie es soll:wenn ich im dropdown eine Farbe auswähle, verschwindet der Inhalt der Zelle ganz :-(
schreibe ich wieder etwas in die Zelle, hat es auch die ausgewählte Farbe - das ist schon mal super.
Aber wie erwähnt, ist der Originaltext erst mal weg, "Target = lForm" funktioniert also nicht...
Ich hatte es ja bei mir getestet bevor ich die Antwort überhaupt schrieb, die Frage ist also was du jetzt anders gemacht hast als ich :?
Ah, ich glaub ich habs, du hast jetzt nach Anschalten der Events vermutlich das Dropdown benutzt ohne vorher die Zelle zu wechseln? Dadurch das Events ausgeschaltet waren wurde der Text nicht zwischengespeichert.
Diesen Fall müsste man dann innerhalb des Farbwechselns prüfen :7, wobei es auch zu falschen Einträgen kommen kann, also vllt besser ganz auf das Zwischenspeichern verzichten (Normalerweise vermeide ich Undo in VBA, aber in diesem Fall sollte es möglich sein zu benutzen):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fNam(4) As String
Dim Far(4) As Long
fNam(0) = "#Schwarz"
Far(0) = RGB(0, 0, 0)
fNam(1) = "#Rot"
Far(1) = RGB(255, 0, 0)
fNam(2) = "#Grün"
Far(2) = RGB(0, 255, 0)
fNam(3) = "#Blau"
Far(3) = RGB(0, 0, 255)
Application.EnableEvents = False 'Selbstauslöser verhindern
If Not IsError(Application.Match(Target.Value, fNam, 0)) Then
Application.Undo 'Ursprungstext wiederherstellen
lForm = Target.Formula
Application.Undo 'Undo des Undo
Target.Font.Color = Far(Application.Match(Target.Value, fNam, 0) - 1)
Target = lForm
End If
Application.EnableEvents = True
End Sub
Sub reset()
Application.EnableEvents = True
End Sub
Vielen, vielen Dank! Auch für deine Geduld.
So funktioniert es einwandfrei :-)
Ganz habe ich es nicht hinbekommen - das Problem ist: mit meiner Methode sieht man die Farbe nicht, die man auswählt.
Schreibe immer den gleichen Text in die Dropdownliste, allerdings mit verschieden vielen Leerzeichen am Ende
mit der bedingten Formatierung kannst du dann der Zelle (oder dem Text) verschiedene Farben aufgrund der Länge zuweisen
ja genau, diesen Ansatz hatte ich auch schon: Ich habe am Ende Punkte gesetzt und dann in der bed. Form. dem Text farben zugeordnet. Die Formatierung der Länge mit Leerzeichen sieht aber schöner aus, das ist schon mal gut!
Aber wie du ja selber schreibst, sieht man die Farbe in der Auswahlliste leider nicht.
Wie wäre es mit einer Hilfsspalte (im Beispiel Spalte H)mit einem dropdown mit den Wörtern "gelb, rot, blau, usw", die dann im anderen Teil der Tabelle über eine Formel in der bedingten Formatierung die Farbe wechseln? Die Hilfsspalte könnte dann bei Bedarf ausgeblendet werden.

Hallo, das ist auch eine Lösung, ja.
ich habe aber keinen Platz für eine extra Spalte und ständig ein-/ausblenden ist auch keine Option
Dann schließe ich mich meinen Vorrednern an - ohne Makros läuft da nichts. :)
Wenn es jeweils der gesamten Text und nicht nur Teile/einzelne Worte des Textes in einer Zelle sind, kannst Du das über Bedingte Formatierung erreichen.
Die Bedingte Formatierung z.B. auf einen definierten Bereich anwenden lassen, dann sollte es klappen sobald der Text erscheint.

Das hört sich nach einer guten Lösung an :-)
Nur wie weise ich deinen Code der entsprechenden Zelle zu?