Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
340to344
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
340to344
340to344
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

37.12.04 ->>> FALSCHES DATUM MELDEN!

37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:16:35
Dante
Hallo Ihr Excel-Könner,

ich stehe vor dem Problem, dass Excel z.B. den 37.12.03 oder den 44.03.04 als richtigs Datum erkennt.
Ich dachte, dass ich mit IsDate() dir Richtigkeit von Datum checken könnte, aber es funktioniert nicht.

Gibt es eine andere Funktion, die die Plausibilität eines Datums überprüft?!

Vielen Dank Euch allen - Dante

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:24:03
hecht
Ich weiß ja nicht wozu die Kontrolle dient, jedoch kann man über die Menüleiste in "Daten\Gültigkeit" eine Datumseingabe festlegen und wenn diese nicht eingehalten wird kann eine Fehlermeldung gerneriert werden...
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:38:19
Dante
Hey "hecht",

das wird leider nicht funktionieren, da ich die Überprüfung dynamisch ausführen muss...
Ist brauche also irgendeinen Datumscheck in VBA!

Hast Du noch ne Idee?

Gruß,
Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:24:17
Gert Seler
Hallo Tante,
kontrolliere erst einmal das Format der Zellen, warscheinlich sind die Zellen
mit Text formatiert.
mfg
Gert
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:36:21
Dante
Hallo Gert,

nein, die Zellen sind formatiert: Benutzerdefiniert TT.MM.JJJJ
Ist das nicht eindeutig ein Datum?
Bzw. müsste IsDate() hier nicht funktionieren??

Gruß,
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:35:23
M@x
Hi Dante,
ein derartig falsches Datum wandelt Excel automatisch in tEXT UM;
man könnte zBsp eine abfrage mit ISTZAHL() machen

Gruss

M@x
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:40:28
Dante
Hallo M@x,

aber was macht istZahl() mit z.B. 34.14.2005 ?
Bzw. was sagt mir dann das Ergebnis?

Gruß,
Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:50:28
M@x
Hi Dante,
das Ergebnis ist "falsch", d.h. keine Zahl uns somit kein reales Datum,
man kann das ja über die Wennabfrage mit entsprechendem Text "Bitte Datum richtig eingeben" koppeln.
Das Prinzipielle Manko bdieser Fehlerabfrage: wenn du statt 31.12.2003 zBsp 30.11.2004 eingibst , wird das natürlich nicht als Falscheingabe erkannt

Gruss

M@x
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:59:50
Dante
Hallo M@x,

1) ist istZahl() das gleiche wie isNumeric() (ich hab die englische Version...)
2) wenn ja, dann funktioniert das leider nicht, denn richtige Daten z.B. 12.03.2004 werden nicht als Zahl erkannt

Dante...
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 17:00:06
M@x
Hi Dante,
mit der engl Version kenn ich mich nicht asu.
füer Excel ist ja intern ein Datum eine fortlaufende Zahl.
und sofern ein richtiges Datum kein Text ist, funktioniert das mit ISTZAHL() bei mir.
schau mal ob du das Datum überhaupt als Zahl formaatieren kannst, da ergibt der 31.12.2003 37986 sofern du Datumbasis 1.1.1900 hast

Gruss

M@x
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:40:33
Dante
Hallo M@x,

aber was macht istZahl() mit z.B. 34.14.2005 ?
Bzw. was sagt mir dann das Ergebnis?

Gruß,
Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:41:22
Nayus
Hi,
das Problem taucht auf, wenn in einer Zelle, die nicht als Datum formatiert ist so ein ungültiges Datum eingetragen wird. Hier wird dann eine Datumzahl generiert.
Da kann man sich mit Hilfe der folgenden Prüfung behelfen.
Ist die Zelle schon mit einem Datumsformat versehen, funktioniert auch isDate().

Viel Erfolg,
Nayus


Sub pruefe_datum()
' Teste A6 (unformatierte Zelle, die z.B. 32.12.04 enthält)
If Format(Sheets("Sheet1").Cells(6, 1), "dd.mm.yyyy") = _
CStr(Day(Sheets("Sheet1").Cells(6, 1))) & "." & _
CStr(Month(Sheets("Sheet1").Cells(6, 1))) & "." & _
CStr(Year(Sheets("Sheet1").Cells(6, 1))) Then
MsgBox "Datum"
Else
MsgBox "kein Datum"
End If
End Sub

Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:02:30
Dante
Hallo Nayus,

die Zellen sind alle formatiert als Datum (Benutzerdefinert: TT.MM.YYYY), aber isDate() liefert mir trotzdem für alle meine Testwerte (z.B. 33.18.04 oder 12.56.2003 ...)FALSE zurück.

... Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:08:26
Nayus
Hi Dante,
FALSE ist ja auch richtig! Das ist kein Datum.
Gruß,
Nayus
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:16:21
Dante
... hab mich verschrieben... tschuldige...

Es wird bei falschen Werten TRUE zurückgegeben, obwohl die Zellen als Datum (Benutzerdefiniert TT.MM.JJJJ) formatiert sind?!

Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:33:56
Nayus
Hi,
also bei mir funktioniert das.
Testfall:
1. Zelle, Datim 31.12.2003
Zelle formatiert (TT.MM.JJJJ)

Autofüllen über die nächsten Zellen
Datum in einer Zelle auf 32.12.2003 geändert

In benachbarter Spalte folgende Funktion aufgerufen mit dem Datum als Argument.
Ergebnis: Für alle gültigen Datumswerte => TRUE , 32.12.2003 => FALSE


Function pruefe_datum(pval As Variant) As Boolean
Dim l_ret As Boolean
l_ret = False
If IsDate(pval) Then
l_ret = True
End If
pruefe_datum = l_ret
End Function


Verstehe nicht, warum das bei Dir nicht klappt (amkopfkratz***)

Gruß,
Nayus
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:45:52
Dante
Hallo...

das hier ist ist mein Code:
-----------------------------------------------------------------------------------------
If IsDate(Cells(a, b)) Then
MsgBox Cells(a, b) & "ist Datum"
Else
MsgBox "Fehlerhaftes Datum in Zeile " & a & " , Spalte: " & Cells(2, b) & "." & Chr(13) & "Das Datum ist falsch formatiert oder nicht existent."
Exit Sub
End If
-----------------------------------------------------------------------------------------

Die Zellen über die die Schleife läuft sind w.g. formatiert.
Format TT.MM.YYYY
Wenn jetzt ein Datum eingegeben wird, die Jahreszahl allerdings nur 2-stellig ist, dann erkennt Excel das und ergänzt die Jahreszahl (20.12.03 -> 20.12.2003)

Wenn ich aber ein falsches Datum (34.15.03) eingebe, dann merkt Excel schon, dass irgendwas nicht stimmt, denn es wird nichts geänder und bleibt so in der Zelle stehen.
IsDate(Zelle in der der falsche Wert steht) liefert aber trotzdem TRUE ?!

Ich weiß echt nicht weiter...
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 16:11:01
Andreas Rost
Hallo Dante,

du hast in deinen Programm, nicht nach den Wert gefragt.

die 1.Zeile sollte so lauten:
If IsDate(Cells(a, b).value) Then

gruss

Andreas
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 16:45:08
Dante
Hallo Andreas,

mit der .Value - Ergänzung ändert sich leider gar nichts... Der 35.16.03 ist immer noch ein gültiges Datum - hurra....

Trotzdem danke,
Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:55:00
Thomas Ramel
Grüezi Dante

IsDate() funktioniert nur korrekt, wenn die Jahreszahl 4-stellig angegeben wird; ansonsten kann es pssieren, dass aus ja nch Kombination von Tag/Monat/Jahr eine andere Zusammensetzugn generiert wird, die zufällig wieder ein Datum ist.
Ich habe mich unlängst mit diesem Phänomen auseinandergesetzt und auch festgestellt, dass unterschiedliche Ländereinstllungen ebenfalls eine Rolle spielen.
Daher habe ich mit anderen zusammen die folgende Funktin entwickelt, die für alle deutschen Ländereinstllungen funktionieren müsste:



Public Function IstDatum(strDatum As String) As Boolean
'ab xl97
Dim intTag     As Integer
Dim intMonat   As Integer
Dim intJahr    As Integer
Dim strDelim   As String
Dim AWF        As WorksheetFunction
Set AWF = Application.WorksheetFunction
On Error GoTo Errorhandler
If VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, ".", "")) = 2 Then
strDelim = "."
ElseIf VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, "-", "")) = 2 Then
strDelim = "-"
ElseIf VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, "/", "")) = 2 Then
strDelim = "/"
Else
'IstDatum = False
Exit Function
End If
intTag = CInt(VBA.Left(strDatum, InStr(1, strDatum, strDelim) - 1))
intMonat = CInt(VBA.Mid(strDatum, InStr(1, strDatum, strDelim) + 1, InStr(InStr(1, strDatum, strDelim) + 1, strDatum, strDelim) - InStr(1, strDatum, strDelim) - 1))
intJahr = CInt(VBA.Mid(strDatum, InStr(InStr(1, strDatum, strDelim) + 1, strDatum, strDelim) + 1, 4))
If intMonat > 12 Then Exit Function
IstDatum = Month(DateSerial(intJahr, intMonat, intTag)) = Month(DateSerial(intJahr, intMonat, 1))
Errorhandler:
'Da im Falle eines Fehlers Istdatum nicht 'Wahr' sein kann, reicht es einfach ans Ende der Sub zu springen ;-)
End Function


Code eingefügt mit: Excel Code Jeanie

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:11:17
Dante
Hallo Thomas,

danke für diese zweifelsfrei tolle Fuktion...
mein Problem ist leider, dass die Datums nicht als String formatiert sein dürfen, da schon zu viele andere Makros mit diesen Datumswerten rechnen...

Ich brauche leider eine Abfrage, die sowas macht wie:
Nehme den Wert und speichere die Zahlen zwischen den Punkten in den Variablen Tag, Monat, Jahr. Dann könnte ich mir die Abfrage irgendwie basteln.
Zwar umständlich, da ja die ganzen 28./29./30./31.-Problematik abgefragt werden müsste aber funktionieren würde es zumindest...

Sowas hast du nicht zufällig auch in petto ??

Trotzdem nochmal danke für die Funktion!

Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
26.11.2003 09:03:49
Thomas Ramel
Grüezi Dante

Dann wandle das Datum für die Prüfung in einen String um.
Wie greifst Du im Moment auf das Datum zu?
Eine Textbox?
Eine Tabellenzelle?

Istdatum(Range("A1").Text)

...kann schon genügen

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 19:45:34
bernhard
hallo dante,
die einfachste variante wäre wohl, die worksheetfunktion zu verwenden, zb:


Sub dat()
a = 1: b = 1: stdtxt = " kein " 'Datum steht in A1
If WorksheetFunction.IsNumber(Cells(a, b)) Then stdtxt = " ein "
MsgBox "Zelle " & UCase(Chr(64 + b)) & a & " ist" & stdtxt & "Datum!"
End Sub


mfg
bernhard
Anzeige

246 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige