• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Planning

Status
Niet open voor verdere reacties.

Martijn156

Gebruiker
Lid geworden
11 sep 2008
Berichten
38
Hoi!
Ik ben een planning aan het maken in excel 2003. Nu moet ik een einddatum en tijd invoeren waardoor de begindatum en tijd automatisch worden aangemaakt. Heb nu 3 kolommen: de activiteit, hoeveel uur dit duurt en datum met tijd (dd-mm-jj uu:mm). Nu is het zo dat een werkdag van 9-17uur is. Is he dan ook mogelijk dat de uren worden berekend tussen 9 en 17uur???
Alvast bedankt!
 
Gekke vraag, maar dit lijkt op huiswerk.
Klopt dat?
 
Antwoord

Nee het is voor mijn werk. Ik vul nu de planning handmatig in (helemaal) maar zou liever zien dat ik 1 datum invoer daar alle activiteiten een standaard aantal uren bedragen. Is dit een typische huiswerkvraag of een domme vraag??? Heb heel wat geprobeerd maar ik krijg het niet voor elkaar
 
Je maakt je het leven veel eenvoudiger door een echt planningpakket te gebruiken.
Naast Microsoft Projects zijn er in de Shareware/Freeware omgeing genoeg te vinden.
 
dit kan wel natuurlijk, eventueel in VBA. Maar je wil zeker ook rekening houden met werkdagen (e.g. weekenden tellen niet als werkdag) of maakt dat niet uit?
 
Best een lastig klusje hoor, zeker als je rekening moet houden met weekenden, vakantiedagen e.d.
 
Ik heb het opgelost met een klein stukje VB code, die kan je of in het betreffende worksheet laten of in het bestand persnlk.xls (dan kan je die functie altijd gebruiken).

Code:
Function BerekenStart(EindDatum As Date, DoorloopTijd As Double) As Date
Dim BeginWD As Date
Dim EindWD As Date
Dim HulpDatum As Date
Dim Hulp As Integer

BeginWD = #9:00:00 AM#
EindWD = #5:00:00 PM#

BerekenStart = EindDatum - CDate(DoorloopTijd / 24)

'eerst controleren of het starttijdstip binnen de gestelde werkuren valt, zo niet aanpassen
HulpDatum = CDate(Hour(BerekenStart) & ":" & Minute(BerekenStart))

While HulpDatum > EindWD Or HulpDatum < BeginWD
    BerekenStart = BerekenStart - (1 + BeginWD - EindWD)
    HulpDatum = CDate(Hour(BerekenStart) & ":" & Minute(BerekenStart))
Wend

'controleer of de datum een werkdag is, zoniet aanpassen
Hulp = Weekday(BerekenStart, vbMonday)
If Hulp >= 6 Then
    BerekenStart = BerekenStart - Hulp + 5
End If

End Function

Voor gebruik zie ook bijgevoegd excel. Zoals hij nu is heb ik begin- en eindtijd hard ingeklopt, dat kan je ook nog zo maken dat je die als variabele in de functie meegeeft (of eventueel optioneel met defaults 9 - 17) laat maar weten als je hier behoefte aan hebt.
 

Bijlagen

Laatst bewerkt:
Vragen nav

Hartstikke bedankt hiervoor! Heb het bestandje gedownload en zit net even in excel 2007 maar daar krijg ik bij startdatum geen datum of tijd :( Ben niet goed bekend met VBA maar moet ik de code ergens invoegen of zou het bestand opzich al goed moeten zijn?
 
In principe zou het in 2007 gewoon moeten werken, controleer je beveiligings instellingen eens. Het zou zomaar kunnen dat dit soort functies niet zijn toegesteen (is standaard zo in 2007).

Op zich zou de code dus moeten werken als je bijgevoegd bestand opent. Alleen als je dezelfde functionaliteit in een ander bestand ook wil hebben moet je die code dus in je persnlk.xls plakken.
 
Laatst bewerkt:
Bedankt

Bedankt voor alles! Het systeem werkt erg goed! Ben er erg blij mee:thumb:
 
En toch gaat het nog ergens fout. Als ik de doorlooptijd op 100 uur zet dan geeft hij 12-9-2008 om 10:00 uur aan, wat niet kan kloppen.
 
Paul heeft helemaal gelijk, gaat wel goed voor korte doorlooptijden (< 2 werkdagen).

Ik heb hem aangepast, nu moet hij wel goed gaan bij doorlooptijden meer dan een paar dagen.
 

Bijlagen

Vragen over macro

Naar aanleiding van dit antwoord vind ik het wel boeiend worden. Als ik het goed begrijp kan ik nu in het bestand codes aanpassen waardoor deze functie uitgebreid kan worden. Als ik BerekenStart = EindDatum - CDate(DoorloopTijd / 24) verander in:
BerekenStart = StartDatum + CDate(DoorloopTijd / 24) dan worden de doorlooptijden bij de begindatum opgeteld (tegenovergestelde als bedoeld)
Wat betekent precies 'HulpDatum'??
 
je moet even opletten, je zit nu nog in de originele (=foutieve) code te knutselen. Zie het voorgaande bestand voor de aangepaste code (iets andere insteek).

Hulpdatum is een variabele waarmee gerekend wordt, hier wordt zeg maar een tussen-uitkomst in geparkeerd of iets soortgelijks.

Voor de zekerheid, de juiste code is dus:

Code:
Function BerekenStart(EindDatum As Date, DoorloopTijd As Double) As Date
Dim BeginWD As Date
Dim EindWD As Date
Dim UrenWD As Double
Dim HulpDatum As Date
Dim HulpInt As Integer
Dim AantWerkDgn As Double
Dim Hulp

BeginWD = #9:00:00 AM#
EindWD = #5:00:00 PM#

RestTijd = DoorloopTijd
HulpDatum = EindDatum

UrenWD = (CDbl(EindWD) - CDbl(BeginWD)) * 24
AantWerkDgn = DoorloopTijd / UrenWD

If AantWerkDgn >= 1 Then
    While AantWerkDgn >= 1
        HulpDatum = HulpDatum - 1
        HulpInt = Weekday(HulpDatum, vbMonday)
        If HulpInt >= 6 Then
            HulpDatum = HulpDatum - HulpInt + 5
        End If
        AantWerkDgn = AantWerkDgn - 1
    Wend
End If

BerekenStart = HulpDatum - CDate(AantWerkDgn * UrenWD / 24)

'eerst controleren of het starttijdstip binnen de gestelde werkuren valt, zo niet aanpassen
HulpDatum = CDate(Hour(BerekenStart) & ":" & Minute(BerekenStart))

While HulpDatum > EindWD Or HulpDatum < BeginWD
    BerekenStart = BerekenStart - (1 + BeginWD - EindWD)
    HulpDatum = CDate(Hour(BerekenStart) & ":" & Minute(BerekenStart))
Wend

'controleer of de datum een werkdag is, zoniet aanpassen
HulpInt = Weekday(BerekenStart, vbMonday)
If HulpInt >= 6 Then
    BerekenStart = BerekenStart - Hulp + 5
End If


End Function
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan