Dropdownliste - nur Farbe ändern?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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

horst9999 
Beitragsersteller
 12.04.2022, 11:48

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

0
DanKirpan  12.04.2022, 12:06
@horst9999

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

0
horst9999 
Beitragsersteller
 12.04.2022, 13:13
@DanKirpan

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?

0
DanKirpan  12.04.2022, 13:27
@horst9999

:? Ü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)?

0
horst9999 
Beitragsersteller
 13.04.2022, 13:24
@DanKirpan

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.

0
DanKirpan  13.04.2022, 13:35
@horst9999

Benutze dazu selbst ein Makro, k.A. wo man das im Menü findet:

Sub reset()
Application.EnableEvents = True
End Sub
0
horst9999 
Beitragsersteller
 14.04.2022, 12:48
@DanKirpan
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...
0
DanKirpan  14.04.2022, 13:41
@horst9999

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

0
horst9999 
Beitragsersteller
 15.04.2022, 13:58
@DanKirpan

Vielen, vielen Dank! Auch für deine Geduld.
So funktioniert es einwandfrei :-)

1

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


horst9999 
Beitragsersteller
 12.04.2022, 11:20

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.

1

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.

Bild zum Beitrag

Woher ich das weiß:Berufserfahrung
 - (Computer, Farbe, Microsoft Excel)

horst9999 
Beitragsersteller
 13.04.2022, 13:09

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

0
milonguero008  15.04.2022, 12:21
@horst9999

Dann schließe ich mich meinen Vorrednern an - ohne Makros läuft da nichts. :)

0

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.

Bild zum Beitrag

 - (Computer, Farbe, Microsoft Excel)