Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1072to1076
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

Zellen nur färben, wenn noch Weis

Zellen nur färben, wenn noch Weis
06.05.2009 14:25:18
Joachim
Hi,
habe vor ein paar Tage mal hier gefragt, ob es möglich ist, Zellen unter bestimmten Bedingungen zu färben. Hier im Beispiel soll, wenn die Zelle B leer ist, die entsprechende Zeile GELB und die betroffene Zelle in B ROT gefärbt werden. Das kam dabei raus:

Sub B_leer()
Dim lngRow As Long, lngCol As Long
Dim Bereich As Range
Dim objTab As Worksheet
Set objTab = ActiveSheet
'Spalte B
With objTab
'Suche letzte Zeile
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
''Suche letzte Spalte AUTOMATISCH
'lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
'Suche letzte Spalte MANULL mit Wert (29 = AC)
lngCol = 29
Set Bereich = .Range("B10:B" & lngRow)
'Bereich.Interior.ColorIndex = xlColorIndexNone
If Application.WorksheetFunction.CountBlank(Bereich) > 0 Then
For Each Bereich In Bereich.SpecialCells(xlCellTypeBlanks)
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
Bereich.Interior.ColorIndex = 3
Next Bereich
End If
End With
End Sub


Meine Frage dazu: kann ich das färben der Zeile in Gelb verhindern:
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
wenn die entsprechende Zeile schon gelb ist. Im Prinzip würde es reichen, wenn vor dem färben der Zeile noch geprüft ist, on die Zelle in A in der gefundenen Zeile schon Gelb ist. Wenn A schon gelb ist, dann nur die Zelle mit
Bereich.Interior.ColorIndex = 3
färben.
Hintergrund ist folgender: wenn der Code zB. in B10 eine leere Zelle gefunden hätte, wird die Zeile GELB gefärbt und die betroffene Zelle ROT markiert.
Würde ich nun den gleichen Code zB in Zeile E noch einmal starten und dort auch in Zeile 10 ein Fund ist, würde diese Zeile auch wieder Gelb gemacht und E10 ROT.
Damit wäre aber meine Rote Markierung von vorher in B10 mit Gelb übermalt.
Geht das, wie oben beschieben ?
Danke
Joachim

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen nur färben, wenn noch Weis
06.05.2009 15:04:46
Chris
Servus,
wenn nur Zeilen, in denen weiße Zellen nicht belegt sind eingefärbt werden sollen, würde ich folgendes probieren:

Sub B_leer()
Dim lngRow As Long, lngCol As Long
Dim Bereich As Range
Dim objTab As Worksheet
Set objTab = ActiveSheet
'Spalte B
With objTab
'Suche letzte Zeile
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
''Suche letzte Spalte AUTOMATISCH
'lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
'Suche letzte Spalte MANULL mit Wert (29 = AC)
lngCol = 29
Set Bereich = .Range("B10:B" & lngRow)
'Bereich.Interior.ColorIndex = xlColorIndexNone
If Application.WorksheetFunction.CountBlank(Bereich) > 0 Then
For Each Bereich In Bereich.SpecialCells(xlCellTypeBlanks)
If Bereich.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = xlNone then ' Abfrage nach  _
Farbe
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
Bereich.Interior.ColorIndex = 3
End if
Next Bereich
End If
End With
End Sub


ungetestet.
Gruß
Chris

Anzeige
warscheinlich falsch verstanden ...
06.05.2009 15:24:32
Joachim
Hallo Chris,
warscheinlich hast Du mich falsch verstanden.
Ich prüfe zB die Spalte B auf leere Zellen, wenn eine gefunden, wird die Zeile (A bis AC) GELB und die leere Zelle in B ROT gefärbt.
Nun prüfe ich weiter Spalte C, D, E....
Jetzt wurde zB in der Spalte E ebenfalls eine leere Zelle gefunden, und dummerweise in der gleichen Zeile wie vorher in B.
Also würde mein Code zuschlagen, die Zeile GELB (A bis AC) färben und die leere Zelle in E auch ROT.
So, nun ist aber meine Leere Zelle in B, die vorhin ROT war, durch diese Aktion GELB geworden. Das will ich ja nicht.
Darum mein Idee, vor dem Markieren vorher immer prüfen, ob in der entsprechende Zeile die Zelle A schon geb ist. Wenn diese NICHT gelb ist, ist das ja ein Indiz, das noch keine Färbung statt gefunden wurde und der Code kann beide färbungen vornehmen. Ist sie bereits gelb, könnte der Code daraus schliessen, dass schon mal ein Färbung in der Zeile statt gefunden hat und das gelbe Färben nicht mehr in Frage kommt, sondern nur noch die rote.
Soweit verständlich ?
Gruss
Joachim
Anzeige
AW: warscheinlich falsch verstanden ...
06.05.2009 15:46:16
Chris
Servus,
dein Code prüft aber nur Spalte B, wenn du jetzt natürlich für Spalte C denselben Code einsetzt, dann stimmt das.
Ich hab mal den Code für Spalte C umgeschrieben:

Sub C_leer()
Dim lngRow As Long, lngCol As Long
Dim Bereich As Range, zelle As Range
Dim objTab As Worksheet
Set objTab = ActiveSheet
'Spalte B
With objTab
'Suche letzte Zeile
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
''Suche letzte Spalte AUTOMATISCH
'lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
'Suche letzte Spalte MANULL mit Wert (29 = AC)
lngCol = 29
Set Bereich = .Range("C10:C" & lngRow)
'Bereich.Interior.ColorIndex = xlColorIndexNone
'If Application.WorksheetFunction.CountBlank(Bereich) > 0 Then
For Each zelle In Bereich.SpecialCells(xlCellTypeBlanks)
If zelle.Interior.ColorIndex = 6 Then ' Abfrage nach gelb
zelle.Interior.ColorIndex = 3
Else
If zelle.Interior.ColorIndex = 3 Then
' do nothing, weil ja schon rot
Else ' sonst alles, weil weder gelb noch rot
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
zelle.Interior.ColorIndex = 3
End If
End If
Next zelle
'End If
End With
End Sub


Gruß
Chris

Anzeige
AW: warscheinlich falsch verstanden ...
06.05.2009 16:19:53
Joachim
Hallo Chris,
Danke, jetzte geht. noch eine Bitte: nachdem die ersten Spalten durch sind. kommt dieser Code, sieht anders aus:
Dim lngRow As Long, lngCol As Long, lngCol1 As Long
Dim Bereich As Range
Dim objTab As Worksheet
Dim SuchBegriff As String
SuchBegriff = "TEST"
Set objTab = ActiveSheet
With objTab
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
lngCol = 29
Set Bereich = .Range("Z10:Z" & lngRow)
lngCol1 = Bereich.Column
Set Bereich = Bereich.Offset(0, .Columns.Count - lngCol1)
Bereich.FormulaR1C1 = "=IF(RC" & lngCol1 & "<>""" & SuchBegriff & """,0,"""")"
If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
For Each Bereich In Bereich.SpecialCells(xlCellTypeFormulas, 1)
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
Cells(Bereich.Row, lngCol1).Interior.ColorIndex = 3
Next Bereich
End If
End With
Kannst Du das das gleiche nochmal einbauen ? Wäre nett , Danke . dann ist schluss :-))
Gruss
Joachim
Anzeige
noch halb offen :-)
06.05.2009 16:48:49
Joachim
AW: noch halb offen :-)
07.05.2009 09:22:55
Chris
Servus,
was willst du denn mit diesem Code erreichen? So ganz ist mir nicht klar, wofür du lngCol1 brauchst und was das darstellen soll.
Gruß
Chris
AW: noch halb offen :-)
07.05.2009 18:54:36
Joachim
Hi,
im Prinzip das gleiche, wie beim esten Code. Aber lass mal gut sein, ich glaube , ich habe gerade eine Lösung gefunden.
Danke
Joachim

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige