Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1416to1420
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

Farbe mit Hilfe von VBA Code uebertragen

Farbe mit Hilfe von VBA Code uebertragen
02.04.2015 06:55:52
VBA
http://xlforum.herber.de/
Hallo Liebe VBA-Freunde,
ich habe ein kleines Problem, bei dem ich Hilfe benoetigen wuerde.
Ich habe einen Code in VBA geschrieben, der die Zellfarbe in Zelle B4 zu rot/gruen/gelb/blau aendert, wenn Zelle Q4 genau zu dieser Farbe geandert wird. Dies klappt auch wenn ich die Zellfarbe in Q4 manuell umstelle.
Es funktioniert nicht, wenn ich die Zellfarbe in Q4 anstatt manuell, durch eine bedingte Formatierung automatisch umstellen lasse. Dies ist aber Sinn und Zweck der Sache.
Habt ihr hier eine Idee, warum mein VBA code die Farbe in B4 nicht aendert, wenn die Farbe in Q4 durch die bedingte Formatierung geaendert wird?
Anbei der Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Traffic_Signs_GreenYellowRed
End Sub

Sub Traffic_Signs_GreenYellowRed()
If Range("Q4").Interior.ColorIndex = 1 Or _
Range("Q4").Interior.ColorIndex = 1 Or _
Range("Q4").Interior.ColorIndex = 1 Then
Worksheets("CPC_Full").Range("B4").Interior.ColorIndex = 1
End If
If Range("Q4").Interior.ColorIndex = 3 Or _
Range("Q4").Interior.ColorIndex = 3 Or _
Range("Q4").Interior.ColorIndex = 3 Then
Worksheets("CPC_Full").Range("B4").Interior.ColorIndex = 3
End If
If Range("Q4").Interior.ColorIndex = 4 Or _
Range("Q4").Interior.ColorIndex = 4 Or _
Range("Q4").Interior.ColorIndex = 4 Then
Worksheets("CPC_Full").Range("B4").Interior.ColorIndex = 4
End If
If Range("Q4").Interior.ColorIndex = 6 Or _
Range("Q4").Interior.ColorIndex = 6 Or _
Range("Q4").Interior.ColorIndex = 6 Then
Worksheets("CPC_Full").Range("B4").Interior.ColorIndex = 6
End If
End Sub

Vielen Dank im Voraus!
Marci

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Farbe mit Hilfe von VBA Code uebertragen
02.04.2015 08:33:38
VBA
Hallo,
warum lässt du 3 mal das gleiche im IF abfragen?
If Range("Q4").Interior.ColorIndex = 6 Or _
Range("Q4").Interior.ColorIndex = 6 Or _
Range("Q4").Interior.ColorIndex = 6 Then
zu deinem Problem: das geht nicht.
Die bedingte Formatierung schreibt nicht ins range.interior.color...
Vielmehr landet das in range.formatconditions(1).interior.color(index)
(1) steht hier für die erste bedingte Formatierung.
wenn du deinen Code Zeilenweise mit F8 durchblätterst und dabei das Lokal-Fenster beobachtest, kannst du erkennen, wo sich was tut.
Gruß
Ralf

Anzeige
AW: Farbe mit Hilfe von VBA Code uebertragen
02.04.2015 08:33:59
VBA
Guten Morgen!
Wieso steht denn die Abfrage immer 3-fach drin?
Wenn die Farbe 1:1 zugewiesen ist, wieso machst du es dann immer neu?
Worksheets("CPC_Full").Range("B4").Interior.ColorIndex = Range("Q4").FormatConditions(1).Interior.ColorIndex
Die (1) bezeichnet jeweils die bedingte Formatierung, ich weiß nicht, wie viele bei dir drin sind.
Ich würde dir empfehlen, die Bedingungen für rot / gelb / grün / blau im VBA nachzubauen u. die bedingte Formatierung komplett zu streichen.
Dann käme für deine Codierung eine Select-Case-Lösung in Frage (siehe Office Hilfe).
Gruß, MCO

Anzeige
AW: Farbe mit Hilfe von VBA Code uebertragen
02.04.2015 13:25:15
VBA
Hallo MCO, Hallo Ralf,
vielen Dank fuer die Antwort.
Die mehrfache Nennung habe ich nur drin, weil im Endstadium mehrere Zellen auf die Farbe abgefragt werden sollen.
Also habe ich das richtig verstanden, dass mein Code "Interior.ColorIndex" die Farbe der bedingten Formatierung nicht abfragt, es daher auch nicht uebertraegt?
Mit der Aenderung zu "FormatConditions(1).Interior.ColorIndex" sollte es dann funktionieren?
Was meint ihr mit "die 1 bedeutet jeweils die bedingte FOrmatierung"? Steht die 1 fuer die Farbe der bedingten Formatierung oder wie kann ich das verstehen?
Vielen Dank fuer die Hilfe!!
Der VBA Amateur
Marci=)

Anzeige
AW: Farbe mit Hilfe von VBA Code uebertragen
02.04.2015 16:46:51
VBA
Hallo,
Ja, hast du richtig verstanden.
Die 1 ist die erste bedingte Formatierung.
Man kann mehrere anlegen, die auf dem gleichen range wirkt.
Ralf

Um das jetzt mal abzukürzen, ...
03.04.2015 02:40:40
Luc:-?
…Marci;
1. Mach dich mit den (VBA-)Elementen der BedingtFormatierung vertraut, dann merkst du schnell, dass du nur die Einstellungen pro Bedingt­Formatierungs­Regel abfragen kannst, nicht aber, welche aktiv ist. Dafür gibt's 3 verschiedene Methodenarten, die alle mehr oder weniger kompliziert/komplex sind.
2. Ab Xl14/2010 gibt's die Möglichkeit, die gezeigten Formate abzufragen. Dazu wurde ein neues, Range nachgeordnetes Objekt geschaffen, DisplayFormat, das alles außer Symbole und Datenbalken zurückgeben kann, sofern es unter seinen Eigenschaften aufgeführt ist. Mit deiner XlVersion hast du also Pech! Außerdem hat MS es inzwischen für die reguläre Anwendung in UDFs für ZellFmln gesperrt, aber so etwas hattest du ja auch nicht vor.
3. Grundsätzlich kann man ab Xl12/2007 ZellFormate auch per UDF in einer ZellFml übertragen, wie dir der deinem direkt nachfolgende Thread zeigt (dafür ist allerdings auch noch ein gewisser Trick erforderlich). Man sollte also auch mal etwas mehr im Forum lesen als nur auf die zu einer konkreten Frage gegebenen AWen zu hoffen!
4. Ab Xl14/2010 kann man 3. unter Einsatz von 2. auch für bedingt erzeugte Formate machen. Eine derartige ZellFml könnte dann so lauten: =LetFormula("ColorMe(,CellColor(C54),C54,1)") für C54 als bedingt formatierte QuellZelle
Die UDF LetFormula müsstest du dann in Archiv bzw Internet suchen oder sie dir selbst schreiben (Hinweise im nachfolgd Thread → minimal 3 Zeilen inkl Kopf- und FußZeile). Die UDF ColorMe steht im nachfolgd Thread und CellColor (erst ab Xl14/2010!) ist in der einfachsten Variante genauso simpel wie die erste UDF:
Rem Ermittelt gezeigte ZellFarbe (auch aus BedFormat, erst ab Xl14!)
Function CellColor(Zelle As Range)
CellColor = Zelle.DisplayFormat.Interior.Color
End Function
Gruß + FrOst, Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige