AW: Gleicher Inhalt
04.07.2023 19:03:31
Ulf
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim bVorher As Boolean
Dim filterRangeNoHeaders As Range
Set filterRangeNoHeaders = Range("B5:D5")
If Not (Target.ListObject Is Nothing) Then
bVorher = Application.EnableEvents
Application.EnableEvents = False
färben
Application.EnableEvents = bVorher
Exit Sub
End If
If VarType(Target.Value) > 8204 Then
Exit Sub
End If
If Target(1, 1) > "Üb1" Then
Exit Sub
End If
If Not Application.Intersect(filterRangeNoHeaders, Target) Is Nothing Then
bVorher = Application.EnableEvents
Application.EnableEvents = False
färben
Application.EnableEvents = bVorher
End If
Exit Sub
End Sub
Option Explicit
Public Sub färben()
On Local Error GoTo färbenERR
Dim lObj As ListObject
Dim lRows As ListRows
Dim lRow As ListRow
Dim lngA As Long, lngB As Long
Dim lngX As Long, lngY As Long
Dim hell As Long, dunkel As Long
Dim col As New Collection
Dim bBool As Boolean
Dim lngZähler As Long
Dim lngBis As Long
Dim rRange As Range
hell = RGB(152, 245, 255)
dunkel = RGB(135, 206, 250)
bBool = False
Set lObj = ActiveWorkbook.Worksheets("Auswahl").ListObjects("Übersicht")
For Each lRow In lObj.ListRows
If Not lRow.Range.EntireRow.Hidden Then
col.Add lRow.Index
End If
Next lRow
lngBis = col.Count
lngZähler = 1
Do Until lngZähler = lngBis
lngA = lObj.ListRows(col.Item(lngZähler)).Range(3).Value
lngB = lObj.ListRows(col.Item(lngZähler + 1)).Range(3).Value
If lngA = lngB Then
If lngZähler >= lngBis Then
Exit Sub
End If
Do Until lObj.ListRows(col.Item(lngZähler)).Range(3).Value > lngB And lngZähler = lngBis
lObj.ListRows(col.Item(lngZähler)).Range.Interior.Color = IIf(bBool, hell, dunkel)
lngZähler = lngZähler + 1
Loop
bBool = Not bBool
lObj.ListRows(col.Item(lngZähler)).Range.Interior.Color = IIf(bBool, hell, dunkel)
Else
If lngZähler >= lngBis Then
Exit Sub
End If
lObj.ListRows(col.Item(lngZähler)).Range.Interior.Color = IIf(bBool, hell, dunkel)
lngZähler = lngZähler + 1
bBool = Not bBool
End If
If lngZähler = lngBis Then
lngA = lObj.ListRows(col.Item(lngZähler)).Range(3).Value
lngB = lObj.ListRows(col.Item(lngZähler - 1)).Range(3).Value
If lngA = lngB Then
lObj.ListRows(col.Item(lngZähler)).Range.Interior.Color = lObj.ListRows(col.Item(lngZähler - 1)).Range.Interior.Color
Else
lObj.ListRows(col.Item(lngZähler)).Range.Interior.Color = IIf(bBool, hell, dunkel) 'rRange.Rows(lngZähler).Interior.Color = IIf(bBool, hell, dunkel)
End If
End If
Loop
färbenERR:
Set lObj = Nothing
End Sub
Nach einzel-selektierer Auswahl kann es nötig sein (habe keine Logik gefunden, wird mit Cache/Vermeidung Neuberechnung zusammenhängen) , in die Überschrift zu klicken. Alternativ die Bedingungen von onur mit zelle schaffen.
hth
Ulf