Avatar billede Carsten Juniormester
27. april 2020 - 22:01 Der er 4 kommentarer og
1 løsning

Divider tid

Jeg har en formular ved navnet: Indberet
Heri er textboxen: Vagtsum
I Vagtsum indtastes et timetal, f.eks. 30:45 for 30 timer og 45 minutter.

Indtastningen skal deles i 3 (det vil give 10:45 i dette tilfælde)

I regnearket: Vagt
Skal 1/3 værdien 10:45 lægges i celle A5, B5 og C5.

Hvordan gøres det i VBA delen. Jeg vil gerne undgå at bruge regneark til mellemstation. Det ville være simpelt nok at før sumtallet ind i en celle og lægge en formel i celle A5, B5 og C5, men jeg er interesseret i kun at min tredjedele direkte i regnearket.
Avatar billede bvirk Guru
28. april 2020 - 10:49 #1
Hvis sum="30:45"

Kan der, ved at lave det hele til minutter og dele med 3

minut3 = (val(sum)*60+val(right(sum,2)))/3

fås timer:

timer3 = int(minut3/60)

og minutter som udtryk

minuts3-60*timer3

som streng

hm3 = timer3 & ":" & minuts3-60*timer3

som representerende tidspand mindre end 24 timer kan presenteres som

cvdate(hm3)
Avatar billede Carsten Juniormester
28. april 2020 - 23:09 #2
Tak for din interesse.

Jeg har ikke prøvet din løsning endnu.

Du skriver blandet andet til sidst: hm3 = timer3 & ":" & 'minuts3-60*timer3'
Den del jeg har sat i '' altså sidste del af koden er den korrekt.  Jeg aner det ikke men den virker ikke logisk.

Jeg havde selv tænk noget med:

ActiveSheet.Range("B5") = Format(TextBox1, "[h]:mm") /3
(er klar over at ovenstående ikke virker, hvorfor jeg skriver på dette forum)

Hvis du forstår ideen med mit forsøg. Eller er det totalt umuligt. Er men nød til at dele indtastningen op i enheder man kan "manipulere med...?
Avatar billede bvirk Guru
29. april 2020 - 11:22 #3
#1 var et "skud fra hoften" og dermed ikke helt fyldestgørende. Prøver lige igen:

En userform har en tekstbox hvis navn er vagtsum (IKKE TextBox1 - navnet på tekstbox er øverste egenskab i egenskabsarket i min excel97)

På userform er der knap som får navnet insertThird. Denne knaps programkode er:

Private Sub insertThird_Click()
    Dim minut3, hour3
   
    minut3 = (60 * Val(vagtsum) + Val(Right(vagtsum, 2))) / 3
    hour3 = Int(minut3 / 60)
   
    ActiveSheet.Range("b5") = Right("0" & hour3, 2) & ":" & minut3 - 60 * hour3
End Sub

Kolonne B skal være at typen klokkeslet eller tekst

Håber det virker eller er til inspiration
Avatar billede Carsten Juniormester
29. april 2020 - 22:22 #4
Tak for din respons.

Jeg har kopieret din kode og den virker fortrinligt, tak for det.

Da jeg skrev, om sidste linje indeholdte en fejl var jeg i den tro, at der ville blive trukket alt for mange minutter fra i minutter.

Forsat god dag.
Avatar billede bvirk Guru
30. april 2020 - 13:19 #5
Tak og godt du kunne bruge det.

Ja - hh:mm lader sig kun repræsentere som en streng for hh>23 - det hænger sammen med at klokkeslet er en præsentationsform af et tidspunkt med dagstæller 0.
Følgende udtryk (i brugerudtryk vinduet) viser nulpunktet for typen dato og klokkeslet - typen som har præsentationsformerne

- dato
- dato og klokkeslet ( et tidspunkt )
- klokkeslet (dag=0)

?format(cdate(0),"yyyy-mm-dd")

Du kunne godt have divideret med 3,  hvis Microsoft havde valgt at lade timer:minutter tælle dage.
?format(cdate((1+6/24+15/24/60)/3),"hh:m")
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester