ziemlich viel Case...
20.01.2011 21:52:40
Christian
Hallo Stefan,
was nebem dem vielen Case sonst noch auffällt:
- pack den Code in das "Worksheet_Change" Ereignis des betreffenden Tabellenblatts. Es macht ja keinen Sinn, den Code in jedem Tabellenblatt der Datei zu starten.
- prüfe ganz am Anfang die betreffenden Spalten und Zeilen. Wenn außerhalb des relevanten Bereichs, dann Exit.
Mein Vorschlag zu deiner Frage:
- Setze die Schriftfarbe der jeweiligen Namen in der Tabelle "Gültigkeit" (zB. rot für "sf", grün für "Be", etc.)
- suche den Namen in der Tabelle "Gültigkeit" (in meinem Bsp mit VERGLEICH)
- wann immer der Eintrag in Spalte B leer ist und in Spalte J kein "e" steht, ordnest du der Zelle in Spalte F diese Schriftfarbe zu.
Lösche deinen Code (oder kommentiere diesen komplett aus) für folgendes Beispiel.
Achja, und lösche die Legende, mein Beispiel läuft bis zur letzten Zeile in Spalte A.
Im Klassenmodul der Tabelle "Pendenzen":
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row Cells(Rows.Count, 1).End(xlUp).Row Then Exit Sub
If IsError(Application.Match(Target.Column, Array(1, 2, 6, 10), 0)) Then Exit Sub
Dim rngR As Range
Dim lngR As Long
lngR = Target.Row
Set rngR = Cells(lngR, 1).Resize(, 11)
With rngR.Font
Select Case Target.Column
Case 1
.Bold = (Right(Cells(lngR, 1), 2) = "00")
Case 2
If Cells(lngR, 10) "e" Then
Select Case Cells(lngR, 2)
Case "I", "E": .ColorIndex = 23
Case "P": .ColorIndex = 3
Case Else
.ColorIndex = 1
Cells(lngR, 6).Font.ColorIndex = udfGetColor(Cells(lngR, 6).Text, 4)
End Select
End If
Case 6
If Cells(lngR, 10) "e" And Cells(lngR, 2) = "" Then
Cells(lngR, 6).Font.ColorIndex = udfGetColor(Cells(lngR, 6).Text, 4)
End If
Case 10
If Cells(lngR, 10) = "e" Then
.ColorIndex = 16
Else
Cells(lngR, 6) = Cells(lngR, 6)
Cells(lngR, 2) = Cells(lngR, 2)
End If
End Select
End With
Set rngR = Nothing
End Sub
in ein allgemeines Modul (im VB-Editor "einfügen - Modul")
Option Explicit
Function udfGetColor(strName As String, lngFR As Long) As Long
Dim i As Long, lngLR As Long
Dim vntMtch
With ThisWorkbook.Sheets("Gültigkeit")
lngLR = .Cells(.Rows.Count, 3).End(xlUp).Row
vntMtch = Application.Match(strName, .Cells(lngFR, 3).Resize(lngLR - lngFR + 1), 0)
If Not IsError(vntMtch) Then
udfGetColor = .Cells(vntMtch + lngFR - 1, 3).Font.ColorIndex
Else
udfGetColor = 1
End If
End With
End Function
Gruß
Christian