Clever-Excel-Forum

Normale Version: VBA: Wert in Zelle schreiben, wenn bestimmte Farbe
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich bräuchte einmal Hilfe. Ich habe eine Tabelle in der per bedingter Formatierung diverse Zellen eingefärbt werden. Diese Zellen sind aber noch leer. Jetzt soll in diese Zellen aber ein bestimmter Text geschrieben werden, wenn die Hintergrund Farbe RGB 196,215,155 ist. Müsste wohl VBA Code sein, da ich ja nicht in jede Zelle eine Formel eintragen kann/will, oder?

Danke Gruß
Steve
Hallo,

der einzige Weg ist mit einer Schleife über alle Zellen des relevanten Bereichs jeweils die Farbe mit "Range.DisplayFormat" zu prüfen.

mfg
Klingt Interessant, aber meine Programmierkenntnisse in Eigenregie tendieren leider gegen 0. Ich bräuchte das schon komplett auf dem Silbertablett serviert Wink
Hallo,

hier ein Beispiel, der A1:A10 in der ersten Tabelle prüft ...


Code:
Sub Test()
  
  Dim c As Range
  
  For Each c In ThisWorkbook.Worksheets(1).Range("A1:A10")
    
    If Not c.DisplayFormat.Interior.Color <> RGB(196, 215, 155) Then
      
      c.Value = "Hallo"
      
    End If
    
  Next
    
End Sub

Gruß
Funktioniert, wunderbar, Danke!



ExclamationExclamationExclamationExclamationExclamationExclamationExclamationExclamation


Zwei Ergänzungen bräuchte ich noch.

Ich muss den Code immer per Hand einmal starten, dass es umgesetzt wird. Besser wäre, wenn es gleich (sofort) passiert, sobald die Bedingung erfüllt ist.

Und der Text "Hallo" (aus dem Beispiel) sollte wieder verschwinden, wenn die Zelle nicht mehr den benannten Farbcode hat. Natürlich auch automatisch.
Hallo,

um Zellen ohne die Farbe wieder zu löschen, brauchst Du ja nur einen Else hinzufügen ...


Code:
Sub Test()
  
  Dim c As Range
  
  For Each c In ThisWorkbook.Worksheets(1).Range("A1:A10")
    
    If c.DisplayFormat.Interior.Color <> RGB(196, 215, 155) Then
        
      c.Value = ""
      
    Else
    
      c.Value = "Hallo"
      
    End If
    
  Next
    
End Sub

Es gibt kein Ereignis in Excel VBA, welches ausgelöst wird, wenn sich eine bedingte Formatierung ändert.
Von daher würde ich empfehlen, einen Button/AutoForm zu erstellen, dem/der Du das Makro zuweist.

Ansonsten, wenn Dich Klassenprogrammierung und mehr Code nicht abschrecken, könntest Du versuchen,
den Code von Flotter Feger aus dem Office-Lösung Forum anzupassen. Ob's überhaupt möglich ist, das
auch mit DisplayFormat zu machen, habe ich nicht geprüft, kann aber sein, nicht.


Gruß
Die Auto Form Lösung ist fürs Erste ausreichend, Danke. Allerdings rechnet Excel gut 5sek. um das Makro auszuführen. Ich denke mal, weil er die mit dem Else das komplette Blatt prüft. Besser wäre, wenn nur der Bereich A1:J367 berücksichtigt wird.
Hallo,

dass das Makro länger braucht, dürfte primär daran liegen, dass Excel bei jedem Schreiben rechnet. Probiere mal folgende Prozedur aus,
die die automatische Berechnung am Anfang ausschaltet und am Ende wieder auf den Ursprungswert zurücksetzt. Nein, das komplette Blatt
wird in meinem Beispielcode nicht geprüft, sondern nur A1:J367 in diesem Beispiel. Im vorherigen Beispiel war das dann A1:A10.

Code:
Sub Test()
  
  Dim c As Range
  Dim z As Long
  
  z = Application.Calculation
  
  Application.Calculation = xlCalculationManual
  
  For Each c In ThisWorkbook.Worksheets(1).Range("A1:J367")
    
    If c.DisplayFormat.Interior.Color <> RGB(196, 215, 155) Then
        
      c.Value = ""
      
    Else
    
      c.Value = "Hallo"
      
    End If
    
  Next
  
  Application.Calculation = z
  
End Sub

Gruß
die automatische Berechnung zu deaktivieren bringt auch keinen "Geschwindigkeitszuwachs".


Ich müsste mich wohl von der Lösung über bedingte Formatierung in Kombi mit dem VBA Code weg und alles in VBA lösen