Tijdsvalue omzetten naar een rekenbaar getal

Status
Niet open voor verdere reacties.
Doe dat dan in de TextBox2_Exit.
Dan kan je met een MsgBox of Debug.Print de boel ook eerst controleren.

Ook zie ik dat je KeyDown en KeyPress beide gebruikt.
Dat is ook niet handig.
 
OK heb het onder een aparte knop (Totaal) gebracht.

Code:
  Dim Uur As String, Tarief As Single, x
    With Worksheets("Declaratie")
      Uur = .Range("A5")
      Tarief = .Range("B6").Value
      x = Split(Uur, ".")
  MsgBox ("X(0) =  " & x(0))
  MsgBox ("X(1) =  " & x(1))
  
      Minuten = x(0) + x(1) / 60
  
 ' MsgBox ("Time =  " & Minuten * Tarief)
  End With
Ook hier lfoutmelding bij x(1)

zie vb-tje
 

Bijlagen

Laatst bewerkt:
Daar gebruik je weer een echte tijd uit een cel.
Uiteraard werkt dat dan niet.
 
Ok, maar bij het volgende werkt het ook niet

Code:
Uur = TimeValue(TextBox2.Value) - TimeValue(TextBox1.Value)

en dit is tijd uit de TextBox
 
Dan geef je geen exact tijd formaat aan.
Laat dat document dus zien hier en geef aan wat je exact in die texboxen invult.
 
Hoi Edmoor,

De TextBoxen worden ingevoerd met 4 getallen.
Vervolgens onder Keydown wordt het geformateerd naar "00:00"
en vervolgens met TimeValue de 2 boxen van elkaar afgetrokken en resultaat wordt op cel A5 neergezet.
Is de hele tijd alzo
Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
    TextBox1 = Format(TextBox1, "00:00")
    If TextBox1 = "" Or TextBox2 = "" Then GoTo Uit
    With Worksheets("Declaratie")
      .Range("A5").Value = TimeValue(TextBox2.Value) - TimeValue(TextBox1.Value)
     End With
  End If
Uit:
End Sub
Of
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
    TextBox2 = Format(TextBox2, "00:00")
    If TextBox1 = "" Or TextBox2 = "" Then GoTo Uit
    With Worksheets("Declaratie")
      .Range("A5") = TimeValue(TextBox2.Value) - TimeValue(TextBox1.Value)
      .Range("C5") = .Range("A5")
    End With
  End If
Uit:
End Sub
Dus invoering is b.v. 1015 wat 10:15 wordt
 
Laatst bewerkt:
Waar haal je dan die 2 punt 15 vandaan die in je voorbeeld wordt gebruikt?
Daar is de berekening zoals ik 'm liet zien op gebaseerd.
 
Hier vandaan
Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
    TextBox1 = Format(TextBox1, "00:00")
    If TextBox1 = "" Or TextBox2 = "" Then GoTo Uit
    With Worksheets("Declaratie")
      [COLOR="#FF0000"].Range("A5").Value[/COLOR] = TimeValue(TextBox2.Value) - TimeValue(TextBox1.Value)
     End With
  End If
Uit:
End Sub
Of
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
    TextBox2 = Format(TextBox2, "00:00")
    If TextBox1 = "" Or TextBox2 = "" Then GoTo Uit
    With Worksheets("Declaratie")
      [COLOR="#FF0000"].Range("A5") =[/COLOR] TimeValue(TextBox2.Value) - TimeValue(TextBox1.Value)
      .Range("C5") = .Range("A5")
    End With
  End If
Uit:
End Sub
 
Kijk eens naar dit:
 

Bijlagen

Laatst bewerkt:
Dat heb je allemaal niet nodig.
Mij versie doet exact wat je vroeg.
Ook het eenvoudig invullen van tijden is daarin geregeld.

Dit is de 2003 versie:
 

Bijlagen

Laatst bewerkt:
hee thanks edmoor,

dit werkt inderdaad,

zie wel dingen die ik nog niet kon, voorbijkomen :-)

Ben nu moe van de hele dag, dus morgenochtend verder.

Moet het nog in m'n prog. zetten
 
Goedemorgen Edmoor,
Ben verder gegaan met jouw oplossing, maar liep toch tegen een paar dingen aan:

De belangrijkste
Code:
Option Explicit

Private Sub StopKnop_Click()
    Unload Me                                   ' Verbergt Userform en maakt Var. leeg
    Sheets("Declaratie").Range("A1").Activate   ' Activeert Blad 1 Cel A1
End Sub

[COLOR="#FF0000"]Private Sub txtVan_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)[/COLOR]
    KeyAscii = CheckTXT(txtVan, KeyAscii)
    If txtVan = "" Or txtTot = "" Then GoTo Uit
    Range("C4").Value = TimeValue(txtTot.Text) - TimeValue(txtVan.Text)
Uit:
End Sub

[COLOR="#FF0000"]Private Sub txtTot_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)[/COLOR]
    KeyAscii = CheckTXT(txtTot, KeyAscii)
    If txtTot = "" Or txtVan = "" Then GoTo Uit
    Range("C4").Value = TimeValue(txtTot.Text) - TimeValue(txtVan.Text)
Uit:
End Sub

Function Zero2Nine(ByVal KeyAscii As Integer) As Boolean
    Select Case KeyAscii
        Case 48 To 58:   Zero2Nine = True
    End Select
End Function

Function CheckTXT(ByRef txtBox As MSForms.TextBox, ByVal KeyAscii As Integer) As Integer
    If Len(txtBox.Text) = 5 Then CheckTXT = 0:      Exit Function       ' na 5 tekens exit
    If Not Zero2Nine(KeyAscii) Then CheckTXT = 0:   Exit Function       ' geen geldig teken dan exit
    If Len(txtBox.Text) = 2 Then txtBox.Text = txtBox.Text & ":"        ' zet na 2e teken de ":" neer
    CheckTXT = KeyAscii
End Function

Private Sub CommandButton1_Click()
    Range("C4").Value = TimeValue(TextBox2.Text) - TimeValue(TextBox1.Text)
End Sub

Probleem doet zich voor door de KeyDown functie.
Als txtVan is ingevuld en men een enter geeft komt men in txtTot.
Tot dusver ok.
Als men een cijfer invoert in txtTot, gaat de Keydown functie werken en probeert de berekening te maken.
Dit gaat dus niet, want eerst moeten alle cijfers ingevoerd zijn van deze "tijd".

Vandaar dat ik de
Code:
Private Sub txtVan_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
gebruik. Dus bij een Enter (na invoering alle gegevens van deze TB of een Tab voert hij de berekening uit.

Weet dat ik achter loop met 2003 en zie ook mooiere oplossingen, maar met 2003 kom je er ook wel :-)
Ben aan het bouwen geweest (verslavend) en kom tot het volgende:

Code:
Option Explicit

Private Sub StopKnop_Click()
    Unload Me                                   ' Verbergt Userform en maakt Var. leeg
    Sheets("Declaratie").Range("A1").Activate   ' Activeert Blad 1 Cel A1
End Sub

Private Sub UserForm_activate()
  txtVan.SetFocus
End Sub

Private Sub txtVan_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If Len(txtVan.Text) = 5 Then txtTot.SetFocus   'Exit Sub
  Select Case KeyAscii
    Case Asc("0") To Asc("9")
    Case Asc(",")
  Case Else
    KeyAscii = 0
  End Select
End Sub
Private Sub txtTot_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If Len(txtTot.Text) = 5 Then Exit Sub
  Select Case KeyAscii
    Case Asc("0") To Asc("9")
    Case Asc(",")
  Case Else
    KeyAscii = 0
  End Select
End Sub

Private Sub txtVan_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
    If txtVan = "" Or txtTot = "" Then GoTo Uit
    With Worksheets("Declaratie")
      .Range("C4").Value = TimeValue(txtTot.Value) - TimeValue(txtVan.Value)
     End With
  End If
Uit:
End Sub
Private Sub txtTot_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Or KeyCode = 13 Then             ' Tab & Enter
    If txtVan = "" Or txtTot = "" Then GoTo Uit
    With Worksheets("Declaratie")
      .Range("C4") = TimeValue(txtTot.Value) - TimeValue(txtVan.Value)
    End With
  End If
Uit:
End Sub

Private Sub txtVan_Change()
  If Len(txtVan.Text) = 5 Then txtTot.SetFocus: Exit Sub              ' max 5 tekens
  If Len(txtVan.Text) = 2 Then txtVan.Text = txtVan.Text & ":"        ' zet na 2e teken de ":" neer
End Sub

Private Sub txtTot_Change()
  If Len(txtTot.Text) = 5 Then StopKnop.SetFocus: Exit Sub            ' max 5 tekens
  If Len(txtTot.Text) = 2 Then txtTot.Text = txtTot.Text & ":"        ' zet na 2e teken de ":" neer
End Sub

Heb geprobeerd om het `foutproof` te maken en alles werkt naar behoren, zoals ik het voor ogen had.
Laat je idee er eens over gaan

en nogmaals thanks voor de hulp

Vr. Gr.

Dutch
 
Laatst bewerkt:
Gebruik niet het Keydown even als je mij oplossing wilt gebruiken.
 
Alleen dat wat staat in het documentje dat ik stuurde.
 
ok ja dat werkt klopt, maar wilde de extra handelingen weghalen om tot eindresultaat te komen.

Dus die Knop weg en de berekening onder gebracht onder het Keydown event
 
Wat ik al zei, niet doen.
Doe dat dan in het Exit event van de 2e textbox.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan