Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1732to1736
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
Uhrzeiteingabe in TextBox
09.01.2020 19:08:48
Peer
Hallo.
Ich habe hier im Forum scheinbar folgende Lösung für mein Problem gefunden und wollte es mit ein wenig Anpassungen nutzen.
https://www.herber.de/forum/archiv/1244to1248/1245636_Uhrzeit_in_Textbox_ohne.html
Leider bekomme ich schon beim Debuggen die Meldung, dass Sub oder Function nicht definiert ist.
Ich habe luschis Sub in ein allgemeines Modul kopiert

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 dann meine TextBox "txt_ArbZBeginn" wie in dem Thread dem KeyPress Event der TextBox zugeordnet.
Private Sub txt_ArbZ_Beginn_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
uhrzeit txt_ArbZ_Beginn, KeyAscii
End Sub

Aber der Debugger bleibt bei "uhrzeit" hängen?
Warum? Kann jemand mir helfen?
Vielen Dank für jeden Tipp.
LG
Peer

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Uhrzeiteingabe in TextBox
09.01.2020 20:34:32
Peer
Hallo Hajo.
Danke für deine schnelle Antwort.
Ich kenne deine Datei schon und ich wollte sie auch nutzen, aber ich konnte es mit meinem bescheidenden VBA-Kenntnissen noch nicht auf meine Vorstellungen anpassen, da ich sie nur im hh:mm Format benötige.
Und habe ich weiter gesucht, und oben genanntes gefunden.
Der Vorteil der oberen Lösung ist auch, das man es in einem allgemeinen Modul speichert und es nur für jede TextBox, bei der man dieses Format braucht, mit Abruf der Sub einfacher installiert. Gerade, wenn man Verbesserungen oder Änderungen am Code machen will.
Für mich als Verständnis würde interessieren, was ich ändern muss bei deinem Code, wenn ich meinen Bedürfnissen anpassen würde?
LG
Peer
Anzeige
AW: Uhrzeiteingabe in TextBox
09.01.2020 20:40:21
Peer
Ach bin ich ein Depp.
Habe die Lösung scheinbar gefunden.
Ich habe die Sub von Private auf Public gesetzt, bzw. Privat gelöscht.
Und schon findet er die Sub.
LG
Peer
AW: Uhrzeiteingabe in TextBox
09.01.2020 21:10:43
Peer
Beim Durchprobieren bin ich auf ein weiteres Problem gestoßen.
Die Eingabe erfolgt zwar, wie gewollt.
Nur wenn ein Wert schon drin steht oder ich nach Löschen des Inhaltes der TextBox einen neuen Wert eingeben möchte, bekomme ich Fehhler 13...Typ...
Die Diskrepanz ist zwischen dem KeyPress der jeweiligen TextBox und der "Berechnungs"-TextBox txt_ArbZeit.
Ich bin nun endgültig überfragt und benötige wieder einmal eure Hilfe.
;-(
Hier ist die Beispiel-Datei.
https://www.herber.de/bbs/user/134287.xlsm
Man gelangt mit einem Rechtsklick auf den Range B12:B42 jeder Monatsmappe in die UF .
LG
Peer
Anzeige
AW: Uhrzeiteingabe in TextBox
10.01.2020 07:18:36
Luschi
Hallo Peer,
Dein Problem ist typisch für Berechnung von Arbeitszeiten mit Eintragungen in Textboxen:
- mit Application.EnabledEvents = False kann man die Ereignisse im Formular nicht unterdrücken bzw.
  verhindern
- sowas Ähnliches für Formulare kenne ich (bis jetzt) nicht
- jeder Tastenschlag in der Textbox löst das Ereignis 'Change()' der Textbox aus
- Wenn man jetzt aus 16:15 die 5 per BackSpace-Taste löscht
- tritt also dieses Ereignis ein und darin wird die Prozedur 'AZ_berechnung' ausgeführt
- das klappt jetzt noch, denn '16:1' ist noch eine gültige Uhrzeit (16:01)
- löscht man dann auch noch die 1 weg
- dann ergibt CDdate ("16:") keine gültige Uhrzeit mehr und es knallt Vba-mäßig
- mein Vorschlag: kontrolliere, ob die Länge des Eintrags in der Uhrzeit-TB = 5 ist
  und erst dann wird die Arbeitszeit berechnet:

Private Sub txt_ArbZ_Ende_Change()
If Len(Me.txt_ArbZ_Ende.Value) = 5 Then
AZ_berechnung
Else
Exit Sub
End If
End Sub
Aber es sind auch noch ein paar andere Unstimmigkeiten drin:
- klicke ich mit der Maus nacht dem Formularstart in die TB 'txt_ArbZ_Ende'
- tritt das Event 'txt_ArbZ_Beginn_Exit' ein und will die Arbeitszeit neu berechnen
- sowas muß nicht sein - macht aber ein genaues Debugging der Steuerelement-Events erforderlich
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Uhrzeiteingabe in TextBox
10.01.2020 09:34:13
Peer
Hallo luschi.
Vielen Dank für deine ausführliche und logische Erklärung.
So habe ich es noch nicht betrachtet, aber es ist nach dieser Erläuterung nachvollziehbar.
Als VBA-Neuling kann ich mit deinen Angaben nach dem Code (noch) nichts anfangen.
Bedeutet das, das ich mit weiteren Problemen rechnen muss oder ist es nur die falsche Vorgehensweise, die ich mir abgewöhnen sollte?
Bis jetzt ist nach den Änderungen durch deinen Vorschlag alles fehlerfrei. Im Gegenteil, ich bekomme nach Eingabe gleich die richtigen Arbeitszeit angezeigt.
LG
Peer
AW: Uhrzeiteingabe in TextBox
12.01.2020 15:12:44
Peer
Hallo Luschi.
Dein und Josef's Code funktioniert bei mir super.
Ich bin dankbar, dass ich so etwas bekommen habe und an meine Bedürfnisse anpassen durfte, was auch relativ einfach war.
Nun würde ich noch eine kleine Verbesserung einbauen.
Wenn in der Textbox schon ein Zeitwert steht, dann muss ich entweder alles markieren und löschen, um einen neuen Wert einzugeben, oder ich markiere den Zeitwert vor dem Doppelpunkt oder nach dem Doppelpunkt und lösche ihn für den neuen Wert.
Nun möchte ich aber die Möglichkeit schaffen, den vorhandenen Wert durch "Überschreiben" zu ersetzen, ohne vorher zu löschen.
Ich habe einmal im Netz gegooglet und etwas über overwrite oder overtype gelesen. Ich konnte bis jetzt hierzu keine Erläuterung finden, ob und wie ich ihn benutzen kann.
Kann jemand mir dabei helfen?
Userbild
LG
Peer
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige