Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
552to556
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
552to556
552to556
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
IsDate("01.25.05")=Wahr ...warum dieses?
25.01.2005 00:04:11
Oberschlumpf
Hallo Leute
Warum gibt die Isdate-Funktion ein WAHR zurück, wenn dieses Datum überprüft wird:
01.25.05
Im Debugmodus wird daraus ein "25.01.05".
Wenn ich dieses Datum überprüfen lasse:
25.01.05
dann wird im Debugmode nicht ein "01.25.05" draus, sondern es bleibt das "25.01.05".
Ich möchte Datumseingaben überprüfen, daher das oben falsche Datum.
Beim schnellen Tippen passiert so etwas schon mal, und das möchte ich halt mit der IsDate-Funktion unterbinden.
Vielen Dank für Eure Ideen.
Ciao
Thorsten

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IsDate("01.25.05")=Wahr ...warum dieses?
25.01.2005 00:11:12
Josef
Hallo Thorsten!
"01.25.05" wird dabei von Excel als Datum in Amerikanischer Schreibweise
erkannt und daher ergibt "IsDate()" wahr!
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: IsDate("01.25.05")=Wahr ...warum dieses?
Oberschlumpf
Hi Josef
Danke für Deinen Hinweis.
Das hatte ich mir schon gedacht, mit Ami-Datum und so.
Vielleicht hätte ich mehr darauf hinweisen sollen, dass ich nicht nur wissen möchte, woran es liegt, dass der falsche richtige IsDate-Wert zurück gegeben wird, sondern dass ich auch wissen möchte, wie ein Datum in deutscher Schreibweise auch als solches behandelt wird ;-)
Trotzdem vielen Dank.
Ciao
Thorsten
Anzeige
Und jetzt noch die Abhilfe:
Boris
Hi Thorsten,
Option Explicit

Sub datum_oder_nicht()
Dim str As String
str = "25.01.2005"
MsgBox CStr(DateValue(str)) = str 'WAHR
str = "01.25.2005"
MsgBox CStr(DateValue(str)) = str 'FALSCH
End Sub

Grüße Boris
Das CStr kann übrigens entfallen...oT
Boris
AW: Und jetzt noch die Abhilfe:
Oberschlumpf
Hi Boris
und....vielen Dank!
Ja ja...die anderen "Datums-Funktionen" gibt es ja auch noch :-)
Ich wusste, ich war der Lösung schon ganz nah....aber trotzdem nich nah genug, dass ich es allein geschafft hätte ;-)
Thx & Bye
Thorsten
AW: Und jetzt noch die Abhilfe:
25.01.2005 01:39:27
Oberschlumpf
Hi Boris
Hab mich leider zu früh gefreut.
Dein Bsp vergleicht nur 2 Werte miteinander.

str = "25.01.2005"
MsgBox CStr(DateValue(str)) = str
bedeutet mit eingetragenen Werten
MsgBox CStr(DateValue("25.01.05")) = "25.01.05"
"25.01.05"           = "25.01.05" 'ergibt Wahr
str = "01.25.2005"
MsgBox CStr(DateValue(str)) = str
bedeutet mit eingetragenen Werten
MsgBox CStr(DateValue(01.25.05)) = "01.25.05"
"25.01.05"         = "01.25.05" 'ergibt Falsch
Weil auch DateValue für uns "falsche" Datumseingaben als amerikanisches Datum erkennt.

Hat vielleicht noch jemand eine Idee?
Danke, Gute Nacht & Tschüss
Thorsten
Anzeige
AW: Und jetzt noch die Abhilfe:
Luschi
Hallo Thorsten,
ich teste Usereingaben bzw. Variablentypen mit der Funktion varType:
dim v as variant, n as long
v = activesheet.range("A5")
if VarType(st) vbDate then
msgbox "Eingabe ist kein gültiges Datum!"
end if
Gruß von Luschi
aus klein-Paris
AW: Und jetzt noch die Abhilfe:
g
So gehts:
'Anwendung der

Function DatumGetestet z.B.:

Sub DatumTest_Demo()
Dim xText$ 'Dein text den du testen willst
xText = "29.02.04"
If Not DatumGetestet(xText) = False Then
'hier werden auch Datumsangaben wie "5.6.03" zugelassen
'deshalb wird dein xText In dein gewünschtes Format gebracht:
xText = Format(DatumGetestet(xText), "dd.mm.yyyy")
'So kannst du noch testen ob es kein Datum In der Zukunft ist
If CDate(xText) > Now Then
MsgBox "unzulässiges Datum In der Zukunft!"
End If
Else
MsgBox "Falsches Datum!"
End If
End Sub



Function DatumGetestet(xDatum$) 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(xDatum$) Then
Select Case xDatum$
Case Format(CDate(xDatum$), "d/m/yy"), _
Format(CDate(xDatum$), "d/m/yyyy"), _
Format(CDate(xDatum$), "d/mm/yy"), _
Format(CDate(xDatum$), "d/mm/yyyy"), _
Format(CDate(xDatum$), "dd/m/yy"), _
Format(CDate(xDatum$), "dd/m/yyyy"), _
Format(CDate(xDatum$), "dd/mm/yy"), _
Format(CDate(xDatum$), "dd/mm/yyyy")
DatumGetestet = CDate(xDatum$)
End Select
End If
End Function

Anzeige
AW: Und jetzt noch die Abhilfe:
Oberschlumpf
Hallo g
Thx...und...es funzt! :-)
Aber ich verstehe Deine Lösung (noch) nicht.
Wenn ich
xText = "01.25.05"
verwende, wird in in der Prüfung in CDate im Debug-Modus immer der Wert 25.01.05 zurück gegeben, aber trotzdem als FALSCH erkannt, was ja RICHTIG ist ;-)
Aber warum?
Du musst nicht antworten, wenn Du für lange Erklärungen keine Lust hast, würde mich aber freuen.
Thx & Bye
Thorsten
AW: Und jetzt noch die Abhilfe:
Oberschlumpf
Hi Luschi
Vielen Dank.
Aber leider komm ich mit Deiner Lösung auch nicht weiter.
Denn die Datumseingabe von z Bsp "01.25.05" wird mit vbDate intern auch als AMI-Format gedeutet und aus 01.25.05 wird 25.01.05 und dann natürlich als richtig befunden.
Ciao
Thorsten
Anzeige
Ich versteh dein Problem nicht...
Boris
Hi Thorsten,
Option Explicit

Sub datum_oder_nicht_teil2()
Dim strDatum As String
strDatum = InputBox("Bitte geben Sie ein Datum ein")
If IsDate(strDatum) And DateValue(strDatum) = strDatum Then
MsgBox "Alles o.k."
Else
MsgBox "Kein gültiges Datum"
End If
End Sub

Grüße Boris
AW: Ich versteh dein Problem nicht...
Oberschlumpf
Hallo Boris
Habe Deinen 2. Teil getestet und dieser Code funktioniert nun auch bei mir.
Dein 1. Teil gab, wie erwähnt, keinen Fehler zurück, wenn ich als Datum "01.25.05" vorgab.
Oder vielleicht habe ich Deinen 1. Code auch falsch bei mir eingefügt.
Danke für Deine Hilfe.
Ciao
Thorsten
Anzeige
Um noch Fehler abzufangen...
Boris
Hi Thorsten,
...muss übrigens noch die DateValue-Abfrage in die IsDate-Abfrage eingebettet werden - dann fliegt der Code bei - z.B. - Texteingaben auch nicht ab:
Option Explicit

Sub datum_oder_nicht_teil2()
Dim strDatum As String
strDatum = InputBox("Bitte geben Sie ein Datum ein")
If IsDate(strDatum) Then
If DateValue(strDatum) = strDatum Then MsgBox "Alles o.k."
Else
MsgBox "Kein gültiges Datum"
End If
End Sub

Grüße Boris

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige