Microsoft Excel

Herbers Excel/VBA-Archiv

Change Zellfarbe in zellen der Reihe nachaufheben | Herbers Excel-Forum


Betrifft: Change Zellfarbe in zellen der Reihe nachaufheben von: lisa
Geschrieben am: 21.01.2010 15:10:55


Hallo

Ich habe in meiner Tabelle eine Prüfung, die wenn Zellen nicht gefüllt sind die Zellen rot färbt.

Mit dem Changereignis hebe ich die Rotfärbung wieder auf!

Nachteil bei meinem Code ist, das wenn ich eine dieser genannten Zellen activiere, geben alle Zellen ihre Farbe auf. Scön wäre hier aber, das die Zellen der Reihe nach mit aktivierung die Farbe wieder aufheben.

Wer kann mir hierbei helfen.

Anbei mein bisheriger Code!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B3,B6") = "" Then
Range("B3,B6").Interior.ColorIndex = xlNone
End If

End Sub
Kann mir hierbei jemand weiter helfen?

Gruß Lisa

  

Betrifft: AW: Change Zellfarbe in zellen der Reihe nachaufheben von: Michael
Geschrieben am: 21.01.2010 15:14:44

Warum benutzt Du nicht "Bedingte Formatierung" dafür?
Um Zellen in einem Bereich zu färben ist das ideal und schnell gemacht.


  

Betrifft: AW: Change Zellfarbe in zellen der Reihe nachaufheben von: lisa
Geschrieben am: 21.01.2010 15:19:18

Hallo

Da gibt es verschiedentliche Gründe für!
Ich habe mich hierfür entschieden und würde dieses im VBA auch gern belassen.

Trotzdem Danke für den Tip!

Wenn es also für meinen angegebenen Weg eine Möglichkeit gibt, wäre ich für jede Hilfe sehr dankbar!

Lieben Gruß Lisa


  

Betrifft: AW: Change Zellfarbe in zellen der Reihe nachaufheben von: Michael
Geschrieben am: 21.01.2010 15:36:13

Hi
So z.B
Weil: "B3,B6" ist kein Bereich sondern nur B3 + B6

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range("B3") = "" Then
    Range("B3").Interior.ColorIndex = xlNone
    Else: Range("B3").Interior.ColorIndex = 3
    If Range("B6") = "" Then
        Range("B6").Interior.ColorIndex = xlNone
        Else: Range("B6").Interior.ColorIndex = 3
    End If
End If

End Sub
Gruß
Michael


  

Betrifft: verstehe nicht ganz... von: Björn B.
Geschrieben am: 21.01.2010 15:30:58

Hallo,

...warum Du das so umständlich machen möchtest....
Nun gut. Erster Tipp, nimm die bedingte Formatierung.

Zweiter Tipp, bzw. Frage, warum nimmst du Selection-Change und nicht worksheet_Change?
Der Code wird jedes Mal ausgeführt, wenn du die Selektion in der Mappe änderst.
DAs ist völlig unnötig, da sich bei der Selektionsänderung niemals ein Wert ändern kann. Das geht voll auf die Performance.

Tipp 3:
Du kannst mit Range("B3,B6") = "" nicht prüfen, ob in dem Bereich was drinsteht. Hier wird nur die 1. Zelle geprüft, ist Dir das klar?
Diese Prüfung musst du für jede Zelle extra machen.
Das ist wiederum ein Nachteil Deiner Methode, weil das bei mehreren Zellen wieder voll auf die Performance geht.

Das ist dann auch die Lösung, wenn du jede Zelle extra prüfst, dann kannst du sie auch einzeln ansprechen und nur bei dieser z.B. die Farbe ändern.

Gruß
Björn B.


  

Betrifft: mit Suchen und Ersetzen... von: Tino
Geschrieben am: 21.01.2010 18:01:30

Hallo,
hier mal eine andere Version.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZellen As Range, tmpResetReplace As Range

'hier Deinen Zellbereich anpassen 
Set rngZellen = Intersect(Range("B3:B6"), Target)
    
    If Not rngZellen Is Nothing Then
        'um Ersetzen in ganzer Arbeitsmappe zurückzusetzen 
        Set tmpResetReplace = Cells(Rows.Count, Columns.Count).Find("*")
        With Application
            .ScreenUpdating = False
            .ReplaceFormat.Clear
            .ReplaceFormat.Interior.ColorIndex = xlColorIndexNone
                rngZellen.Cells.Interior.ColorIndex = 3
                rngZellen.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder _
                :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
            .ScreenUpdating = True
        End With
    End If
End Sub
Gruß Tino


  

Betrifft: AW: mit Suchen und Ersetzen... von: Tino
Geschrieben am: 21.01.2010 18:45:05

Hallo,
eventuell den Parameter
LookAt:=xlPart

durch diesen ersetzen
LookAt:=xlWhole

ist um den gesamten Inhalt zu Durchsuchen.

Gruß Tino


Beiträge aus den Excel-Beispielen zum Thema "Change Zellfarbe in zellen der Reihe nachaufheben "