Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1840to1844
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

Keypress - Datumsformat

Keypress - Datumsformat
03.08.2021 13:38:38
Andreas
Hallo alle zusammen,
mit meiner Uhrzeiteingabe bin ich soweit durch. Ich würde nun noch gerne - so habe ich es schon beim Datum (siehe nachfolgender Code) - den gleichen Aufbau bei der Eingabe für das Datum verwenden, so dass er mir automatisch die Punkte setzt. Am Ende soll das Format dd.mm.yyyy in der Textbox stehen.
Kann mich da noch jemand unterstützen?
Dankeschön

Private Sub Textbox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Eingabebeschränkung Textbox Uhrzeit mit autom. Doppelpunkt
'Format hh:mm
Select Case Len(TextBox2)
Case 0
Select Case KeyAscii
Case 48 To 50
Case Else
KeyAscii = 0
End Select
Case 1
If Left(TextBox2, 1) = 2 Then
Select Case KeyAscii
Case 48 To 51
Case Else
KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End If
Case 2
Select Case KeyAscii
Case 48 To 53, 58
If KeyAscii  58 Then TextBox2 = TextBox2 & ":"
Case Else
KeyAscii = 0
End Select
Case 3
If Right(TextBox2, 1) = ":" Then
Select Case KeyAscii
Case 48 To 53
Case Else
KeyAscii = 0
End Select
End If
Case 4
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
Case Else
KeyAscii = 0
End Select
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Keypress - Datumsformat
03.08.2021 13:44:21
Andreas
Ich habe noch diesen Code gefunden, allerdings macht er da die Punkte nicht automatisch:

Private Sub txb_datum_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case Len(txb_datum)
Case 0
Select Case KeyAscii
Case 48 To 51
Case Else
KeyAscii = 0
End Select
Case 1
If Clng(txb_datum) > 2 Then
Select Case KeyAscii
Case 48, 49
Case Else: KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 57
Case Else: KeyAscii = 0
End Select
End If
Case 2, 5
Select Case KeyAscii
Case 44, 46, 47: KeyAscii = 46
Case Else: KeyAscii = 0
End Select
Case 3
Select Case KeyAscii
Case 48, 49
Case Else: KeyAscii = 0
End Select
Case 4
If Clng(Mid(txb_datum, 4, 1)) = 0 Then
Select Case KeyAscii
Case 48 To 57
Case Else: KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 50
Case Else: KeyAscii = 0
End Select
End If
Case 6 To 10
Select Case KeyAscii
Case 48 To 57
Case Else: KeyAscii = 0
End Select
Case Else: KeyAscii = 0
End Select
End Sub

Anzeige
AW: Keypress - Datumsformat
03.08.2021 13:50:26
oraculix
hi
Versuch das mal

Private Sub Textbox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Eingabebeschränkung Textbox Uhrzeit mit autom. Doppelpunkt
'Format hh:mm
Select Case Len(TextBox2)
Case 0
Select Case KeyAscii
Case 48 To 50
Case Else
KeyAscii = 0
End Select
Case 1
If Left(TextBox2, 1) = 2 Then
Select Case KeyAscii
Case 48 To 51
Case Else
KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End If
Case 2
Select Case KeyAscii
Case 48 To 53, 58
If KeyAscii  58 Then TextBox2 = TextBox2 & ":"
Case Else
KeyAscii = 0
End Select
Case 3
If Right(TextBox2, 1) = ":" Then
Select Case KeyAscii
Case 48 To 53
Case Else
KeyAscii = 0
End Select
End If
Case 4
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
Case Else
KeyAscii = 0
TextBox2.Text = Format(TextBox1.Text, "DD.MM.YYYY ")
End Select
End Sub
Gruß
Oraculix
Anzeige
AW: Keypress - Datumsformat
03.08.2021 13:55:39
Andreas
Scheint noch nicht ganz zu laufen.. Aber DANKE erstmal... das geht schon in die richtige Richtung. Beim Datum (nach dem 2. Punkt - ich hab Punkte anstatt : draus gemacht) springt er mir nach der ersten Zifferneingabe des Jahres Jjjj gleich auf 2021_ und ein Leerzeichen
AW: Keypress - Datumsformat
03.08.2021 13:57:55
oraculix
TextBox2.Text = Format(TextBox2.Text, "DD.MM.YYYY ")
Sorry war mein Fehler überschreib das mal
Gruß
Oraculix
AW: Keypress - Datumsformat
03.08.2021 14:02:09
Andreas
Leider kann ich immer kein Jahr eingeben. Der schreibt mir automatisch 2021_ rein, nach den Monatszahlen. Ich weiss es ja nicht genau, aber müsste der Code nach Case 4 nicht noch weitergehen für Case5-10?
Anzeige
AW: Lade mal deine Mappe hoch
03.08.2021 14:07:30
oraculix
Lade mal deine Mappe hoch .
Und versuche nochmal zu beschreiben was du genau möchtest!
Gruß
Oraculix
AW: Lade mal deine Mappe hoch
03.08.2021 14:13:57
Andreas
Ich möchte quasi genau wie im zweiten Code, den ich gepostet habe, dass ich für mein Textfeld das Datum einigermaßen vorgegeben bekomme.
Dh während des Drückens der Tasten soll das Ereignis (Keypress) nur Zahlen zulassen. Nach der EIngabe der ersten beiden Ziffern für DD soll er automatisch einen Punkt setzten, dann wieder nur zwei Ziffern für MM zulassen, dann wieder Punkt automatisch setzen, dann die nächsten vier Ziffern für YYYY zulassen.
Somit kann auch ohne ein . auf der Tastatur das Datum als Zahl eingeben werden.
Der Code hier macht genau das, nur macht er mir nicht automatisch die Punkte:

Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case Len(TextBox1)
Case 0
Select Case KeyAscii
Case 48 To 51
Case Else
KeyAscii = 0
End Select
Case 1
If CLng(TextBox1) > 2 Then
Select Case KeyAscii
Case 48, 49
Case Else: KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 57
Case Else: KeyAscii = 0
End Select
End If
Case 2, 5
Select Case KeyAscii
Case 44, 46, 47: KeyAscii = 46
Case Else: KeyAscii = 0
End Select
Case 3
Select Case KeyAscii
Case 48, 49
Case Else: KeyAscii = 0
End Select
Case 4
If CLng(Mid(TextBox1, 4, 1)) = 0 Then
Select Case KeyAscii
Case 48 To 57
Case Else: KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 50
Case Else: KeyAscii = 0
End Select
End If
Case 6 To 10
Select Case KeyAscii
Case 48 To 57
Case Else: KeyAscii = 0
End Select
Case Else: KeyAscii = 0
End Select
End Sub

Der erste gepostete Code macht genau das, was ich möchte - aber leider nur für die Uhrzeit!
Anzeige
AW: Lade mal deine Mappe hoch
03.08.2021 14:16:06
Andreas
Kann leider gerade keine Mappe hochladen, da im Geschäft nicht möglich...
AW: Lade mal deine Mappe hoch
03.08.2021 15:30:18
Andreas
Ich stell den Beitrag nochmal auf offen. Vielleicht hat jemand noch eine passende Idee für mich.
LG
AW: Keypress - Datumsformat
03.08.2021 16:26:37
Daniel
Hi
eigentlich sollte es mit dieser Vorgabe kein Problem sein das anzupassen.
du musst halt nur die zulässigen Zahlen an der jeweiligen Position anpassen und die Positionen der Jahreszahlen hinzufügen (kannst du ja aus dem Code ablesen wie das funktioniert) und den ":" durch "." ersetzen.
Sollte nicht nicht so schwer sein, die Beispielcodes sind ja vorhanden.
ich habe das mal etwas anders gelöst und die nichstsagenden ASCII-Codes im Code durch die sprechenden Zeichen ersetzt.
Außerdem habe ich das Anfügen der Trennzeichen in ein das KeyUp-Event ausgelagtert, dann kann es sofort stattfinden wenn das Zeichen eingefügt wurde.
Weiterhin orientiere ich mich hier an der Position des Cursors (SelStart) um die zulässigen Ziffern zu ermitteln.
die ganze Restriktion funktioniert nur, wenn du die Werte fortlaufend tippst. Platzierst du den Cursor innerhalb vom Text, dann gibt es keine Einschränkung.
ich habe den Code für eine ActiveX-Textbox im Tabellenblatt geschrieben.
Sollte er in einer Userform laufen, kann es ggf sein dass einige Begriffe anders lauten (ich vermute mal SelStar = SelPos)

Private Sub Textbox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim T As String
T = Chr(KeyAscii)
With TextBox2
If .SelStart = Len(.Text) Then
Select Case .SelStart
Case 0
If Not T Like "[0-3]" Then KeyAscii = 0
Case 1
Select Case Mid(.Text, 1, 1)
Case "3"
If Not T Like "[01]" Then KeyAscii = 0
Case "1", "2"
If Not T Like "[0-9]" Then KeyAscii = 0
Case "0"
If Not T Like "[1-9]" Then KeyAscii = 0
End Select
Case 3
If Not T Like "[01]" Then KeyAscii = 0
Case 4
Select Case Mid(.Text, 4, 1)
Case "1"
If Not T Like "[0-2]" Then KeyAscii = 0
Case "0"
If Not T Like "[1-9]" Then KeyAscii = 0
End Select
Case 8
If Not T Like "[0-2]" Then KeyAscii = 0
Case 9
If Not T Like "[0-9]" Then KeyAscii = 0
Case Else
KeyAscii = 0
End Select
End If
End With
End Sub

Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox2
If .SelStart = Len(.Text) Then
Select Case KeyCode
Case 48 To 57, 96 To 105
Select Case .SelStart
Case 2
.Text = .Text & "."
Case 5
.Text = .Text & ".20"
Case Else
End Select
End Select
End If
End With
End Sub
beachte, dass auch damit ungültige Datumswerte eingegeben werden können (z.B. 31.02.)
das liegt einfach daran, dass die Tage zuerst eingegeben werden und somit keine Einschränkung möglich ist, die zum Monat passt.
Gruß Daniel
Anzeige
AW: Keypress - Datumsformat
03.08.2021 16:34:52
Andreas
Hi Daniel,
Danke für den Code. Sowas ähnliches habe ich schon gehabt. Finde ich aber unpraktisch, weil man dann die Rücktaste nicht mehr verwenden kann. Daher der Code, der nur im KeyDown läuft. LEider bekomme ich das irgendwie nicht hin, die beiden Codes zusammenzubauen....
Hab mal eine Mappe hochgeladen, zum Testen...
https://www.herber.de/bbs/user/147440.xlsm
AW: Keypress - Datumsformat
03.08.2021 17:07:37
Daniel
Hi
das habe ich berücksichtigt
Rücktaste funktionert mit meinen Codes.
musst du eigentlich nur einkopieren und ggf den Textboxnamen anpassen.
Gruß Daniel
Anzeige
AW: Keypress - Datumsformat
03.08.2021 17:41:51
Andreas
Schande über mein Haupt.... Du hast Recht Daniel,
der funktioniert wirklich Super! Gefällt mir noch besser, als den, den ich für meine Uhrzeit habe.
Hast Du diese Art auch für die Uhrzeit :)?
AW: Keypress - Datumsformat
03.08.2021 17:47:29
Daniel
nein, hab ich nicht.
sollte aber einfach sein, das entsprechend anzupassen.
Die Zahlenwerte stehen hier ja im Klartext drin und du musst eigentlich nur löschen und nichts hinzufügen.
Gruß Daniel
AW: Keypress - Datumsformat
03.08.2021 18:16:57
Andreas
Hier noch der Code für alle, die mit dem Datum in der Form hh:mm arbeiten wollen:


Private Sub Textbox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim T As String
T = Chr(KeyAscii)
With TextBox2
If .SelStart = Len(.Text) Then
Select Case .SelStart
Case 0
If Not T Like "[0-2]" Then KeyAscii = 0
Case 1
Select Case Mid(.Text, 1, 1)
Case "2"
If Not T Like "[0-3]" Then KeyAscii = 0
Case "1"
If Not T Like "[0-9]" Then KeyAscii = 0
Case "0"
If Not T Like "[0-9]" Then KeyAscii = 0
End Select
Case 3
If Not T Like "[0-5]" Then KeyAscii = 0
Case 4
If Not T Like "[0-9]" Then KeyAscii = 0
Case Else
KeyAscii = 0
End Select
End If
End With
End Sub

Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox2
If .SelStart = Len(.Text) Then
Select Case KeyCode
Case 48 To 57, 96 To 105
Select Case .SelStart
Case 2
.Text = .Text & ":"
Case Else
End Select
End Select
End If
End With
End Sub

danke daniel für deine Hilfe nochmal!
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige