3 Makros nach Erfolg ausführen
#1
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)
   
    If Target.Address = "$D$20" Then
       
        Call Mitarbeiter1rot(Target)
        Call Mitarbeiter1grün(Target)
        Call Mitarbeiter1leer(Target)
   
    End If
   
End Sub
 wenn das erste nicht erfolgreich soll das zweite, wenn das zweite nicht erfolgreich war das dritte gestartetet werden.

ist dies möglich und wenn ja Danke Euch

MfG


Angehängte Dateien
.xlsm   test datei datum.xlsm (Größe: 84,33 KB / Downloads: 2)
Antworten Top
#2
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:
  • kingkong
Antworten Top
#3
funktioniert nicht
Antworten Top
#4
Hi,

wieso verwendest du nicht einfach die bedingte Formatierung?
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
Code:
    Dim date16 As Date: date16 = Range("D16").Value
  
    If IsDate(date16) ...
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.

Zitat:ist dies möglich und wenn ja Danke Euch
Ja ist es, gern geschehen ;)
Antworten Top


Gehe zu:


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