op datum werkuren met formule berekenen

Status
Niet open voor verdere reacties.

Appie59

Gebruiker
Lid geworden
22 apr 2014
Berichten
76
Hallo Wizards,
ik ben een werkuren registratie aan het maken. Ik vul de datum in een vast "invoerstukje"(formules) en de van/tot tijden. Het resultaat is dan het aantal uren/dag. Verder heb ik per maand alle dagen in een rij staan. De bedoeling is dat het resultaat uit "invoerstukje permanent bij de juiste datum en maand komt te staan.
Ik heb het wel voor elkaar voor 1 week, maar voor een jaar EN ook 11 werknemers wordt dit een monster formule. Niet te doen zo. Weet zeker dat er een oplossing met vba, waarbij per invoer naar de juiste datum wordt gezocht en de waarde(aantal uren) daar pemanent wordt neergezet. En dat dan voor elke maand.
Ik krijg dit niet voor elkaar en hoop dat er iemand is die er naar zou willen kijken

Groet Rob

ik heb het excel bestandje bijgesloten
 

Bijlagen

Code:
Private Sub CommandButton3_Click()
    vntDatum = Range("AK11").Value
    lngDag = CLng(Format(vntDatum, "dd"))
    lngMaand = CLng(Format(vntDatum, "mm"))
    Range("C7").Offset(4 * lngMaand - 4, lngDag - 1).Value = Range("AP11").Value
End Sub
 
Hoi Alphamax,

Bedankt voor je snelle reactie. GEWELDIG !!!. Ik heb me rot gelachen (jij waarschijnlijk ook :mad:) toen ik de slechts 4 regels code zag staan. Echte tovenaar ben je. En ook gelijk helemaal op mn bestandje geschreven. Ik probeer steeds verder te komen, gaat langzaam maar dit lijkt me paar treden te hoog.
Werkt perfect.
Heel hartelijk bedankt man.

groet Rob

ps ik zal m op opgelost zetten
 
Veel VBA-code kan zo compact zijn, als je weet dat elke maand de cel, 4 regels naar beneden wordt verplaatst (OFFSET).
De macro-recorder maakt code die werkt, maar die niet zo flexibel is.
Gebruik de helpfunctie en probeer te begrijpen wat de code doet.
 
Hallo Alphamax,
Heb toch nog een vraagje.

- Als er bij een datum een invoer is gedaan, maar deze is foutief dan zou het mooi zijn als er een nieuwe invoer kan worden gedaan die de oude overschrijft.
Als ik dat nu doe plaats hij de nwe invoer een dag ernaast.

ik heb een kleine aanvulling gedaan zodat hij de waarden wist na invoer (in het "invoerstukje") en terugkomt op AK11

- Wat me niet lukt is dat als er geen datum is ingevuld, en de knop wordt ingedrukt, de AK11 als actieve cel blijft.

Verder werkt het super.

Zou je hier nog even naar kunnen kijken a.u.b. ?

groet Rob
 
- Als er bij een datum een invoer is gedaan, maar deze is foutief dan zou het mooi zijn als er een nieuwe invoer kan worden gedaan die de oude overschrijft.
Als ik dat nu doe plaats hij de nwe invoer een dag ernaast.
Niet met de code uit bericht#2, zet de datum in AK11, vul de tijden in, klik op de knop "uren invoer", en je kan zo vaak de tijden overschrijven als je wil.

Plaats eens het bestandje wat je hebt, ik heb het idee dat je allerlei code hebt toegevoegd waarvan je de werking niet helemaal begrijpt.
 
ok dat zou zo maar kunnen

Code:
Private Sub CommandButton3_Click()

'--------------------------------------------------------------------
'Plaatsen vd UREN bij de DATUM
vntdatum = Range("AK11").Value
If vntdatum = "" Then End

lngDag = CLng(Format(vntdatum, "dd"))
lngMaand = CLng(Format(vntdatum, "mm"))
Range("C7").Offset(4 * lngMaand - 4, lngDag - 1).Value = Range("AP11").Value

Range("AK11,AL11,AN11").ClearContents
Range("AK11").Activate

End Sub
Code:

groet Rob
 
Ook de code uit bericht#7 werkt bij goed, ik kan bij gelijke datum de tijd zo vaak overschrijven als ik wil.
Ook zie ik er niets raars aan waarom de code de volgende cel zou nemen.
Heb je de datum in AK11 goed ingevuld, was niet net voor en na middernacht bezig ;)
 
Laatst bewerkt:
Het blijkt dat als ik alleen de datum invul, dus bv. 24 ipv 24-1 dat het daaraan ligt.
Ik vond het juist wel handig dat als je in een bepaalde maand zit hij auto de maand achter de dag plaatst. Is dit simpel te regelen of is dat lastig. Scheelt elke invoer het streepje ertussen.

Het drukken op de knop met geen invoer de act cell weer op AK11. Lukt me niet
de actieve cel schiet dan weg (weet niet waarheen)
 
Waarom gebruik je niet de sneltoets CTRL+:, die is voor de datum van vandaag.
of
de functie
Code:
=VANDAAG()
.
 
Omdat het geregeld voorkomt dat de werkuren een paar dagen later worden geadministreerd worden. Daarom leek het handig als alleen de datumnr. ingevuld moet worden.
Scheelt een hoop "streepjes" :D
 
Het is me gelukt. als knop gebruikt met lege velden weer terug naar AK11.

Dus is alleen de vraag nog of het mogelijk is met alleen het dagnr invullen ipv xx-1. Mocht het mogelijk zijn dan hoef ik alleen de volledige datum in te typen als ik bv in Februari de uren van Januari verwerk.

Ben benieuwd

bijgevoegd de code ter controle of ik geen gekke dingen heb geschreven.
groet Rob



Code:
Private Sub CommandButton1_Click()

'--------------------------------------------------------------------
'Plaatsen vd UREN bij de DATUM
vntdatum = Range("AK11").Value
If vntdatum = "" Then
Range("AK11").Select
End
End If

lngDag = CLng(Format(vntdatum, "dd"))
lngMaand = CLng(Format(vntdatum, "mm"))
Range("C7").Offset(4 * lngMaand - 4, lngDag - 1).Value = Range("AP11").Value

Range("AK11,AL11,AN11").ClearContents
Range("AK11").Activate

End Sub
Code:
 
Als ik met het toetsenbord "25-1" invoer, dan zet excel dat bij mij automatisch om naar "25/01/2020", kijk maar in de formule balk naar de exacte waarde.
Onderstaande code loopt daarna goed.

Code:
Private Sub CommandButton3_Click()
    vntdatum = Range("AK11").Value
    If vntdatum <> "" Then
        lngDag = CLng(Format(vntdatum, "dd"))
        lngMaand = CLng(Format(vntdatum, "mm"))
        Range("C7").Offset(4 * lngMaand - 4, lngDag - 1).Value = Range("AP11").Value
        Range("AK11,AL11,AN11").ClearContents
    End If
    Application.Goto Range("AK11")
End Sub
Ik gebruik een iets andere logica ( If vntdatum <> "" Then ) en "application.goto" is de meest betrouwbare code om naar een cel te gaan.
 
OK, jij denk eigenlijk andersom.
Als AK11 is iets, dan doe je ding
en ga terug naar AK11.
Dat appl.goto wist ik niet als zijnde betrouwbaarder. goed om te weten

Als ik 25-1 invoer heb ik ook de omzetting naar 25/1/2020.

Als ik alleen 25 intik (wat mij dus handig leek omdat ik dan niet elke keer dat streepje hoef in te tikken) komt er 25/1/1990 te staan.
 
Misschien toch maar de dag en de maand invullen.
Excel valt terug naar de laagste waardes, 1900 of 1990 voor de jaren, en misschien wel 1 voor de maanden.
Deze maand klopt het nog, maar het kan zijn dat in februari als je 25 invult deze toch terug valt naar januari.
 
het was trouwens 1900. Ja heb je gelijk in. Als het niet met code kan dan doen we dat. Het had handig geweest, maar ik ben heeeeel blij met je code, uitleg en dank voor de moeite die hebt genomen.
 
Maar ik zag wel wat raars, als ik 25 invul dan ziet de code het toch als 24/01/1900, zal wel iets met het startpunt van de tijd te maken hebben.
 
Laatst bewerkt:
Maar als je de code laat lopen, komt deze bij de 24e terecht.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan