wie zum Kuckuck kriege ich den ("LÖSCHEN"-Button)-Code
Code:
Sub SchraffierungOhne() ' ' Keine_Schraffierung Makro ' in markierten Zellen Schraffierung entfernen ' With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub
so ergänzt, dass die Zellen im selektierten Bereich, die in Sa- oder So-Zeilen liegen,
mit diesem Grau
Code:
With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.249946592608417 .PatternTintAndShade = 0 End With
oder im Falle eines Feiertags
mit dieser Farbe
Code:
With Selection.Interior .PatternColorIndex = xlAutomatic .Color = 8573690 .TintAndShade = 0 End With
gefüllt werden?
Das Blatt "Feiertage" ist ausgeblendet.
Zur Erklärung: Die Kollegen markieren zur besseren Übersicht Arbeitszeitblöcke. Daher muss in den WE- bzw. Feiertag-Zellen die Bedingte Formatierung erst gelöscht werden (das erledigen in einem die Füllung-Buttons). Werden die Füllungen dann wieder gelöscht, entstehen Lücken. Die Dienstpläne sehen dann zerhäckselt aus. Viele Kollegen sind computer- und vor allem exceltechnisch völlig unbedarft, daher diese Datei.
Wäre toll, wenn das geht, das ist das einzige, was noch fehlt.
im allgemeinen sollte man die EDV dazu verwenden, komplizierte Dinge zu vereinfachen. Warum, um alles in der Welt, gehen so viele Excelanwender den umgedrehten Weg?
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Du verzichtest auf die bedingte Formatierung und färbst gleich alles per Makro.
Zum Nachfärben nimmst Du eine Schleife. Im Prinzip
Code:
For Each Zellen in Selection 'zuerst auf Wochenende prüfen If Zellen.Value = Wochenende Then 'Farbe Grau setzen '... End If 'dann auf Feiertag prüfen 'zuerst auf Wochentag prüfen If Zellen.Value = Feiertag Then 'Diese Farbe setzen '... End If Next
So was in der Art könntest Du auch in Deinem jetzigen Code einsetzen, wenn Du dabei bleiben willst. Wenn das Datum nicht in der Zelle steht, z.B. oben in Zeile 1, dann prüfst Du natürlich nicht den Zelleneintrag sondern das, was oben steht, z.B. Cells(1, Zellen.Column).Value
Kommst Du mit den Ansätzen zurecht? Deine Datei hab ich nicht angeschaut.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
23.03.2019, 12:58 (Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2019, 13:01 von CaptainNemo.)
Ich weiß nicht genau wie du das meinst Klaus-Dieter. Die ganze Datei existiert nur, weil manche Kollegen null Computer-Erfahrung haben. Die Komplexität der Vorlage ergibt sich daraus, dass für den Anwender praktisch alles automatisch geht. Bis auf diesen einen Punkt. Und das stört vor allem mich!
Danke schauan, ich werde bei der ersten Gelegenheit versuchen, deinen Vorschlag umzusetzen.
Ich habe mich leider nicht klar ausgedrückt. Die Zellen selbst haben kein Datum. Jede Zelle im selektierten Bereich, in deren Zeile in der Spalte B "Sa" oder "So" steht, also die Werte 7 oder 1, müssen eingefärbt werden. Ich habe leider nicht gefunden wie das geht.
04.04.2019, 05:59 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2019, 05:59 von Kuwer.)
Hallo Uwe,
die Bedingte Formatierung hat Vorrang vor manueller Formatierung. Deine Makros funktionieren ja vielleicht, nur sieht man das nicht, solange die Zelle(n) gleichzeitig bedingt formatiert ist/sind. Wenn also manuelle selektive Formatänderungen möglich sein sollten, darf es keine Bedingten Formatierungen gleichzeitig geben.
Ach so ja, sorry - aufgrund der Bedürfnisse der Anwender, die unbedingt Zeitblöcke farblich markieren wollen/müssen, habe ich Buttons installiert, die in selektierten Zellen zuerst die bedingte Formatierung löschen und sie dann einfärben. Daher das ganze Jedöns.
Ich kann mich auf den Kopf stellen, ich finde keinen Code, der für jede selektierte Zelle abcheckt, ob sie in einer Wochenend-Zeile liegt, ob also in der jeweils betreffenden Zeile in Spalte B "Sa" oder "So" steht, und sie dann einfärbt.
(04.04.2019, 09:44)CaptainNemo schrieb: Ich kann mich auf den Kopf stellen, ich finde keinen Code, der für jede selektierte Zelle abcheckt, ob sie in einer Wochenend-Zeile liegt, ob also in der jeweils betreffenden Zeile in Spalte B "Sa" oder "So" steht, und sie dann einfärbt.
so für Deinen obigen Code:
Sub SchraffierungOhne() ' ' Keine_Schraffierung Makro ' in markierten Zellen Schraffierung entfernen ' Dim rngZ As Range For Each rngZ In Selection.Rows If Weekday(Cells(rngZ.Row, 2).Value, vbMonday) < 6 Then With rngZ.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Else With rngZ.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.249946592608417 .PatternTintAndShade = 0 End With End If Next rngZ End Sub
Feiertage fehlen halt noch. Das greift wie gesagt aber nur, wenn keine Bed. Formatierung vorliegt.
Sub SchraffierungErsetzen() ' ' SchraffierungErsetzen Makro ' in markierten Zellen Schraffierung entfernen und ersetzen ' Dim rngZ As Range, Feiertag As Range For Each rngZ In Selection.Rows Set Feiertag = Sheets("Feiertage").Range("Feiertage").Find(what:=Cells(rngZ.Row, 2), LookIn:=xlValues, lookat:=xlWhole) If Not Feiertag Is Nothing Then With rngZ.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 49407 .TintAndShade = 0 .PatternTintAndShade = 0 End With Else If Weekday(Cells(rngZ.Row, 2).Value, vbMonday) < 6 Then With rngZ.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Else With rngZ.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.249946592608417 .PatternTintAndShade = 0 End With End If End If Set Feiertag = Nothing Next rngZ End Sub