Clever-Excel-Forum

Normale Version: Datumsüberprüfung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Nabend zusammen...

Mit dem Code im Userform
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      
   If DatumGetestet(TextBox1.Value) = False Then
    Cancel = True
    MsgBox "Bitte richtiges Datum eingeben"
    Application.EnableEvents = False
    TextBox1.SetFocus
    Application.EnableEvents = True
   Else
    TextBox1 = Format(DatumGetestet(TextBox1.Value), "dd/mm/yyyy")
   End If
  
End Sub

und mit diesem in einem Modul

Code:
Public Function DatumGetestet(strDatum As String) As Variant
  'Funktion erkennt A L L E
  'fehlerhaften Datumsangaben
  'Auch Überprüfung auf Monat 28, 30 oder 31 Tage
  '(bei Februar auf Schaltjahre)
  'nur Ziffern angaben zulässig (oder die Formate erweitern)
  'Function gibt bei Fehler False (Boolean)
  'und bei gültigem Datum das Datum (Date) zurück
DatumGetestet = False
If IsDate(strDatum) Then
Select Case Trim(strDatum)
  Case Format(CDate(strDatum), "d/m/yy"), _
       Format(CDate(strDatum), "d/m/yyyy"), _
       Format(CDate(strDatum), "d/mm/yy"), _
       Format(CDate(strDatum), "d/mm/yyyy"), _
       Format(CDate(strDatum), "dd/m/yy"), _
       Format(CDate(strDatum), "dd/m/yyyy"), _
       Format(CDate(strDatum), "dd/mm/yy"), _
       Format(CDate(strDatum), "dd/mm/yyyy")
   DatumGetestet = CDate(strDatum)
End Select
End If

End Function

bekomme ich eine Fehlermeldung, wenn kein richtiges Datum eingetragen wurde. Soweit ist es richtig. Wie müsste der Code nun aussehen, wenn die Prüfung nur erfolgen soll, wenn tatsächlich auch irgendwas im Textfeld steht. Sprich wenn es leer ist, soll es keine Prüfung geben. Und wie könnte die Datumsprüfung aussehen, wenn bei einer Eingabe nur ein Datum zugelassen wird, was im aktuellen Monat liegt.

Danke für Eure Hilfe!

Grüße
Hallo!
Warum diese Funktion?
Die Prüfung auf IsDate() reicht doch völlig.
Ich mache dies so:
Code:
Private Sub txtBeginn_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With txtBeginn
   If .Text = "" Then Exit Sub
   If IsDate(.Text) Then
       .Text = Format(.Text, "dd.mm.yyyy")
   Else
       MsgBox .Text & " ist kein gültiges Datum!"
       .Text = ""
       Cancel = True
   End If
End With
End Sub
Zitat:Und wie könnte die Datumsprüfung aussehen, wenn bei einer Eingabe nur ein Datum zugelassen wird, was im aktuellen Monat liegt.

Code:
If Month(Date) <> Month(Cdate(.Text)) Then MsgBox "Falscher Monat!"


Gruß Ralf
Danke Ralf! Code 1 habe ich bereits am Laufen. Kannst du mir noch verraten, wie ich Code 1 und 2 miteinander kombinieren kann.

Danke und Grüße
Sandor
Hi!
Ungetestet:
Code:
Private Sub txtBeginn_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With txtBeginn
  If .Text = "" Then Exit Sub
  If IsDate(.Text) Then
     If Month(Date) <> Month(CDate(.Text)) Then
        MsgBox "Falscher Monat " & Format(.Text, "mmmm") & "!"
        .Text = ""
        Cancel = True
        Exit Sub
     End If
     .Text = Format(.Text, "dd.mm.yyyy")
  Else
     MsgBox .Text & " ist kein gültiges Datum!"
     .Text = ""
     Cancel = True
  End If
End With
End Sub


Gruß Ralf
Danke Ralf! Funktioniert!