VBA: Wert in Zelle schreiben, wenn bestimmte Farbe
#1
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
Antworten Top
#2
Hallo,

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

mfg
Antworten Top
#3
Klingt Interessant, aber meine Programmierkenntnisse in Eigenregie tendieren leider gegen 0. Ich bräuchte das schon komplett auf dem Silbertablett serviert Wink
Antworten Top
#4
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ß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • steve
Antworten Top
#5
Exclamation 
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.
Antworten Top
#6
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ß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#7
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.
Antworten Top
#8
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ß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#9
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste