Tijdverschil berekenen bij gebruik van txtbox

Status
Niet open voor verdere reacties.

gst

Gebruiker
Lid geworden
5 jan 2010
Berichten
121
Besturingssysteem
64-bits besturingssysteem, x64-processor
Office versie
Microsoft Office LTSC Professional Plus 2021
Geacht forum,

Bij de vorige vraagstelling (met dezelfde titel 'Tijdverschil berekenen bij gebruik van txtbox) had ik problemen met het berekenen van tijdverschillen bij gebruikt van txtboxen.
Deze is keurig opgelost m.b.v. Helpmij. Hierbij ging het om verschillende tijden van elkaar af te trekken.
Nu loop ik tegen een probleem aan die er op lijkt echter moet hierbij de ingegeven tijden bij elkaar opgeteld worden.
Ik heb een voorbeeld toegevoegd.
Het lukt mij niet om een juiste programmering te vinden voor het gewenst resultaat.
Heeft iemand een suggestie?

Bvd gst
 

Bijlagen

  • TijdOptelling.xlsm
    19,6 KB · Weergaven: 13
Maar er eens dit van:
Code:
Private Sub cmdBereken_Click()
    txtTotaaltijd = Format(TimeValue(txtStoringstijd) + TimeValue(txtWachttijd), "hh:mm")
End Sub
 
Hallo gst

Even :)

Code:
Private Sub cmdBereken_Click()
' txtTotaaltijd = Format((txtStoringstijd + txtWachttijd), "hh:mm")
  txtTotaaltijd = CDate(txtStoringstijd) + CDate(txtWachttijd)
End Sub
 

Bijlagen

  • TijdOptelling #2.xlsm
    20 KB · Weergaven: 11
Edmoor,

Dank voor je snelle reactie!.
Je suggestie werkt perfect tenzij de wachttijd lang is en de optelling meer is dan 24 uur.
In sommige gevallen kan dit voor komen. (zie bijlage)
Is hier nog een oplossing voor?
 

Bijlagen

  • TijdOptelling #3.xlsm
    21,5 KB · Weergaven: 13
Goedemiddag gst,

Ben even aan het stoeien geweest met wat je vroeg.

Zag dat boven de 24 uur een probleem werd, geen formule voor?

Heb iets uitgevogeld, zie het vb-tje

Voorwaarde, als je na een 1e invoering een 2e wilt doen, dan wel knop Nwe Berekening gebruiken!
Heb het tot maximaal 7 dagen gedaan.

e.e.a. met kleuren gedaan voor uitleg.
tevens uren en minuten gewoon als cijfers achter elkaar invoeren.


Grtz.
 

Bijlagen

  • TijdOptelling #3.xlsm
    21,6 KB · Weergaven: 12
Laatst bewerkt:
DutchOirs,

Dank voor je 'stooiwerk'.
Maar helaas werkt het niet zoals gewenst.
Vul ik meer dan 24:00 uur in dan gaat het niet goed.
Ook zie je niets bij de dagen wanneer de tijd >24 uur.
Je opmerking 'tevens uren en minuten gewoon als cijfers achter elkaar invoeren' begrijp ik niet.
Dit werkt niet wanneer ik dit doe.
Maar wel bedankt voor je inspanning!

Grt. gst
 
De maximale range van tijd is 00:00 tot 23:59 en kan dus nooit gelijk of groter zijn dan 24.
 
Hoi gst,

Hier werkt het goed hoor, maar alles is afhankelijk van je wensen..
Edmoor, werkt het bij jouw ook niet?

als je storingstijd bv 25 min. is dan 25 min. invullen en ENTER
als je wachttijd 45 min. is dan 45 min. invullen en ENTER
dan bereken en wordt totaal stilstand 01:10

als je storingstijd bv 1 uur en 25 min. is dan 125 invullen en ENTER
als je wachttijd 35 min. is dan 35 invullen en ENTER
dan Bereken en wordt Totaal stilstand 02:00

als je storingstijd 22 uur is dan 2200 invullen als storingstijd en ENTER
als je wachttijd dan 11 uur is dan 1100 invullen en ENTER
dan Bereken en wordt totaal stilstand 1 dag en 09:00
 
hoi gst,

nog even een update
 

Bijlagen

  • TijdOptelling #4.xlsm
    27,7 KB · Weergaven: 17
Hallo DutchOirs,

Mijn reactie is wat laat i.v.m. vakantietijd.
Ik probeer het nu weer op te pakken.

Bij mij loopt vast zodra ik druk op 'Bereken' bij: TextBox3 = TimeValue(TextBox1) + TimeValue(TextBox2)
 
Probeer deze eens te laten vastlopen.
 

Bijlagen

  • TijdOptelling #5.xlsm
    27,1 KB · Weergaven: 11
Iets slanker:
 

Bijlagen

  • TijdOptelling #5.xlsb
    18,7 KB · Weergaven: 17
AHulpje en snb,

Beide hartelijk dank voor toegevoegde reacties!
De suggesties kan ik heel goed gebruiken.

Heel leerzaam vind ik de opbouw die snb aangedragen heeft.
Hoe je in korte notaties een programma kunt opbouwen.
Heel interessant!
 
Het kan nog wat slanker met een klassemodule.
 

Bijlagen

  • __sommeer tijd.xlsb
    24,4 KB · Weergaven: 13
snb,

Met klasse modules heb ik nog nooit gewerkt.
Wel interessant om de verschillen te zien tussen een ‘gewone’ module en een klasse module.
Het roept bij mij wel meer vragen op hoe het werkt.
Maar bij meer tijd, wel interessant om in me er in te verdiepen.

DutchOirs,
Vraag is opgelost en heb daarom dit onderwerp reeds als opgelost aangevinkt.
 
Heb de code van snb even gepakt:cool:. Als je nog een knop maakt in je userform, waarna de berekening pas wordt uitgevoerd, ben je klaar met onderstaande.
Dan heb je de klassenmodule niet nodig (commandbutton1 stelt dan die nieuwe knop voor). Maakt het wel wat simpeler.

Code:
Private Sub CommandButton1_Click()
 For j = 1 To 4
    If Me("CB_" & Format(j, "000")).ListIndex = -1 Then Exit For
 Next
 y = Val(CB_002) + Val(CB_004)
 If j = 5 Then Caption = "Stilstand " & Val(CB_001) + Val(CB_003) + y \ 60 & "." & y Mod 60
End Sub

Private Sub UserForm_Initialize()
    CB_001.List = [row(1:24)-1]
    CB_002.List = [row(1:60)-1]
    CB_003.List = CB_001.List
    CB_004.List = CB_002.List
End Sub

Private Sub cmdNewBut_Click()
    For j = 1 To 4
        Me("CB_" & Format(j, "000")).ListIndex = -1
    Next
    Caption = ""
End Sub
 
In de zijlijn:

Het blijft natuurlijk wel vreemd dat:
- er getallen aan de combobox zijn toegewezen
- die als getal kunnen worden uitgelezen met CB_001.List(5,0)
- of met CB_001.Column(0,5)

maar,

* de eigenschap CB_001.Value een tekstwaarde teruggeeft : bijv. "5"
* en zich daarin niet onderscheidt van CB_001.Text

In dit tijdrekenvoorbeeld komt de waarde in de combobox overeen met de listindex.
Omdat de listindex altijd een getalwaarde is kan de sommatie in de macro als volgt geschreven worden

Code:
 y = CB_002.listindex + CB_004.Listindex
 If j = 5 Then Caption = "Stilstand " & CB_001.Listindex + CB_003.Listindex + y \ 60 & "." & y Mod 60
 
Ik blijf dat inderdaad ook apart vinden. Waarschijnlijk werkt de CB_001.List(5,0) methode hetzelfde als het uitlezen arrays
Als je in A1:A3 de celeigenschap op tekst zet en daar 1 t/m 3 in zet, worden met onderstaande code ook getallen weggeschreven.

Code:
Sub jec()
 ar = Range("A1:A3")
 Range("C1").Resize(UBound(ar)) = ar
End Sub
 
Laatst bewerkt:
Het verschil met ranges is dat bij een Range de eigenschap .value altijd de waarde en .text de opgemaakte waarde teruggeeft.
Het onderscheid tuseen .Value en .Text bij een combobox is zinloos als ze beide altijd een tekstreeks produceren.

Met arrays en Ranges is iets anders aan de hand: omdat de defaulteigenschap van een Range de .Value is, staat
sn=Range("A1:A10") gelijk aan sn=Tange("A1:A10").Value.
En dat is natuurlijk essentieel anders dan sn=Range("A1:A10").Text
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan