Eingabeformat des Felds Datum prüfen

Hallöchen,
ich möchte mein Programm ein wenig anwenderfreundlicher gestalten und deshalb bei der Eingabe im Feld Datum prüfen.

Also, wenn die Eingabe nicht dem Format „dd.mm.yyyy“ entspricht, soll eine Fehlermeldung erscheinen.

Ich dachte ich kann das in der Art und Weise realisieren:


Private Sub txtDatum_AfterUpdate()

If Not txtDatum = Format(Date, „dd.mm.yyyy“) Then

MsgBox „Die Eingabe muß folgendermaßen sein: dd.mm.yyyy“
txtDatum = Null
txtDatum.SetFocus
End If
End Sub

Das funktioniert aber leider nicht, weil er in dieser Prozedur prüft, ob das eingegebene Datum das heutige ist.

Hat jemand eine Idee, wie ich das machen kann???

Gruß

Sina

ich möchte mein Programm ein wenig anwenderfreundlicher
gestalten und deshalb bei der Eingabe im Feld Datum prüfen.

Sehr lobenswert! :wink:

Also, wenn die Eingabe nicht dem Format „dd.mm.yyyy“
entspricht, soll eine Fehlermeldung erscheinen.

Hm, also ich nehme an, daß Du ein Access-Formular hast, ein Textfeld enthält, welches an ein Tabellenfeld geknüpft ist, das den Typ Datum hat.
Dann brauchst Du eigentlich gar keinen Code. Alles, was Du machen mußt, ist folgendes:

  • Gehe in die Eigenschaften des Textfeldes.
  • Gib bei Daten / Eingabeformat ein: 90.90.0099;0;_
  • Bei Gültigkeitsmeldung schreibst Du Deine Fehlermeldung rein. (falsch, s.u.)
  • Gehe nun in die Tabelle und gucke, ob die Angaben in die Feld-Eigenschaften übernommen wurden. Sonst kannst Du sie dort ergänzen. Um die Hilfe zu konsultieren, drücke in der Zeile Eingabeformat ganz rechts auf die drei Pünktchen. Dann kommt der Assistent, der auch einen Hilfe-Knopf hat. Dort habe ich mir das „90.90.0099;0;_“ auch rausgezogen.

Wenn das Eingabeformat egal ist, dann überlasse es doch einfach Access, darauf zu achten, daß ein richtiges Datum eingegeben wird und lasse das Eingabeformat einfach weg. Wenn Du als Datentyp Datum/Zeit einstellst, wird es bei jeder Eingabe meckern, und zwar so, wie Du es bei Gültigkeitsmeldung definiert hast. … Ehm … ach nein. Das mit der Gültigkeitsmeldung ist falsch. Das geht nur, wenn Du eine Gültigkeitsregel definiert hast (z.B. >37328, was dann nur noch Daten ab morgen akzeptiert). Die 37328 kommt übrigens von MsgBox CLng(Date).

So. Nun noch der Tip, falls Du doch mit der Prozedur arbeiten willst:

Du brauchst das BeforeUpdate-Ereignis:

Private Sub DatumsTextbox\_BeforeUpdate(Cancel As Integer)
Dim dummy As String
 dummy = ""
 On Error Resume Next
 dummy = CDate(Text2.Text)
 On Error GoTo 0
 If dummy = "" Then
 MsgBox "Kein Datum!", vbCritical, "Fehler"
 Cancel = True
 End If 'dummy = ""
End Sub 'DatumsTextbox\_BeforeUpdate

Das funktioniert aber nur dann, wenn Du in der Tabelle als Datentyp „Text“ definiert hast, denn Access prüft die Eingabe offenbar noch bevor die Prozedur ausgeführt wird.

In der Ereignis-Routine wird nur versucht, die Eingabe in ein Datum zu übersetzen. Das „On Error“ verhindert dabei das Meckern, falls es nicht klappt. In diesem Falle bleibt „dummy“ allerdings leer (""). Anderenfalls wird das Datum reingeschrieben (z.B. „13.03.02“). Wenn „Cancel“ auf True gesetzt wird, wird das Update des Textfeldes abgebrochen. Man kommt also nur wieder raus, indem man was richtiges eingibt - kleiner Nachteil :wink:

Hilft Dir das weiter oder war das zu kompliziert?

Kristian

Sehr lobenswert . . .
Morgen schieße ich mir von hinten durch den Rücken in die Brust…

Gruß aus Finnland
Stpehan

Viel Spaß …

Morgen schieße ich mir von hinten durch den Rücken in die Brust…

Du wirst dann sicher hier im Forum berichten, wie Du es gemacht hast, damit wir es alle nachvollziehen können. Teile mir bitte mit, in welchem Brett ich es dann finde!

:wink:

Gruß aus Köln,
Kristian

PS: Hättest ruhig genauer sagen können, was Du meinst. Übrigens hat die Antwort dem Adressaten durchaus genützt.

IsDate macht das Leben einfacher…

Private Sub MeinFeld\_BeforeUpdate(Cancel as Integer)
 If Not Isdate(Me!MeinFeld) then
 MsgBox "Datum eingeben!"
 Cancel = True
 End if
end sub

Allein - wenn du dem Feld ein Datumsformat gibst, dann greift die Access-eigene Feldüberprüfung schon vorher zu - man kann sich’s also glatt schenken…

Gruß aus dem Norden
Reinhard Kraasch
(http://www.kraasch.de - Access Tipps & Tricks)

IsDate macht das Leben einfacher… Stimmt …
Stimmt, die IsDate-Funktion hatte ich ganz vergessen.
Naja. …wie ein Sieb :wink:

Allein - wenn du dem Feld ein Datumsformat gibst, dann greift
die Access-eigene Feldüberprüfung schon vorher zu - man kann
sich’s also glatt schenken…

Wie ich ja schon angemerkt hatte. Nachteil ist, daß man keine eigene Fehlermeldung definieren kann. Oder gibt´s da eine Lösung für?

Gruß aus dem Norden

Danke, zurück. Bin nächste Woche mal wieder oben.

Reinhard Kraasch
(http://www.kraasch.de - Access Tipps & Tricks)

Net schlecht. So´ne Tips-Liste wollte ich mir auch mal anlegen, weil ich die ganzen kleinen, aber oft nützlichen Routinchen, die ich mir mal gebastelt habe, oft selbst wieder vergesse :wink:

Solltest es vielleicht nicht alles unter den Titel „Access“ stellen, sondern gleich unter „VBA“, weil das meiste davon ja übertragbar ist.

Kristian