Workday Functie in VBA (Excel)

Status
Niet open voor verdere reacties.

JHABEK

Gebruiker
Lid geworden
21 dec 2009
Berichten
11
Hallo iedereen,

Ik maak gebruik van een macro om een planning van me te automatiseren. In deze planning wordt op basis van de leverdatum van het product, een datum berekend waarop bepaalde werkzaamheden gereed moeten zijn zodat de leverdatum gerespecteerd kan worden.

Voorbeeld:
Leverdatum product is 01-03-2010
Benodigde verwerkingstijd = 5 dagen
Datum Werkzaamheden gereed = Leverdatum - 5 Werkdagen = 22-02-2010

Ik maak in mijn macro gebruik van de Workday functie, maar ik krijg het niet voor elkaar deze functie terug te laten tellen. Ik weet dat ik het 2e argument negatief moet maken, maar als ik dit doe door simpelweg een minteken toe te voegen, werkt de code niet. Wat doe ik fout? De gebruikte code:

dl.Offset(0, 8).Value = WorksheetFunction.WorkDay(dl.Offset(0, 6).Value, dl.Offset(0, 7).Value)
Dit werkt wel, maar telt de toekomst in. Deze code:

dl.Offset(0, 8).Value = WorksheetFunction.WorkDay(dl.Offset(0, 6).Value, -dl.Offset(0, 7).Value)

Zorgt ervoor dat de macro niet wordt afgewerkt.

Wie helpt me met deze (waarschijnlijk oersimpele) fout?
 
Hm.... dit werkt niet met negatief. Trekt er gewoon 5 dagen af. Positief werkt wel (+5), resultaat is dan 27-02-2010.

Code:
Sub test()
Dim dl As Date

dl = Now()


MsgBox (DateSerial(1900, 1, 1) + (WorksheetFunction.WorkDay(dl, -5)))


End Sub
 
Laatst bewerkt:
OK. Dit dan!

Code:
Sub test()
Dim dl As Date
Dim i As Integer

i = 0

dl = Date
wd = WorksheetFunction.WorkDay(DateSerial(Year(dl), Month(dl), Day(dl) - i), 5)


Do While wd <> dl
    i = i + 1
    wd = WorksheetFunction.WorkDay(DateSerial(Year(dl), Month(dl), Day(dl) - i), 5)
Loop
MsgBox DateSerial(Year(dl), Month(dl), Day(dl) - i)


End Sub
 
Hallo Nire,

Alvast bedankt voor je antwoord!
De reden waarom ik de code zo heb geschreven als in mijn eerste post, is omdat de verwerkingstijd afhankelijk is van het soort order. Elders in de macro wordt dus ook de juiste verwerkingstijd gezocht in een database en toegevoegd aan deze order.

In de Help van de Workday-functie staat ook duidelijk omschreven dat de functie kan terugtellen. Ik zou dus toch graag een manier vinden waarop ik dit voor elkaar krijg.
 
Dat kan ik me voorstellen.

Echter, mijn code werkt ook gewoon:

vervang in mijn code 5, door de verwerkingstijd
vervang dl = date door de datum van de order

de laatste msgbox geeft het gewenste resultaat
DateSerial(Year(dl), Month(dl), Day(dl) - i)
 
Laatst bewerkt:
Zoals verwacht was de fout vrij simpel, het moet zijn:

Code:
dl.Offset(0, 8).Value = WorksheetFunction.WorkDay(dl.Offset(0, 6).Value, -(dl.Offset(0, 7).Value))

Er moeten dus haakjes om het 2e argument staan.
 
Allemachtig. Hoe simpel kan het zijn.

Goed dat je de oplossing post! :thumb:
 
Allemachtig. Hoe simpel kan het zijn.

Goed dat je de oplossing post! :thumb:

Ik stoor mezelf ook altijd aan topics waar het antwoord niet bij wordt gezet, dus moet ik wel. Anders krijg je zoiets van de pot verwijt de ketel... ;)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan