37.12.04 ->>> FALSCHES DATUM MELDEN!

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
TextBox MsgBox
Bild

Betrifft: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 14:16:35

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

Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: hecht
Geschrieben am: 25.11.2003 14:24:03

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...


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 14:38:19

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Gert Seler
Geschrieben am: 25.11.2003 14:24:17

Hallo Tante,
kontrolliere erst einmal das Format der Zellen, warscheinlich sind die Zellen
mit Text formatiert.
mfg
Gert


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 14:36:21

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: M@x
Geschrieben am: 25.11.2003 14:35:23

Hi Dante,
ein derartig falsches Datum wandelt Excel automatisch in tEXT UM;
man könnte zBsp eine abfrage mit ISTZAHL() machen

Gruss

M@x


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 14:40:28

Hallo M@x,

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

Gruß,
Dante


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: M@x
Geschrieben am: 25.11.2003 14:50:28

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 14:59:50

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...


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: M@x
Geschrieben am: 25.11.2003 17:00:06

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 14:40:33

Hallo M@x,

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

Gruß,
Dante


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Nayus
Geschrieben am: 25.11.2003 14:41:22

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



Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 15:02:30

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Nayus
Geschrieben am: 25.11.2003 15:08:26

Hi Dante,
FALSE ist ja auch richtig! Das ist kein Datum.
Gruß,
Nayus


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 15:16:21

... hab mich verschrieben... tschuldige...

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

Dante


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Nayus
Geschrieben am: 25.11.2003 15:33:56

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 15:45:52

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Andreas Rost
Geschrieben am: 25.11.2003 16:11:01

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 16:45:08

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Thomas Ramel
Geschrieben am: 25.11.2003 14:55:00

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]


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Dante
Geschrieben am: 25.11.2003 15:11:17

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


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: Thomas Ramel
Geschrieben am: 26.11.2003 09:03:49

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]


Bild


Betrifft: AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
von: bernhard
Geschrieben am: 25.11.2003 19:45:34

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


Bild

Beiträge aus den Excel-Beispielen zum Thema " Eine Variable ausdrucken"