Ich bin neu hier, habe aber schon viel von euren Beiträgen profitiert. Dafür vorab schon mal VIELEN DANK!
Jetzt stehe ich vor einem Problem, dass ich mit meinen VBA-Kenntnissen und Foren-Suchen nicht gelöst bekomme:
Ich habe eine Tabelle erstellt, in der in der ersten Spalte die Mitarbeiter meiner Station aufgeführt sind und in der ersten Zeile die Tage des Jahres. Die Wochenenden und Feiertage werden automatisch farblich markiert und jeder Kollege kann über CommandButtons Tage oder ganze Blöcke als Fortbildung, Urlaub, Krankheit oder ähnliches farblich markieren.
Jetzt gibt es aber Mitarbeiter, die nicht an jedem Tag der Woche arbeiten. Ich möchte daher gerne folgende Funktion einfügen: Sobald in einer Zelle am Ende der Zeile (in Spalte 371) eine Ziffer als Wochentagscode eingegeben wird (1=Mo, 2=Di, usw.), soll automatisch jeder entsprechenden Wochentag des Jahres als frei markiert werden (zelle.Interior.ColorIndex = 6). Gleichzeitig sollen aber alle schon eingetragenen Farben in Ruhe gelassen werden.
Aktuell habe ich das für eine Zeile geschafft. Soweit ich meinen zusammengeklaubten VBA-Code verstehe, wird die Zelle NG13 beobachtet. Sobald sich dort etwas ändert, wird ein Bereich definiert, der dann Zelle für Zelle abgearbeitet wird. Es wird jeweils nach Farben gesucht, die in Ruhe gelassen werden sollen (15, 33, 43 und 14) und falls Farbe 6 vorliegt, wird diese gelöscht. Im letzten Schritt wird die in Spalte 371 (Zelle NG13) eingegebene Ziffer mit der in der gerade aktuellen Spalte in Zeile 6 eingetragenen verglichen (dort habe ich für jede Spalte die Wochentagscodes hinterlegt).
Wie kann ich nun erreichen, dass mehrere Zeilen unabhängig voneinender überwacht und dann bei Eintragung eines Wochentagscodes in Spalte 371 abgearbeitet werden?
Wenn ich die "If Target.Adress"-Abfrage einfach für jede Zeile darunter kopiere, dann bekomme ich die Fehlermeldung "Mehrfachdeklaration im aktuellen Gültigkeitsbereich". Erweitere ich dagegen den Target.Address-Bereich und den Range, dann bearbeitet er mir jede Zeile, obwohl nur in einer der Wochentagscode geändert wurde.
Vielen Dank für die Hilfe!
Gruß
Ben
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$NG$13" Then
Dim bereich13, zelle As Range
Set bereich13 = Range("f13:nf13")
For Each zelle In bereich13
If zelle.Interior.ColorIndex = 15 Then GoTo weiter
If zelle.Interior.ColorIndex = 33 Then GoTo weiter
If zelle.Interior.ColorIndex = 43 Then GoTo weiter
If zelle.Interior.ColorIndex = 14 Then GoTo weiter
If zelle.Interior.ColorIndex = 6 Then zelle.Interior.ColorIndex = x1None
If ActiveSheet.Cells(6, zelle.Column) = ActiveSheet.Cells(zelle.Row, 371) Then _
zelle.Interior.ColorIndex = 6
weiter:
Next
End If
End Sub