Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

VBA// Textfeld / Uhrzeiteingabe ohne Doppelpunkt
#1
Einen schönen 1.November Euch Allen.

Ich möchte gerne mein Zeitmakro pimpen und suche nach einer Möglichkeit,
die Zeiteingabe im Dialog zu vereinfachen
Hier möchte ich einfach nur drei oder vier Ziffern eingeben und daraus soll dann die Uhrzeit generiert werden
Bsp: 930 wird zu 9:30;1145 zu 11:45
Diese Werte werden anschließend in einer DB eingetragen und Zeiten werden dann im Arbeitsblatt weiter berechnet.
Kann mir jemand sagen, wie ich den String umformatiert bekomme?

Gruß
Michael
Win 10
Office 2010 & 2016
Antworten Top
#2
Hallo,

versuche es mal damit, ist eine von meinen Jugendsünden:

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Len(Target)
    Case 4
        Cells(Target.Row, Target.Column) = Left(Cells(Target.Row, Target.Column), 2) & ":" & Right(Cells(Target.Row, Target.Column), 2)
    Case 3
        Cells(Target.Row, Target.Column) = Left(Cells(Target.Row, Target.Column), 1) & ":" & Right(Cells(Target.Row, Target.Column), 2)
    Case 2
        Cells(Target.Row, Target.Column) = 0 & ":" & Right(Cells(Target.Row, Target.Column), 2)
     Case 1
        Cells(Target.Row, Target.Column) = 0 & ":" & 0 & Right(Cells(Target.Row, Target.Column), 1)
End Select
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Danke für die schnelle Antwort.

Ich glaube aber, ich habe mich falsch ausgedrückt.
Über das Textfeld in meiner Userform befülle ich die DB.
Nun schreibe ich immer brav 10:45 in´s Textfeld.
Aber da ich schreibfaul bin, möchte ich auf den Doppelpunkt verzichten ( Weil Hand ja auf dem Ziffernblock ist)
Also möchte ich nur 1045 schreiben, Enter drücken und im Textfeld steht 10:45, das dann beim Speichern in der DB so eingetragen wird wie bisher.
Hierzu suche ich den Lösungsansatz.
Dank Euch im Vorab

Gruß
Michael
Win 10
Office 2010 & 2016
Antworten Top
#4
Hallo Michael,

ist das so schwer, Klaus-Dieters Code auf eine TextBox umzuschreiben? Wink

Gruß Uwe
Antworten Top
#5
Hallo Michael,

jede Antwort kann nur so gut sein, wie die Frage. Von einem UserForm war nicht die Rede.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#6
Hallöchen,

Zitat:Also möchte ich nur 1045 schreiben, Enter drücken und im Textfeld steht 10:45

also, das soll doch sicher auch passieren, wenn Du mit Maus oder TAB das Textfeld verlässt?

Man könnte das deswegen so lösen:

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
TextBox1.Text = Format(Val(Replace(TextBox1.Text, ":", "")), "00:0")
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Hallo,

ich habe mir mal vor Urzeiten eine Eingabeprüfung für eine Textbox gemacht. Schau mal, ob das in Deinem Sinn ist:

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsDate(Replace(TextBox1.Value, "_", "0")) Then
        TextBox1.Value = Replace(TextBox1.Value, "_", "0")
    Else
        Cancel = True
    End If
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case 48 To 57, 96 To 105   'Zahlen
            If Left(TextBox1.Value, 1) = "_" Then
                'Weiter einfügen
                TextBox1.Value = Mid(TextBox1.Value, 2, 1) & Mid(TextBox1.Value, 4, 1) & ":" & Mid(TextBox1.Value, 5, 1)
            Else
            KeyCode = 0
            End If
        Case vbKeyBack
            TextBox1.Value = "_" & Mid(TextBox1.Value, 1, 1) & ":" & Mid(TextBox1.Value, 2, 1) & Mid(TextBox1.Value, 4, 1)
            KeyCode = 0
        Case vbKeyDelete
            TextBox1.Value = "__:__"
            KeyCode = 0
        Case vbKeyTab, vbKeyReturn
        Case Else
            KeyCode = 0
    End Select
End Sub

Standardwert der Textbox ist "__:__" (muss in den Eigenschaften der Textbox hinterlegt werden oder z. B. in Userform_Initialize gesetzt werden)
Gruß
Michael
Antworten Top
#8
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Columns(6)) Is Nothing And Target.Count = 1 Then
    Application.EnableEvents = False
    Target = Format(Target, "00:00")
    Application.EnableEvents = True
  End If
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
@snb Es geht hier um eine Userform und nicht um die Tabelle ...
Gruß
Michael
Antworten Top
#10
In diesem Fall ist eben ein Userform oder TextBox überflüssig.
Letztendlich sollte das Ergebnis ins Arbeitsblatt eingetragen werden. Warum dann nicht unmittelbar ohne Umwege?
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste