PDA

Vollständige Version anzeigen : flexible Datumseingabe mit und ohne Trennzeichen


stuz1
04.06.2012, 16:05
Hallo zusammen,

Ich habe die Anfrage eines Kunden dass er das Datum gerne sehr flexibel eingeben können möchte.....

Folgendes Ergebnis soll mit allen nachfolgenden EIngaben möglich sein: (wobei die ersten beiden ja nicht das Problem sind)

06.06.2012

"06.06.2012"
"06,06,2012"
"060612"

und am liebsten auch

"6612" [OK, diese Variante wäre dann die Kür, ist aber dann ja nur noch bastelei wenn der erste Teil realisiert ist. Müsste dann ja auch 61212 oder 12612 und solche Dinge abfangen...]

Ich versuche mit folgender Funktion die Benutzereinagbe Datum vor Aktualisierung des Textfeldes zu Formatieren. Aber: Ich bekomme die Meldung

"Das Makro oder die Funtkion, das bzw. die für dieses Feld einer der Eigenschaften VorAktualisierung oder Gültigkeitsregel zugeorndet ist, hinter Microsoft Access daran, die Daten in dem Feld zu speichern...

Ich nehme mal dass die Funktion erneut das Ereignis "VorAktualisierung aufruft"...., oder was passiert da? Kann ich die Benutzereingabe anders prüfen? Wenn ich das ganze in einem ungebundenen Feld abfrage und dann das Ergebnis der Funtkion erst in ein gebundenes Feld übergebe würde es gehen. Aber dann sage ich vorher dem Kunden dass es nicht, ich mache doch hier nichts von hinten durch die Brust ins Auge....

Greetings

Stefan


Public Function DatumGenerieren(ByVal StrEingang As String) As Date
Dim StrTag As String
Dim StrMonat As String
Dim StrJahr As String
Dim StrErgebnis As Date

If InStr(1, StrEingang, ".") Then
StrErgebnis = Format(StrEingang, "dd.mm.yyyy")
GoTo ExitHandle
End If

If InStr(1, StrEingang, ",") Then
StrErgebnis = Format(StrEingang, "dd.mm.yyyy")
GoTo ExitHandle
End If

If Len(StrEingang) = 6 Then

StrTag = Left(StrEingang, 2)
StrMonat = Mid(StrEingang, 3, 2)
StrJahr = Mid(StrEingang, 5, 2)
StrErgebnis = Format(StrTag & "." & StrMonat & "." & StrJahr, "dd.mm.yyyy")
Else
MsgBox "Kein gültiges Datum!"
Exit Function
End If

ExitHandle:
DatumGenerieren = StrErgebnis
Debug.Print StrErgebnis

End Function

gpswanderer
04.06.2012, 16:20
Hallo,
wenn Du ein echtes Datumsfeld hast, geht das meiner Meinung nach gar nicht. Das wird von Access sofort als ungültiges Datum erkannt und führt zur Fehlermeldung.
Ich denke Du benötigst ein weiteres (ungebundnenes) Feld (als Text) das dann die Eingaben prüft und erst nach erfolgreicher Prüfung und Umwandlung in ein richtiges Datum das richtige Datumsfeld füllt.

Marsu65
04.06.2012, 16:21
Hallo Stefan,
erstelle doch ein Eingabeformat für das Feld.
Z.B. "99.99.00;0;"
Dann brauchen die Punkte nicht eingegeben zu werden, entspricht also deiner Variante "060612".
Obwohl ich inzwischen immer vierstellige Jahreszahlen verwende, da das Jahr 2029 nicht mehr fern ist. ;)

Ansonsten lasse den User das Datum aus einem Kalenderpopup auswählen.

stuz1
04.06.2012, 16:53
Hallo und Danke Euch beiden....

Ja, das deckt sich mit meinen Erkenntnissen....

erstelle doch ein Eingabeformat für das Feld.
Z.B. "99.99.00;0;"
Dann brauchen die Punkte nicht eingegeben zu werden, entspricht also deiner Variante "060612".
Obwohl ich inzwischen immer vierstellige Jahreszahlen verwende, da das Jahr 2029 nicht mehr fern ist.

Das sind die bisher eingesetzten Lösungen.... aber der Kunde möchte sehr schnell, und sehr flexibel erfassen können... Da ich auch immer das Jahr 4-stellig verwende formatiere ich es vor der Ausgabe ja auch entsprechend... Deshalb muss auch zwigend die Eingabe "06.06.2012" weiter funktionieren... (Es soll ja auch noch alte Aufträge aus 1999 geben)...

Um das Problem aus meiner Sicht noch ein bisschen enger eingrenzen zu können müsste die Frage eigentlich so lauten:

Wie kann ich die Eingabe eines Benutzer in ein Textfeld abfangen und durch eine eigene ersetzen? Geht das überhaupt?

Das hier

Private Sub txtTest_BeforeUpdate(Cancel As Integer)

Me.txtTest.Value = "Hallo"

End Sub


führt zu einem Laufzeitfehler 2115.... :mad:

Josef P.
04.06.2012, 17:22
Hallo!

Ich stelle bei Datumsfeldern immer folgendes Format ein:
99.99.9999;0;_

Dann kann man 040612 oder 04062012 eingeben.

Nicht funktionieren wird: 4612 oder 462 ... wenn es die User auf diese Art eingeben wollen.

mfg
Josef

ebs17
04.06.2012, 17:29
Ein Textfeld (ist vom Typ Variant und) übernimmt den Datentyp des gebundenen Tabellenfeldes, bei ungebundenen Feldern ersatzweise von einem eingestellten Format (z.B. Datum, kurz).

Du kannst also nicht beliebige Texte in ein Datumsfeld eingeben, die Fehlermeldung ist schneller als Du mit irgendeiner Aktion reagieren könntest.

In ein oben beschriebenes Textfeld könntest Du "6.6" eintragen. das würde auf 06.06.2012 selbständig ergänzt. Für ein Jahr ungleich dem aktuellen Jahr müsste die Jahresangabe zusätzlich ergänzt werden.
Meine Anwender kommen damit bestens zurecht. Ein Doppelklick öffnet übrigens einen PopUp-Kalender, wie erwähnt auch recht vorteilhaft.

Marsu65
04.06.2012, 17:36
Hallo Stefan,

handelt es sich um ein
Einzel- oder Endlosformular?
Ist dieses gebunden / ungebunden?

Bei einem Einzelformular bleibt IMHO dann nur der Weg, wie von Klaus vorgeschlagen.

Auf der anderen Seite steh ich aber auch auf dem Standpunkt, dass der User "bewusst" ein Datum eingibt bzw. eingeben sollte und nicht irgendeine Zeichenfolge, die das System dann zu einem gültigen Datum umzuwandeln versucht. Damit wird schludrigen Fehleingaben Tür und Tor geöffnet.

Ich kenne diese Wünsche, einige mich dann i.d.R. auf ein Eingabeformat (innerhalb der Anwendung immer gleich) und gut ist.

Im Before_Update kann man die Eingabe auf ein gültiges Datum prüfen, und gegebenfalls mit einer MsgBox den User NETT darauf hinweisen, doch bitte ein solches einzugeben.

Als nächstes kommt dann die Datumseingabe per Voicebefehl? :D

BTW: Wenn das einzugebende Datum abzuschätzen ist, könnte man noch ein paar Schaltflächen um das Eingabefeld platzieren "Heute", "Morgen", "in 14 Tagen" ...

stuz1
04.06.2012, 17:49
Hallo @all,

Die Lösung von Josef erfüllt schon einmal die Pficht... an die 9 habe ich gar nicht gedacht... :-(

Das ist schon einmal perfekt....

@Eberhard:
Die Lösung ist natürlich auch Klasse.. wusste nicht dass das geht....

Genial wäre jetzt noch eine Kombination aus beiden Lösungen? Aber das geht vermutlich nicht? Bei der Formatierung 99.99.9999;0;_ muss mindestens noch eine Stelle des Jahres eingegeben werden... Schade... :mad:

@Marsu
Ja, ich weiß. es wird manches auf die Spitze getrieben... diese "Sondereingaben" müssen die Kunden eh ganz speziell in den Stammdaten extra "einschalten"... aber Datum per Voice-Befehl könnte ich mir vorstellen... lächel... ich schlage es dem Kunden mal vor.... Die Antwort kenne ich schon... ich gebe Ihm dann deine PN.... :grins:

Marsu65
04.06.2012, 17:55
Ich stelle bei Datumsfeldern immer folgendes Format ein:
99.99.9999;0;_

Dann kann man 040612 oder 04062012 eingeben.
Ich hoffe du bist 2029 in Rente und hast Wohnsitz únd Telefonnumern gewechselt :D

ebs17
04.06.2012, 18:08
@Marsu: Den Zeitraum, wo eine Eingabe 01.01.33 als 01.01.1933 interpretiert wird, kann man in den Regionaleinstellungen in der Systemsteuerung verschieben. Wenn man also überwiegend keine Datumswerte aus dem vergangenen Jahrtausend eingibt, wäre das sinnvoll.
In jedem Fall empfiehlt sich in der Formatierung aber eine vierstellige Jahreszahl, um die eigene Eingabe überprüfen zu können.

Marsu65
04.06.2012, 18:38
OT:
kann man in den Regionaleinstellungen in der Systemsteuerung verschieben.
Schaun wir mal ob Redmond oder sonst jemand dran denkt. ;)

IMHO wird 2030 das 2000 bezügl. Datum-Datenchaos übertreffen ;)

Thomas Möller
04.06.2012, 19:15
Hallo Axel!
Hallo Stefan!

Als nächstes kommt dann die Datumseingabe per Voicebefehl?

In meinen Augen denk ihr beide da noch viel zu konventionell. ;)

Das absolute Non-Plus-Ultra wäre doch das mentale Interface (http://www.heise.de/newsticker/meldung/Kraft-der-Gedanken-Fraunhofer-demonstriert-mentales-Interface-108065.html).
Einfach nur denken und schon ist die Eingabe getätigt.

SCNR

Thomas Möller
04.06.2012, 19:18
Hallo Axel!

IMHO wird 2030 das 2000 bezügl. Datum-Datenchaos übertreffen

Wenn alles gut geht, muss ich das nicht mehr im aktiven Arbeitsleben erleben. :grins:

CU

stuz1
04.06.2012, 19:22
Das absolute Non-Plus-Ultra wäre doch das mentale Interface.
Einfach nur denken und schon ist die Eingabe getätigt.


OK.... ich nehme es....

Muss ich dann überhaupt noch in die Firma oder geht das über IOS auch vom Golfplatz aus?

ebs17
04.06.2012, 19:26
Muss ich dann überhaupt noch in die Firma ...
Was willst Du in der Firma, wenn man Dein Programm nicht braucht, sondern alles passiert, was man sich so denkt.

stuz1
04.06.2012, 19:34
gute Frage..... :top:

Nach dem Motto: "Warum brauche ich beim Wahrsager einen Termin...."

Aber um das nicht ausarten zu lassen:

VIELEN Dank an alle die sich meinem kleinen Problem angenommen haben...

habe soeben das neue Update online gestellt. Die Kunden sollen sich selber aussuchen was ihnen am liebsten ist... ich habe in den Stammdaten die Möglichkeiten geschaffen das einzustellen.

Je nachdem wird beim Laden der Formulare über Form_Load

Me!txtDatumSowieso.InputMask

Das Eingabeformat nach Wunsch des Kunden zugewiesen.....

Somit setze ich diesen Thread also auf erledigt... MERCI!