3.2k Aufrufe
Gefragt in Tabellenkalkulation von tomschi Mitglied (879 Punkte)
Mahlzeit zusammen!

In der Eingabe einer Inputbox soll nur eine Datumseingabe möglich sein. Dabei ist jedoch zu beachten, dass das Datum z. B. als 20130212 und nicht 12.02.2013 eingegeben werden darf.
Daher ist wohl der Code "isDate(Eingabe)" nicht möglich, oder?

Hat jemand eine Idee, wie ich dies umsetzen könnte?

Ciao

Tom

7 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Halo Tom,.

das siehst Du richtig. du gibst ja eine Zahl. ein.

Gruß Hajo
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Tom,

Du könntest die Zahl zum String wandeln. Dann prüfst Du im ersten Schritt, ob der String genau acht Zeichen lang ist.
Wenn das schon stimmt, splittest Du ihn in drei Teilstrings mit 4, 2 und 2 Zeichen auf.
Die Zeichen kannst Du dann in umgedrehter Reihenfolge und mit Punkten dazwischen wieder zusammensestzen und die Abfrage isDate(NeuerString) darauf anwenden.

Gruß
computerschrat
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Guten morgen allseits!

Danke für die Rückmeldungen und Tipps.

Mein Code sieht nunmehr wie folgt aus, jedoch funktioniert die Prüfung des Datums nicht. Selbst wenn z. B. 20131350 eingegeben wird, wird dies nicht als falsches Datum erkannt.

nochmal01:
Do
var01 = Application.InputBox(prompt:="Bitte altes Durchführungsdatum eingeben.", Title:="Eingabe ALTES Durchführungsdatum", Default:="JJJJMMTT", Type:=1)

'Prüfung, ob die Eingabe eine Zahl ist
If VarType(var01) = vbBoolean Then GoTo Abbruch
'Prüfung der Länge der Eingabe
If Len(var01) <> 8 Then
MsgBox "Die Zahl muss aus acht Zeichen (JJJJMMTT) bestehen!" & vbLf & _
"", vbExclamation, "--> "
GoTo nochmal01
Else
'Prüfung, ob die Eingabe ein gültiges Datum ist
len01 = Left(var01, 4) 'Jahr
len02 = Mid(var01, 5, 2) 'Monat
len03 = Right(var01, 2) 'Tag

dathelp01 = len03 & "." & len02 & "." & len01
If Not IsDate(dathelp01) Then
MsgBox "Kein gültiges Datum!"
Exit Sub
End If
Exit Do
End If
Loop

Habe ich dabei etwas übersehen?

Ciao

Tom
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Tom,

das kann ich hier nicht nachvollziehen. Ich habe exakt Deinen Code kopiert, mit Sub und EndSub eingerahmt und noch die Sprungmarke Abbruch hinzugefügt. Wenn ich den Code ausführe und dann die 20131350 eingebe bekomme ich die vorgesehene Fehlermeldung.

ich habe unten nochmal den Code drangehängt. Du kannst ja nochmal vergleichen.

Gruß
computerschrat



Sub Datumseingabe()
nochmal01:
Do
var01 = Application.InputBox(prompt:="Bitte altes Durchführungsdatum eingeben.", Title:="Eingabe ALTES Durchführungsdatum", Default:="JJJJMMTT", Type:=1)

'Prüfung, ob die Eingabe eine Zahl ist
If VarType(var01) = vbBoolean Then GoTo Abbruch
'Prüfung der Länge der Eingabe
If Len(var01) <> 8 Then
MsgBox "Die Zahl muss aus acht Zeichen (JJJJMMTT) bestehen!" & vbLf & _
"", vbExclamation, "--> "
GoTo nochmal01
Else
'Prüfung, ob die Eingabe ein gültiges Datum ist
len01 = Left(var01, 4) 'Jahr
len02 = Mid(var01, 5, 2) 'Monat
len03 = Right(var01, 2) 'Tag

dathelp01 = len03 & "." & len02 & "." & len01
If Not IsDate(dathelp01) Then
MsgBox "Kein gültiges Datum!"
Exit Sub
End If
Exit Do
End If
Loop
Abbruch:
End Sub
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Hallo computerschrat!

Also, ich stehe total auf dem Schlauch.
Ich habe "Deinen" Code nochmals getestet und dabei folgendes festgestellt.
Eingabe 20303001 = wird irrtümlich als Datum erkannt
Eingabe 20303030 = wird richtigerweise als Fehler erkannt

Irgendwie mag mich der Code nicht.

Ciao

Tom
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Tom,

es ist offenbar so, dass die Funktion isdate sowohl die Darstellung Jahr.Monat.Tag, als auch die Darstellung mit Jahr.Tag.Monat akzeptiert.
Ich habe gerade mal probiert und gesehen, dass z.B. 20133004 akzeptiert wird, 20133104 nicht.
Ebenso geht 20130430 gut und 20130431 geht nicht. Also der 31. April ist tatsächlich kein Datum.
Das macht die Ergebnisse natürlich nicht eindeutig, wäre aber ein Ansatz, etwas selbst drumherum zu basteln.

Gruß
computerschrat
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Hallo zusammen!

Nach langem Kopfzerbrechen und Recherche im www habe ich folgende Lösung für mich gefunden:

Sub Datumseingabe()
Dim var01 As String
var01 = InputBox("Bitte altes Durchführungsdatum eingeben.")
If IsDate(var01) Then
If DateValue(var01) = var01 Then MsgBox "Alles okay."
Else
MsgBox "Kein gültiges Datum!"
End If
End Sub

Danke für die tolle Unterstützung und schönen Sonntag noch!

Tom
...