Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1172to1176
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
Inhaltsverzeichnis

Überprüfung, ob Eingabe ein gültiges Datum ist

Überprüfung, ob Eingabe ein gültiges Datum ist
Krablix
Hallo zusammen,
ich möchte mittels VBA überprüfen, ob die Eingabe in einer Zelle ein gültiges Datum ist.
Beispiel:
In einer Zelle wird ein Datum in der Form TTMMJJ eingegeben (also ohne Punkt, Komma oder sonstwas) und mittels
ActiveCell.NumberFormat = "0#"".""?"".""""20""?"
in ein Datum mit der richtigen Schreibweise umgewandelt, also die Eingabe 250810 wird zu 25.08.2010. Das klappt soweit auch ganz gut.
Nun könnte es aber passieren, dass bei der Eingabe ein Fehler unterläuft, z.B. 321210 (32.12.2010) oder auch 290210 wird zu 29.02.2010 (der Februar hatte dieses Jahr nur 28 Tage).
Ich möchte nun diesem Code

Sub Datum_prüfen()
ActiveCell.NumberFormat = "0#"".""?"".""""20""?"
If IsDate(ActiveCell.Text) Then
Exit Sub
ElseIf (ActiveCell.Text) = "" Then
Exit Sub
Else
MsgBox ("Sie haben ein falsches Datum eingegeben!")
End If
End Sub

das Datum überprüfen und, wenn es sich nicht um ein gültiges Datum handelt (z.B. 32.12.2010), den User mittels Msg-Box darauf aufmerksam machen.
Allerdings klappt der Code nicht und ich weiß langsam nicht mehr, was ich noch machen soll/verändern muss, damit er läuft.
Um es noch einmal zu konkretisieren: Ich benötige einen Code, der die Zelleingaben nach deren Umformatierung in ein Datum überprüft und wenn es sich nicht um ein gültiges Datum handelt, dies mittels Msg-Box, mitteilt.
Sollte es auch andere Möglichkeiten geben, den User auf den Fehler aufmerksam zu machen, bitte sehr! Bin offen für alles :-)
Gruß
Krablix

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

Betreff
Benutzer
Anzeige
2 x Exit Sub scheint da der Grund
25.08.2010 08:24:05
Matthias
Hallo
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveCell.NumberFormat = "0#"".""?"".""""20""?"
If Not IsDate(Target.Text) Then
MsgBox ("Sie haben ein falsches Datum eingegeben!")
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
End Sub
Code in die entsprechende Tabelle
Evtl den Bereich noch festlegen, in dem das Change-Ereignis ausgelöst werden soll.
getestet mit XL2000
Gruß Matthias
AW: 2 x Exit Sub scheint da der Grund
25.08.2010 08:31:10
Krablix
Hi Matthias,
was soll ich noch sagen?
Danke für die superschnelle und perfekte Hilfe!
Gruß
Rolf
Anzeige
denk aber dran ...
25.08.2010 08:36:09
Matthias
Hallo
... das der Code in jeder Zelle der Tabelle angetoßen wird, in der Du etwas änderst.
Also schränke den Bereich noch ein, in dem das passieren soll.


im Übrigen lags nicht am Exit Sub
hier mal umgestrickt

Sub Datum_prüfen()
ActiveCell.NumberFormat = "0#"".""?"".""""20""?"
If IsDate(ActiveCell.Text) Then
Else
MsgBox ("Sie haben ein falsches Datum eingegeben!")
ActiveCell.ClearContents
End If
End Sub
Gruß Matthias
AW: denk aber dran ...
25.08.2010 08:46:43
Krablix
Hhhhmmmm, das mit dem Bereich habe ich soeben bemerkt.
Es soll sich nur um Zellen der Spalte A handeln. Ich müsste also sozusagen irgendwo sowas wie Range("A1:A10000") oder auch Range("A:A") einfügen, richtig?
Das mit dem umgestrickten Code muss ich mir in aller Ruhe mal anschauen.
Was mich an Deinem umgestrickten Code etwas stutzig macht ist, dass nach der Anweisung "Then" sofort die "Else"-Anweisung kommt...
Eigentlich müsste doch nach "Then" die Msg-Box angesprochen werden und dann die "Else"-Anweisung "Exit Sub" oder hab ich da einen Denkfehler?
Gruß
Rolf
Anzeige
AW: denk aber dran ...
25.08.2010 09:11:54
Krablix
Hab das mit der Einschräkung gefunden. Ich habe
If Target.Column = 1 Then
vorangestellt und es klappt.
Gruß
Rolf
Denkfehler ...
25.08.2010 09:22:20
Matthias
Hallo
Zitat
Eigentlich müsste doch nach "Then" die Msg-Box angesprochen werden und dann die "Else"-Anweisung "Exit Sub" oder hab ich da einen Denkfehler?
If IsDate(ActiveCell.Text) Then 'wenn Datum mach nix und gehe zu End if
Else'nächste Zeilen werden nur ausgeführt wenn kein Datum
MsgBox ("Sie haben ein falsches Datum eingegeben!")
ActiveCell.ClearContents
end if
Exit Sub bräuchtest Du nur (aber nicht zwinmgend), wenn noch mehr Code in der Prozedur steht
Gruß Matthias
Anzeige
AW: denk aber dran ...
25.08.2010 09:45:31
Krablix
Ja klaro, es sind halt die Feinheiten, die man gerne und schnell überliest, in dem Fall den Unterschied zwischen IF IsDate und If Not IsDate :-)
Darf ich Dich noch einmal bemühen?
Auch hieran versuche ich micht schon die ganze Zeit:
Wenn ich nun irrtümlich ein zwar korrektes, aber dennoch ungewolltes Datum eintrage und dieses lösche, kommt natürlich, wegen dem Change-Ereignis und die leere Zelle als nicht korrektes Datum interpretiert wird, die Msg-Box.
Man müsste dem Code sozusagen mitteilen, dass das manuelle Löschen einer Zelle keine Datumseingabe ist und somit die Msg-Box nicht erforderlich ist.
Wie gesagt, ich möchte dich nur noch einmal bemühen
Gruß
Rolf
Anzeige
setz noch ein If davor ...
25.08.2010 14:35:21
Matthias
Hallo
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Value  "" Then
ActiveCell.NumberFormat = "0#"".""?"".""""20""?"
If Not IsDate(Target.Text) Then
MsgBox ("Sie haben ein falsches Datum eingegeben!")
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
End If
End If
End Sub
Das mit dem Bemühen ist kein Problem ;o)
Gruß Matthias
AW: setz noch ein If davor ...
26.08.2010 10:14:44
Rolf
Hi Matthias,
danke für Deine Hilfe. Ich hab jetzt den für den gedachten Zweck perfekten Code.
Schönes Wochenende und bis dann mal wieder!
Gruß
Rolf
Anzeige

56 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige