05.03.2023, 18:31 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2023, 18: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.