Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Bedingte Formatierung mit VBA
#41
Habe jetzt noch Termine eingebaut!

Dass einzige, was mich noch stört ist, wenn ich einen Sollteg rot markiere (Urlaub)
soll er die Schriftfarbe weiss machen. Lösche ich den Urlaubstag wieder soll er die Schriftfarbe wieder rot machen.

Habe jetzt schon unzälige Sachen getestet, nur ohne Erfolg.


Angehängte Dateien
.xlsm   Urlaubskalender_2025.xlsm (Größe: 89,3 KB / Downloads: 5)
Antworten Top
#42
Hallöchen,

Du hast doch für die Sonntage schon

Code:
If Target.Interior.ColorIndex = 3 And Intersect(Target, Range("G12:L12, N12:S12, U12:Z12, AB12:AG12, G22:L22, N22:S22, U22:Z22, AB22:AG22, G32:L32, N32:S32, U32:Z32, AB32:AG32")) Is Nothing Then
   Else
   .Font.ColorIndex = 3
   End If
   Else
   Target.Interior.ColorIndex = xlNone

Da könntest Du die Farbe einbauen

Code:
If Target.Interior.ColorIndex = 3 And Intersect(Target, Range("G12:L12, N12:S12, U12:Z12, AB12:AG12, G22:L22, N22:S22, U22:Z22, AB22:AG22, G32:L32, N32:S32, U32:Z32, AB32:AG32")) Is Nothing Then
     .Font.ColorIndex = xx 'weiße nummer
   Else
     .Font.ColorIndex = 3
   End If
   Else
   Target.Interior.ColorIndex = xlNone


Nur könntest Du das besser machen erst mal auf alle Tage beschränken, wenn Hintergrundfarbe 3, dann Schriftfarbe weiß

Code:
If Target.Interior.ColorIndex = 3 And Not Intersect(Target, Range("G6:L12, N6:S12, U6:Z12, AB6:AG12, G16:L22, N16:S22, U16:Z22, AB16:AG22, G26:L32, N26:S32, U26:Z32, AB26:AG32")) Is Nothing Then
     .Font.ColorIndex = xx 'weiße nummer
   Else
       'Montag bis Freitag schwarz
       If Not Intersect(Target, Range("G6:L10, N6:S10, U6:Z10, AB6:AG10, G16:L20, N16:S20, U16:Z20, AB16:AG20, G26:L30, N26:S30, U26:Z30, AB26:AG30")) Is Nothing
       .Font.ColorIndex = xx 'schwarz
       'Samstage blau
       ....
       'Sonntage rot
       ....
   End If
   Else
   Target.Interior.ColorIndex = xlNone

Ist aber jetzt nicht getestet, soll die Vorgehensweise veranschaulichen. Eventuell tust Du das zwischen Deinen Ifs und Elses noch verschieben...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#43
Vielen Dank!

Dass muss ich wirklich mal in ruhe schauen.

Bin leider ein absoluter VBL Leihe.
Antworten Top
#44
So, die Schriftfarben habe ich hinbekommen.

Was mir allerdings noch stört ist:

Ausgangssituation:
Tag mit Termin rot markiert (Urlaubstag) und andere Tage rot markiert

Urlaubstage wieder löschen (Doppelklick)

Problem:

Wurde ein Tag mit Termin rot markiert (Urlaubstag) und lösche einen andere rot markierten Tage wieder, werden alle rot markierten Tage erstmal selectet.

Wenn sich jetzt in diesen rot markierten Tagen mindestens ein Termin-Tag befindet, wird das Userform geöffnet.

Wie kann ich das verhindern.

er soll ja das Userform nur öffnen, wenn ich direkt auf einen Urlaubs oder Termintag klicke.


Angehängte Dateien
.xlsm   Urlaubskalender_2025.xlsm (Größe: 95,38 KB / Downloads: 7)
Antworten Top
#45
Hallöchen,

Du hast im worksheet_Change:

Code:
If aktive_zelle <> "" And Sheets("Hilfstabelle").Range("A4") <> "" Then

If Intersect(Target, Range("G6:AF32")) Is Nothing Then

Else

Sheets("Hilfstabelle").Range("A1") = ActiveCell.Value

UserForm1.Show

End If

End If

wenn Du die Codes etwas einrücken und vielleicht noch kommentieren würdest, würdest Du da besser durchsehen. Kommentare im Code sind auch eine Art Beschreibung. Leerzeilen hast Du ja genug gelassen. Könnte so aussehen. Ich schreibe übrigens an einem End(e) (oder Next bei einer Schleife) in der Regel den Kommentar vom Anfang, damit man weiß, wozu es gehört. Beim Else auch, er wird da aber sinngemäß abgewandelt.

Code:
'wenn die aktive (selektierte) Zelle nicht leer ist und in der Hilfstabelle A4 nix steht (Name Feiertag), dann
If aktive_zelle <> "" And Sheets("Hilfstabelle").Range("A4") <> "" Then
    'Wenn die selektierte Zelle nicht zum Bereich G6:Af32 gehört, dann
    If Intersect(Target, Range("G6:AF32")) Is Nothing Then
    'Oder Wenn die selektierte Zelle zum Bereich G6:Af32 gehört
    Else
        'Datum in die Hilfstabelle uebertragen
        Sheets("Hilfstabelle").Range("A1") = ActiveCell.Value
        'Userform anzeigen
        UserForm1.Show
    'Ende Wenn die selektierte Zelle nicht zum Bereich G6:Af32 gehört, dann
    End If
'Ende wenn die aktive (selektierte) Zelle nicht leer ist und in der Hilfstabelle A4 nix steht (Name Feiertag), dann
End If


Könntest Du mal für alle Zeilen dieses Makros machen. Darunter kommt ja noch mal eine Bedingung, bei der das UF angezeigt werden könnte. Dann überlegst Du, ob die Bedingungen korrekt sind.
Von anderen Verbesserungen sehe ich erst mal ab, wie gesagt, schaue Dir den Ablauf erst mal genau an. Und auch wieder der Hinweis mit F8. Setze z.B. am Anfang in der ersten Zeile, die was macht, einen Haltepunkt, gehe mit F8 weiter und schaue, was da gemacht wird.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#46
... hatte ich vergessen - Dein beschriebenes Problem kann ich nicht nachvollziehen

z.B.
Du hast einen Termin am 15. Mai

Doppelklick von mir am 12., 13., 14,. 16. --> alles ok
Doppelklick auf 13. --> fast alles ok, nur dieser Tag ist betroffen und die anderen bleiben wie gehabt, die Schriftfarbe wird nicht gesetzt, sonst passt es ...
Button Urlaubstge löschen --> fast ok, die Schriftfarbe wird nicht gesetzt, sonst passt es ...

Im code fehlt im Prinzip das, was ich unter #43 im dritten codeteilgeschrieben habe mit den Schriftfarben Schwarz, blau und rot...
Du könntest das Färben oben kurz nach der Msgbox einbauen, also in etwa sieht es dann so aus:


Code:
If MsgBox("Sollen wirklich alle markierten Urlaubstage gelöscht werden?", vbQuestion + vbYesNo, "Urlaubstage löschen") = vbYes Then

  Set Bereich = Range("$G$6:$L$12, $N$6:$S$12, $U$6:$Z$12, $AB$6:$AG$12, $G$16:$L$22, $N$16:$S$22, $U$16:$Z$22, $AB$16:$AG$22, $G$26:$L$32, $U$26:$Z$32, $AB$26:$AG$32, $N$26:$S$32")
  Bereich.Interior.Color = xlNone
  
   'Montag bis Freitag schwarz ("automatisch")
   Range("G6:L10, N6:S10, U6:Z10, AB6:AG10, G16:L20, N16:S20, U16:Z20, AB16:AG20, G26:L30, N26:S30, U26:Z30, AB26:AG30") _
  .Font.ColorIndex = xlColorIndexAutomatic
  'Samstage blau
   Range("G11:L11, N11:S11, U11:Z11, AB11:AG11, G21:L21, N21:S21, U21:Z21, AB21:AG21, G31:L31, N31:S31, U31:Z31, AB31:AG31") _
  .Font.ColorIndex = 5
  'Sonntage rot
   Range("G12:L12, N12:S12, U12:Z12, AB12:AG12, G22:L22, N22:S22, U22:Z22, AB22:AG22, G32:L32, N32:S32, U32:Z32, AB32:AG32") _
  .Font.ColorIndex = 3
  
Range("AE34").Value = 0
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#47
Vielen Dank für die vielen Hinweise.

Alle Formate sowie Fontcolors werden im Kalender selbst sowie im Modul bei Urlaubstage löschen immer neu geladen.

Jetzt funzt es alles.
Antworten Top
#48
Hi

Irgendwie nerft das Userform, wenn ein Termin ist.

Schöner wäre, wenn ein Kommentar in der Termin-Zelle wäre.

Nur irgendwie finde ich nicht die richtige Lösung. Muss ja auch alles mit umschalten, wenn das Jahr gewechselt wird.
Antworten Top
#49
Hallo,
 
wie man so was macht hatte ich dir doch schon mal in:
https://www.clever-excel-forum.de/Thread...#pid282341
eingebaut.
 
Gruß Uw
Antworten Top
#50
Stimmt.
Aber ich glaube, es rechtfertigt nicht den Aufwand meinen Kalender abzuändern.

Trotzdem Danke
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste