Hi Chris,
an diesem Problem habe ich mir vor Jahren auch schon die Zähne ausgebissen. Mein Fazit: Für Excel-Zellen ist das in zufriedenstellender Lösung einfach nicht möglich. Grund hierfür ist, dass das Ereignis Worksheet_Change erst nach der Eingabe aktiviert wird. Man könnte nun über die Value2-Eigenschaft die serielle Nummer auslesen dort die Punkte setzen und den neuen Wert per Makro in die Zelle eintragen. Das habe ich in meinem Projekt damals gemacht und hat auch geklappt. Problem: Wenn man dann doch mal ein Datum mit Punkten eingibt gibt es eine andere Serielle Nummer. Es gibt leier keine Möglichkeit zu Unterscheiden ob das Datum mit oder ohne Punkten in die Excel-Zelle eingegeben wird.
Du scheinst aber die Eingabe in eine Textbox zu machen. Da das Ergebnis in erster Linie als Text vorliegt und erst später in ein Datum umgewandelt wird, brauchst du hier in deinem AfterUpdate-Ereignis einfach nur mit Instr zu prüfen, ob ein Punkt enthalten ist. Wenn nicht, liest du die Zeichen für Tag Monat und Jahr mit Left Mid und Right aus und setzt sie mit Punkten neu zusammen.
Das ist simpel: Schreibe vor Else diese beiden Zeilen:
ElseIf InStr(txt_Datum1.Value, ".") = 0 And Len(txt_Datum1.Value) = 8 Then
txt_Datum1.Value = Left(txt_Datum1.Value, 2) & "." & Mid(txt_Datum1.Value, 3, 2) & "." & Right(txt_Datum1.Value, 4)
Falls du auch Eingaben mit weniger als 8 Zeichen machst, musst du entsprechend weitere ElseIf Befehle für 7, 6 und 5 Zeichen hinzufügen. Mit weniger als 5 Zeichen würde ich keine Eingaben ohne Punkt mehr machen, da das Datum dann nicht mehr eindeutig ist.
Gruß Mr. K.
|