05.03.2023, 19:31 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2023, 19:33 von kingkong.)
Code:
Sub Mitarbeiter1grün(ByVal Target As Range)
Dim date16 As Date: date16 = Range("D16").Value Dim date20 As Date: date20 = Range("D20").Value
If IsDate(date16) And IsDate(date20) Then If DateDiff("d", date16, date20) > 365 Then Range("D21").Interior.ColorIndex = 4 ' Grün Else Range("D21").Interior.ColorIndex = xlNone End If ElseIf Range("D20").Value = "" Then Range("D21").Interior.ColorIndex = xlNone End If
End Sub
Sub Mitarbeiter1rot(ByVal Target As Range)
Dim date16 As Date: date16 = Range("D16").Value Dim date20 As Date: date20 = Range("D20").Value
If IsDate(date16) And IsDate(date20) Then If DateDiff("d", date16, date20) < 365 Then Range("D21").Interior.ColorIndex = 3 ' rot Else Range("D21").Interior.ColorIndex = xlNone End If ElseIf Range("D20").Value = "" Then Range("D21").Interior.ColorIndex = xlNone End If
End Sub
Sub Mitarbeiter1leer(ByVal Target As Range)
If Range("D20").Value = "" Then Range("D21").Interior.ColorIndex = xlNone
End If
End Sub
ich habe diese 3 Makros die ich jetzt gerne so starten möchte
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Hi, möglich ist es natürlich, nur werden immer alle 3 Makros gestartet, da diese ja keinen "Erfolg" vorweisen können, das können nur Functions (siehe Hilfe). Wesentlich einfacher und übersichtlicher wäre natürlich 1 Makro, das das Gewünschte tut (ungetestet):
Code:
Sub MitarbeiterFarbe(ByVal Target As Range) Dim date16 As Date: date16 = Range("D16").Value Dim date20 As Date: date20 = Range("D20").Value Dim Farbe If date16 = "" Then Farbe = xlNone ElseIf IsDate(date16) And IsDate(date20) Then Farbe = IIf(DateDiff("d", date16, date20) > 365, 4, 3) End If Range("D21").Interior.ColorIndex = Farbe End Sub
Gruß der AlteDresdner (Win11, Off2021)
Folgende(r) 1 Nutzer sagt Danke an AlterDresdner für diesen Beitrag:1 Nutzer sagt Danke an AlterDresdner für diesen Beitrag 28 • kingkong
Dieses Konstrukt ist ungeeignet, das Vorliegen eines Datumswertes zu prüfen! Durch die Zuweisung von date16 = Range("D16").Value wird bereits alles mögliche in einen Datumswert gewandelt, so dass die anschließende Prüfung IsDate(date16) auch dann TRUE ergibt, wenn in D16 überhaupt kein Datum hinterlegt ist. Ausdrücke hingegen, die nicht in einen Datumswert gewandelt werden können, rauschen ungebremst in einen Laufzeitfehler #13 "Typen unverträglich". Umdrehen der Logik macht Sinn.