3fache Datumsprüfung

Hallo,

ich prüfe mit folgenden Code, ob in der Zelle D9 ein Datum eingetragen wurde und gebe eine Meldung, wenn es fehlt:

If Range(„D9“).Value = „“ Then
MsgBox „Datum fehlt!!!“
Range(„D9“).Select
Exit Sub
End If

Zwei Sachen fehlen mir noch: Prüfung, ob Zelle D9 ein Datumsformat hat und ob in einer zweiten Tabellen „USt“ (Zellen c10:c15) das Jahr des datums angelegt wurde. Dazu habe ich folgendes entwickelt:

If WorksheetFunction.CountIf(Worksheets(„USt“).Range(„C10:C15“).Row), Year(zelle)) > 0 Then

kann es aber nicht korrekt in den obigen Code integrieren. Für alle drei geprüften Dinge, also Datum vorhanden, Datum richtiges Format, Jahrt des Dtums in Tab „USt“ angelegt, soll über die entsprechende msgbox ausgegeben werden, wenn Bedingung nicht erfüllt ist. In diesem Fall soll jedesmal das Makro über exit sub verlassen werden. Kann jemand hier weiterhelfen?

Gruß
Denis

Hallo Denis.

kann es aber nicht korrekt in den obigen Code integrieren.

Wenn ich Dich mit dem Integrieren richtig verstanden habe, dann hast Du zwei Möglichkeiten, den Code zu gestalten.

  1. Verschachtelung der If-Then-Abfragen:

    Dim Fehler As Boolean
    Dim Satz As String
    If Range(„D9“).Value = „“ then
    Fehler = True
    Satz = „Datum fehlt“
    If DatumsFormat = Falsch then
    Satz = Satz & „, falsches Format“
    If JahrInTabelleUSt = Falsch then
    Satz = Satz & „, Jahr nicht eingetragen“
    End If
    End If
    End If
    If Fehler = True Then
    MsgBox Satz
    Exit Sub
    End If

  2. Verknüpfung der Bedingungen mit einem Operator:

    If Range(„D9“).Value = „“ Or DatumsFormat = Falsch Or JahrInTabelleUSt = Falsch then
    MsgBox „Datum fehlt“
    Exit Sub
    End If

Ich hoffe, das hilft Dir weiter.

Viele Grüße
Carsten

Hallo Carsten,

die verschachtelte if-Abfrage könnte meine Aufgabe lösen. Ich habe deinen Code ergänzt, allerdings haut nicht alles hin wie es soll. Die msgbox erscheint nur, wenn die Zelle d9 komplett leer ist. Es wird dann ausgegeben, dass alle drei Bedingungen nicht erfüllt sind, obwohl das Datumsformat der Zelle stimmt. Meine Countif-Abfrage (Prüfung ob Jahr des Datums angelegt wurde) funktioniert auch nicht. Kann keinen Fehler entdecken. Den Code findest du unten. Kannst du die Fehlerursachen sehen.

Gruß
Denis

Sub datum()
Dim Fehler As Boolean
Dim Satz As String
If Range(„d9“).Value = „“ Then
Fehler = True
Satz = „Datum fehlt“
If IsDate(„d9“) = Falsch Then
Satz = Satz & „, falsches Format“
If WorksheetFunction.CountIf(Worksheets(„USt“).Range(„c10:c15“), Year(Sheets(„USt“).Range(„d9“))) = 0 Then
Satz = Satz & „, Jahr nicht eingetragen“
End If
End If
End If
If Fehler = True Then
MsgBox Satz
Exit Sub
End If

Hallo Denis.

Den folgenden Code habe ich ausprobiert und er funktioniert bei mir.
Trotzdem kann es sein, daß Dir die Reihenfolge der Abarbeitung nicht gefällt. Dann müßtest Du das noch ändern. Aber hier erstmal der Code:

Sub datum()
 Dim Fehler1 As Boolean
 Dim Fehler2 As Boolean
 Dim Fehler3 As Boolean
 Dim Satz As String
 If Sheets("USt").Range("D9").Value "" Then
 If IsDate(Sheets("Ust").Range("D9")) = True Then
 If Application.WorksheetFunction.CountIf(Sheets("USt").Range("C10:C15"), Year(Sheets("USt").Range("D9"))) = 0 Then
 Fehler3 = True
 Satz = "Das Jahr ist nicht enthalten"
 End If
 Else
 Fehler2 = True
 Satz = "D9 enthält kein Datum"
 End If
 Else
 Fehler1 = True
 Satz = "D9 enthält keinen Eintrag"
 End If

 If Fehler1 = True Or Fehler2 = True Or Fehler3 = True Then
 MsgBox Satz
 Exit Sub
 End If
 'Dein weiterer Code, falls kein Fehler vorhanden ist
End Sub

Viele Grüße
Carsten

Hallo Carsten,

danke, der Code funktioniert bei mir auch. Die Reihenfolge ist mir zunächst egal, solange der Code korrekt funktioniert. Sind aber deutlich mehr Verschachtelungen geworden als ich gedacht habe. War mir aber klar, dass man es nicht mit 5 Zeilen Code hinkriegt.

Gruß
Denis