Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kontrolle für unsinnige Datum-Eingaben

Kontrolle für unsinnige Datum-Eingaben
20.09.2007 10:42:57
Peter
Hallo alle zusammen,
mein Code soll den Inhalt eines Textfeldes in einer Userform auf Gültigkeit überprüfen.
In diesem Textfeld darf nur ein Datum das größer ist als Heute eingetragen werden.
Ich muß ein workaround machen, da die Befehle Date und IsNumeric auf einigen Rechnern die mit bulgarischen Office-Versionen arbeiten nicht funktionieren.
Mein Code funktioniert an folgender Stelle nicht richtig, wenn man auch ein korrektes Datum eingibt erscheint die MsgBox:
'und damit unmögliche Jahresangaben wie 0007
' ElseIf Val(Right(Me.txtDatum, Len(Me.txtDatum) - InStrRev(Me.txtDatum, "."))) ' txtDatum = ""
' MsgBox "Hat wohl länger gedauert letzte Nacht,... noch nicht wach ?"
' Cancel = True
Mein gesamter Code:

Private Sub txtDatum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
If Me.txtDatum  "" Then
If Check_Date(Me.txtDatum) = False Then
MsgBox "Geben Sie ein gueltiges Datum ein"
txtDatum = ""
Cancel = True
ElseIf IsError(CDate(Me.txtDatum)) Then
MsgBox "Das ist kein gueltiges Datum"
txtDatum = ""
Cancel = True
'Datum kleiner ist,
ElseIf CDate(Me.txtDatum) 


Function Check_Date(chkDate As String) As Boolean
Dim i As Byte
Dim tmp As String
'Nur damit es nachher kürzer zu schreiben ist :-)
tmp = chkDate
Select Case Len(tmp)
Case 10
'Format = 01.01.2007
'Prüfen ob Punkte richtig gesetzt sind
If Mid(tmp, 3, 1) = "." And Mid(tmp, 6, 1) = "." Then
'Monatsprüfun
Select Case Val(Mid(tmp, 4, 2))
'Monate prüfen
Case 1, 3, 5, 7, 8, 10, 12
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 4, 6, 9, 11
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 2
'Das Jahr 2000 Problem wird hier nicht berücksichtigt
'Kein Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) 0 Then
Check_Date = True
Exit Function
End If
'Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
End Select
End If
Case 9
'Format = 1.09.2007 oder 15.1.2007
'Prüfen ob Punkte richtig gesetzt sind
If Mid(tmp, 2, 1) = "." And Mid(tmp, 5, 1) = "." Then
'Monatsprüfung
Select Case Val(Mid(tmp, 3, 2))
'Monate prüfen
Case 1, 3, 5, 7, 8, 10, 12
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 4, 6, 9, 11
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 2
'Das Jahr 2000 Problem wird hier nicht berücksichtigt
'Kein Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) 0 Then
Check_Date = True
Exit Function
End If
'Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
End Select
End If
If Mid(tmp, 3, 1) = "." And Mid(tmp, 5, 1) = "." Then
'Monatsprüfung
Select Case Val(Mid(tmp, 4, 2))
'Monate prüfen
Case 1, 3, 5, 7, 8, 10, 12
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 4, 6, 9, 11
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 2
'Das Jahr 2000 Problem wird hier nicht berücksichtigt
'Kein Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) 0 Then
Check_Date = True
Exit Function
End If
'Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
End Select
End If
Case 8
'Format = 1.1.2007
'Prüfen ob Punkte richtig gesetzt sind
If Mid(tmp, 3, 1) = "." And Mid(tmp, 6, 1) = "." Then
'Monatsprüfung
Debug.Print Val(Mid(tmp, 4, 2))
Select Case Val(Mid(tmp, 4, 2))
'Monate prüfen
Case 1, 3, 5, 7, 8, 10, 12
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 4, 6, 9, 11
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 2
'Das Jahr 2000 Problem wird hier nicht berücksichtigt
'Kein Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) 0 Then
Check_Date = True
Exit Function
End If
'Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
End Select
End If
Case 6
'Format = 1.1.07
'Prüfen ob Punkte richtig gesetzt sind
If Mid(tmp, 2, 1) = "." And Mid(tmp, 4, 1) = "." Then
'Monatsprüfung
Select Case Val(Mid(tmp, 3, 1))
'Monate prüfen
Case 1, 3, 5, 7, 8, 10, 12
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 4, 6, 9, 11
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
Case 2
'Das Jahr 2000 Problem wird hier nicht berücksichtigt
'Kein Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) 0 Then
Check_Date = True
Exit Function
End If
'Schaltjahr
If Val(Left(tmp, 2)) >= 1 And Val(Left(tmp, 2)) Check_Date = True
Exit Function
End If
End Select
End If
Case Else
Check_Date = False
End Select
End Function


Kann mir jemand helfen?
Danke im Voraus
Grüße aus Berlin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kontrolle für unsinnige Datum-Eingaben
20.09.2007 12:35:00
Rudi
Hallo,
aus meiner Sicht alles überflüssig.

Private Sub txtDatum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler1
If CDate(txtDatum) 


Gruß
Rudi
Eine Kuh mach muh, viele Kühe machen Mühe.

AW: Kontrolle für unsinnige Datum-Eingaben
20.09.2007 12:55:43
Peter
Hallo Rudi,
1.
wenn man zufällig einen Punkt vergessen hat (z.B. 2009.2007) erkennt der Code den Fehler nicht.
2.
wenn man erst andere Textfelder ausfüllen möchte lässt der Code das nicht zu (txtDatum ist leer)
3.
schon im Textfeld (also schon in der Userform) soll das Datum im Format tt.mm.jj zusehen sein, es muss so nicht unbedingt so eingegeben werden aber beim verlassen der Textbox dieses Format annehmen.
Kannst du das noch einbauen?
Danke
Peter

Anzeige
AW: Kontrolle für unsinnige Datum-Eingaben
20.09.2007 19:44:00
Rudi
Hallo,
vielleicht so?

Private Sub txtDatum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler1
If txtDatum = "" Then Exit Sub
If Len(txtDatum) - Len(Replace(Replace(txtDatum, ".", ""), "/", "")) 


Gruß
Rudi
Eine Kuh mach muh, viele Kühe machen Mühe.

AW: Kontrolle für unsinnige Datum-Eingaben
21.09.2007 15:40:53
Peter
Hallo Rudi,
ist so schon sehr gut.
Punkt 3 funktioniert nur noch nicht.
Bekommst du das auch noch hin?
Gruß
Peter

AW: Kontrolle für unsinnige Datum-Eingaben
23.09.2007 14:41:00
Lars
Hi,
wenn du das Datum auswählen statt eingeben lässt, sparst du den ganzen Trödel.
mfg Lars

Anzeige
AW: Kontrolle für unsinnige Datum-Eingaben
24.09.2007 12:19:44
Peter
Hallo Lars,
hast du einen Code dazu der ohne den Befehl Date klarkommt?
Gruß
Peter

AW: Kontrolle für unsinnige Datum-Eingaben
24.09.2007 21:14:33
Lars
Hi,
wie jetzt, hast du meine Antwort nicht verstanden?
Lass das Datum z.B. aus dem Calendar, MonthView, DateTimePicker oder Combobox
auswählen, dann entfällt die ganze Prüfung.
mfg Lars

AW: Kontrolle für unsinnige Datum-Eingaben
25.09.2007 12:37:30
Peter
Hallo Lars,
auf den Rechnern auf denen die Datei laufen soll ist kein Accsess installiert also kein DateTimePicker-Steuerelement vorhanden.
Ich habs aber schon anders gelöst, danke für deine Hilfe.
Grüße aus Berlin

AW: Kontrolle für unsinnige Datum-Eingaben
20.09.2007 14:59:00
Peter
Hallo Peter
sieh dir einmal die Beispiel-Mappe an, vielleicht ist es das, was du suchst.
Gruß Peter
https://www.herber.de/bbs/user/46205.xls
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige