HERBERS Excel-Forum - das Archiv
Bedingte Formatierung Tabellenblatt übergreifend
Bettina

Hallo Zusammen,
ich bin dabei eine Tabelle zur Dienstplanung zu erstellen. In dem Tabellenblatt "Jahresplan" befindet sich ein Kalender. Der Dienst für den jeweiligen Mitarbeiter wird erfasst, in dem "f" für Frühdienst, "s" für Spätdienst, "u" für Urlaub usw. in die entsprechende Zelle eingetragen wird. Über ein Makro für bedingte Formatierung (es sind insgesamt 8 Bedingungen notwendig) wird die Zelle dann farblich gekennzeichnet. Bis dahin funktioniert auch alles bestens. Da im Jahresplan auch Zeiten wie Krank, Urlaub usw. erfasst werden, diese aber nicht jeden was angehen und ich eine doppelte Datenpflege vermeiden möchte, habe ich ein Blatt "Intranet" angelegt, welches alle relevanten Daten aus dem "Jahresplan" beinhaltet. Im Blatt Intranet läuft das gleiche Makro wie im "Jahresplan" mit dem Unterschied, dass Urlaub, Krank usw. einen weißen Hintergrund und weiße Schrift erhält (somit unsichtbar wird). Dieses wird automatisch im Intranet veröffentlicht. Nun zu meinem Problem. Werden Änderungen im "Jahresplan" vorgenommen erfolgt keine bedingte Formatierung im Blatt "Intranet".
Hier das Makro zum besseren Verständnis:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'   SCHRIFT
'   für Hintergrund RaZelle.Interior.ColorIndex
Dim RaBereich As Range, RaZelle As Range
'   Bereich der Wirksamkeit
Set RaBereich = Range("B3:AF6,B8:AF11,B13:AF16,B19:AF22,B24:AF27,B29:AF32,B35:AF38,B40:AF43,B45:AF48,B51:AF54,B56:AF59,B61:AF64")
For Each RaZelle In Range(Target.Address)
'       überprüfen ob Zelle im vorgegebenen Bereich
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
'           Farbe entfernen
RaZelle.Interior.ColorIndex = 0
RaZelle.Font.ColorIndex = 0
'           Zellen färben
Select Case RaZelle.Value
Case "f"
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 36
Case "g"
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 35
Case "s"
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 34
Case "w"
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 40
Case "u"
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 45
Case "m"
With Selection.Interior
.ColorIndex = 43
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 43
Case "d"
With Selection.Interior
.ColorIndex = 33
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 33
Case "k"
With Selection.Interior
.ColorIndex = 38
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 38
'               usw.
Case Else
RaZelle.Font.ColorIndex = 0
End Select
End If
Next RaZelle
Set RaBereich = Nothing
End Sub

Für Hilfe wäre ich Euch wirklich sehr dankbar.
Gruß Bettina
AW: "bedingte Formatierung"
Luc

Hallo Bettina,
warum steht bei den einzelnen Cases stets Selection...? Nur Case Else ist richtig! Du benutzt for each mit Laufvariablenobjekt und setzt es dann gar nicht ein! Stattdessen die zufällige Selection.
Übrigens ist deine Verwendung des Begriffs "bedingte Formatierung" irreführend. Du trägst mit dem Makro eine (variable) Festformatierung ein. Eine echte bedingte Formatierung ist ganz anders aufgebaut! Und die wäre dann auch nicht mappen(/blatt-?)übergreifend möglich.
Gruß Luc :-?
AW: Bedingte Formatierung Tabellenblatt übergreifend
Bettina

Hallo luc,
dieses "Makro" habe ich nicht selber geschrieben, sondern hier auf Herber Excel-CD und es hat bis dahin auch gut funktioniert. Von VBA habe ich so gut wie Null Ahnung.
Wenn ich ein doppelklick auf die aktualisierte Zelle mache und dann mit Enter abschließe, funktioniert es ja auch in dem Blatt "Intranet". Eben nur nicht aus eigener Kraft und über einen Butten kann ich es auch ablaufen lassen.
Gruß Bettina
Dann trifft's nicht dich, sondern den, der...
Luc

...eine for each Schleife verwendet hat, ohne sie eigentlich zu verstehen. Ersetze innerhalb der Schleife (bis Next RaZelle) alle Selection... durch RaZelle..., auch nach With. Das es vorher bzw mit manuellem Eingriff fkt hat, hängt mit der dadurch ausgewählten Zelle zusammen - es war zufällig die richtige. Um solche Zufälle möglichst auszuschließen, testen Programmierer ihre Programme unter unterschiedlichsten Bedingungen und trotzdem wdn auch nach 20 Jahren noch Fehler gefunden, weil eine besonders spezielle Bedingung erst dann eintrat. Aber keine Angst, dein Programm ist dafür nicht komplex genug.
Ciao Luc :-?
Bedingte Formatierung Tabellenblatt übergreifend
Bettina

Hallo Zusammen,
ich bin dabei eine Tabelle zur Dienstplanung zu erstellen. In dem Tabellenblatt "Jahresplan" befindet sich ein Kalender. Der Dienst für den jeweiligen Mitarbeiter wird erfasst, in dem "f" für Frühdienst, "s" für Spätdienst, "u" für Urlaub usw. in die entsprechende Zelle eingetragen wird. Über ein Makro für bedingte Formatierung (es sind insgesamt 8 Bedingungen notwendig) wird die Zelle dann farblich gekennzeichnet. Bis dahin funktioniert auch alles bestens. Da im Jahresplan auch Zeiten wie Krank, Urlaub usw. erfasst werden, diese aber nicht jeden was angehen und ich eine doppelte Datenpflege vermeiden möchte, habe ich ein Blatt "Intranet" angelegt, welches alle relevanten Daten aus dem "Jahresplan" beinhaltet. Im Blatt Intranet läuft das gleiche Makro wie im "Jahresplan" mit dem Unterschied, dass Urlaub, Krank usw. einen weißen Hintergrund und weiße Schrift erhält (somit unsichtbar wird). Dieses wird automatisch im Intranet veröffentlicht. Nun zu meinem Problem. Werden Änderungen im "Jahresplan" vorgenommen erfolgt keine bedingte Formatierung im Blatt "Intranet".
Hier das Makro zum besseren Verständnis:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'   SCHRIFT
'   für Hintergrund RaZelle.Interior.ColorIndex
Dim RaBereich As Range, RaZelle As Range
'   Bereich der Wirksamkeit
Set RaBereich = Range("B3:AF6,B8:AF11,B13:AF16,B19:AF22,B24:AF27,B29:AF32,B35:AF38,B40:AF43,B45:AF48,B51:AF54,B56:AF59,B61:AF64")
For Each RaZelle In Range(Target.Address)
'       überprüfen ob Zelle im vorgegebenen Bereich
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
'           Farbe entfernen
RaZelle.Interior.ColorIndex = 0
RaZelle.Font.ColorIndex = 0
'           Zellen färben
Select Case RaZelle.Value
Case "f"
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 36
Case "g"
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 35
Case "s"
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 34
Case "w"
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 40
Case "u"
With Selection.Interior
.ColorIndex = 45
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 45
Case "m"
With Selection.Interior
.ColorIndex = 43
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 43
Case "d"
With Selection.Interior
.ColorIndex = 33
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 33
Case "k"
With Selection.Interior
.ColorIndex = 38
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 38
'               usw.
Case Else
RaZelle.Font.ColorIndex = 0
End Select
End If
Next RaZelle
Set RaBereich = Nothing
End Sub

Für Hilfe wäre ich Euch wirklich sehr dankbar.
Gruß Bettina
AW: "bedingte Formatierung"
Luc

Hallo Bettina,
warum steht bei den einzelnen Cases stets Selection...? Nur Case Else ist richtig! Du benutzt for each mit Laufvariablenobjekt und setzt es dann gar nicht ein! Stattdessen die zufällige Selection.
Übrigens ist deine Verwendung des Begriffs "bedingte Formatierung" irreführend. Du trägst mit dem Makro eine (variable) Festformatierung ein. Eine echte bedingte Formatierung ist ganz anders aufgebaut! Und die wäre dann auch nicht mappen(/blatt-?)übergreifend möglich.
Gruß Luc :-?
AW: Bedingte Formatierung Tabellenblatt übergreifend
Bettina

Hallo luc,
dieses "Makro" habe ich nicht selber geschrieben, sondern hier auf Herber Excel-CD und es hat bis dahin auch gut funktioniert. Von VBA habe ich so gut wie Null Ahnung.
Wenn ich ein doppelklick auf die aktualisierte Zelle mache und dann mit Enter abschließe, funktioniert es ja auch in dem Blatt "Intranet". Eben nur nicht aus eigener Kraft und über einen Butten kann ich es auch ablaufen lassen.
Gruß Bettina
Dann trifft's nicht dich, sondern den, der...
Luc

...eine for each Schleife verwendet hat, ohne sie eigentlich zu verstehen. Ersetze innerhalb der Schleife (bis Next RaZelle) alle Selection... durch RaZelle..., auch nach With. Das es vorher bzw mit manuellem Eingriff fkt hat, hängt mit der dadurch ausgewählten Zelle zusammen - es war zufällig die richtige. Um solche Zufälle möglichst auszuschließen, testen Programmierer ihre Programme unter unterschiedlichsten Bedingungen und trotzdem wdn auch nach 20 Jahren noch Fehler gefunden, weil eine besonders spezielle Bedingung erst dann eintrat. Aber keine Angst, dein Programm ist dafür nicht komplex genug.
Ciao Luc :-?
Bewerten Sie hier bitte das Excel-Portal