PDA

Vollständige Version anzeigen : Zeiteingabe in Texfeld Ohne Doppelpunkt


Silentwolf
01.09.2017, 10:17
Hallo an alle,
Ich habe zwar auf einen gleichnamigen Thread eine Frage gestellt aber dieser ist als gelöst markiert deshalb glaube ich werde ich dort keine Antwort erhalten.

Hoffe das ist ok wenn ich nochmals einen neuen Thread erstelle??

Hajo hat einen Code erstellt und der funktioniert auch sehr gut .)
Nur möchte ich keine Sekunden in das Textfeld eintragen. Also Nur Stunden und minuten hh:mm

If BoEnter = False Then
If Len(txtVon) = 2 Then ' es wurden 2 Zeichen eingegeben
' prüfen ob schon ein Doppelpunkt eingegeben wurde
If InStr(txtVon, ":") = 0 Then
txtVon = txtVon & ":" ' Doppelpunkt ergänzen
End If
' eingegebene Zeichenkette ist 5 Zeichen lang
ElseIf Len(txtVon) = 5 Then
If Len(txtVon) - Len(Application.Substitute(txtVon, _
":", "")) < 2 Then
txtVon = txtVon & ":" ' Doppelpunkt ergänzen
End If
End If
End If
wie müsst ich denn diesen Code anpassen um nur 0700 zum Beispiel eintragen zu können.

Hoffe das mir diesbezüglich jemand helfen kann.

mfg
Silentwolf

silcono
01.09.2017, 10:24
Nimm doch einfach mal die Doppelpunkte raus :P

Dann wäre der gesamte Code vielleicht auch gut, dann könnte man das ganze nachstellen.

Grüße
Silcono

Jonas0806
01.09.2017, 10:27
Hallo Silentwolf,

ich würde das wahrscheinlich einfach so machen (Ohne jede Fehlerbehandlung/-überprüfung)

With Target
Application.EnableEvents = False
.Value = WorksheetFunction.Replace(.Value, 3, 0, ":")
Application.EnableEvents = True
End With

Silentwolf
01.09.2017, 15:02
Hallo,
war einige Stunden nicht hier deshalb meine späte Rückmeldung!
Danke mal an alle die geantwortet haben ,)

Private Sub txtVon_Change()

If BoEnter = False Then
If Len(txtVon) = 2 Then ' es wurden 2 Zeichen eingegeben
' prüfen ob schon ein Doppelpunkt eingegeben wurde
If InStr(txtVon, ":") = 0 Then
txtVon = txtVon & ":" ' Doppelpunkt ergänzen
End If
' eingegebene Zeichenkette ist 5 Zeichen lang
ElseIf Len(txtVon) = 5 Then
If Len(txtVon) - Len(Application.Substitute(txtVon, _
":", "")) < 2 Then
txtVon = txtVon & ":" ' Doppelpunkt ergänzen
End If
End If
End If

End Sub

hab leider nicht das Ereignis bei meinen thread mitgeliefert deshalb funktioniert auch target nicht .( wie Jonas geschrieben hat ...

@ silcono
Ich habe den Code ja nicht geschrieben deshalb bin ich mir nicht sicher was Du mit Deinen Kommentar meinst.

mfg
Silentwolf

R J
01.09.2017, 15:52
...da ich viel mit dem Nummernblock arbeite und da nur das Komma vorhanden ist, bin ich Über Optionen, Documentprüfung, AUTOKORREKTUR GEGANGEN UND HAB DORT DAS 2-fache Komma durch Doppelpunkt ersetzen lassen.

sorry... ging ja ums Textfelder und nicht um Zellen...
Ich lass es trotzdem mal stehen. Kann ja vlt. doch gebraucht werden....;)

Silentwolf
01.09.2017, 16:08
Hallo Ralph,
ja ist zur Eingabe im Tabellenblatt sicher ein Vorteil .)
Vielen Dank!
Aber wie mach ich nun das was ich gern hätte .( im Textfeld :)

bin immer noch nicht schlauer geworden ,)

mfg

Silentwolf

Jonas0806
01.09.2017, 16:10
Hallo,
[...]deshalb funktioniert auch target nicht .( wie Jonas geschrieben hat[...]
Na dann ersetzte es doch einfach durch txtVon. Ich bin auch von einer Zelle und damit von einem _Change-Event ausgegangen.

Dann wird dann auch das EnableEvents überflüssig.

Silentwolf
01.09.2017, 16:17
Hallo an alle,

vielen Dank!
Werde es so erledigen!

mfg
Silentwolf

R J
01.09.2017, 16:53
Aber wie mach ich nun das was ich gern hätte .( im Textfeld

Nun ja... im Prinzip ginge das genauso. Du könntest bei der Eingabe ein doppeltes Komma verwenden, also 23,,23 und im Change Ereignis das durch den Doppelpunkt ersetzen lassen

txtUhrzeit.Text = Replace(txtUhrzeit.Text,",,",":")

RPP63neu
01.09.2017, 16:56
… was nahezu genau meiner Antwort im anderen Thread entspricht:
http://www.ms-office-forum.net/forum/showthread.php?p=1827171#post1827171
Ich hatte noch ein CDate() drumrumgewickelt, da so auch Eingaben wie h,,m möglich sind.

(Ich hatte eine PN von silentwolf erhalten, dass er dies (aus welchem Grund auch immer) nicht wünscht)

Gruß Ralf

R J
01.09.2017, 20:53
@Ralf,

Du Glücklicher! Ich hab nicht mal 'ne PN bekommen...:D

Silentwolf
01.09.2017, 22:11
Hallo an alle,
@RPP63neu... ich hab mich bei Dir gemeldet da ich zwei gleiche threads hatte und die Eingabe eigentlich in einer Userform machen wollte und nicht im Tabellenblatt.. war keinesfalls negativ gemeint!
Ich wollte eigentlich eine Eingabe so erziehlen das ich 0700 eingebe und 07:00 ausgegeben wird.
Vielleicht hab ich ja etwas noch nicht ganz richtig verstanden.. werde mich Morgen nochmal damit beschäftigen und Eure Antworten genau studieren.

Vielen Dank an alle für Eure Hilfe!

mfg
Silentwolf

RPP63neu
02.09.2017, 06:41
Moin Wolf(gang?)!
Ich habe es auch nicht negativ aufgefasst.
Mir (und meinem Namensvetter) geht es auch eher um Usability.
Ich schreibe z.B. auch ein Datum grundsätzlich mit dem Ziffernblock, weil es einfach erheblich schneller geht.
Code dazu:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(TextBox1) Then TextBox1 = CDate(TextBox1)
End Sub
Gebe ich nun ein Datum wie 1-3 oder 1/3 mit dem Ziffernblock ein, wird nach dem Verlassen der TB automatisch ein 01.03.2017 daraus.
Lerndauer: 10 Sekunden
Zeitersparnis bei regelmäßiger Nutzung: enorm!

Gruß Ralf

Silentwolf
02.09.2017, 07:39
Guten Morgen Ralf,
Danke für Deine Nachricht!
Ja das hab ich jetzt auch probiert geht auch sehr gut!!
Vielen Dank auch für die Erklärung!

Habe auch den Code von Luschi gefunden .)

Private Sub txtVon_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
UhrZeit txtVon, KeyAscii
End Sub

Private Sub UhrZeit(ByRef theBox As MSForms.TextBox, ByVal KeyAscii As MSForms.ReturnInteger)
'Eingabebeschränkung Textbox_Uhrzeit mit autom. Doppelpunkt
'Format hh:mm
'by Josef Ehrensberger
'a little enhanced by Luschi
Dim ok As Boolean
Select Case Len(theBox)
Case 0
Select Case KeyAscii
Case 48 To 50
Case 51 To 57
'erste Ziffer 3 bis 9 --> 03: - 09:
theBox.Value = theBox.Value & "0" & Chr(KeyAscii) & ":"
KeyAscii = 0
Case Else
KeyAscii = 0
End Select
Case 1
ok = True
If Left(theBox, 1) = 2 Then
Select Case KeyAscii
Case 48 To 51
Case Else
ok = False
KeyAscii = 0
End Select
Else
Select Case KeyAscii
Case 48 To 57
Case Else
ok = False
KeyAscii = 0
End Select
End If
If ok Then
'2. Ziffer korrekt, dann ':' ranhängen
theBox.Value = theBox.Value & Chr(KeyAscii) & ":"
KeyAscii = 0
End If
Case 2
Select Case KeyAscii
Case 48 To 53, 58
Case Else
KeyAscii = 0
End Select
Case 3
If Right(theBox, 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

Und von Josef Ehrensberger... auch noch interessant .)

Ja wie immer es gibt einige Wege zum Ziel...
Hab aber wieder sehr viel von Euch allen gelernt echt super!!

Vielen Dank .)
P.S. hab jetzt meine Signatur geändert wollte ich eigentlich schon lang erledigen.. Bin der Albert .-)