2012-01-09 14 views
5

Próbuję znaleźć kod VBA, aby określić liczbę dni tygodnia i dni weekendowych w danym zakresie dat za pomocą Access VBA.Znajdź liczbę dni tygodnia/weekendów w danym zakresie dat

Na przykład:

Begin Date - 1/1/2012 
End Date - 1/31/2012 

wynik powinien być:

Week days - 22 
Weekend days - 9 

Może ktoś pomóc z tym?

+0

Czy możesz użyć funkcji NETWORKDAYS? pseudokod: TotalDays za pośrednictwem DateDiff z dwiema datami funkcyjnych Run NETWORKDAYS w dwóch terminach Minus dni robocze od Totaldays na dni weekendowe. – jetgrrrl

+1

Funkcja NETWORKDAYS jest cenną funkcją arkusza programu Excel, ale nie istnieje w języku VBA. –

Odpowiedz

6

Te dwie funkcje obliczy liczbę dni robocze i dni weekend:

Function NumWeekendDays(dBegin As Date, dEnd As Date) As Long 
    Dim iPartial As Integer 
    Dim lBeginDay As Long 
    Dim lNumWeekendDays As Long 

    iPartial = DateDiff("d", dBegin, dEnd + 1) Mod 7 
    lBeginDay = 6 - DatePart("w", dBegin, vbMonday) 

    lNumWeekendDays = (DateDiff("d", dBegin, dEnd + 1) \ 7) * 2 
    If iPartial > 0 And lBeginDay - iPartial < 0 Then 
     If lBeginDay = -1 Then 
      lNumWeekendDays = lNumWeekendDays + 1 
     ElseIf iPartial - lBeginDay = 1 Then 
      lNumWeekendDays = lNumWeekendDays + 1 
     Else 
      lNumWeekendDays = lNumWeekendDays + 2 
     End If 
    End If 

    NumWeekendDays = lNumWeekendDays 

End Function 

Function NumWeekDays(dBegin As Date, dEnd As Date) As Long 
    NumWeekDays = DateDiff("d", dBegin, dEnd + 1) - NumWeekendDays(dBegin, dEnd) 
End Function 

Uwaga: znalazłem to najprostsze do obliczenia częściowego tygodniu dni weekendowe poprzez obliczenie zmiennej lBeginDay tak, że jeśli data rozpoczęcia była Poniedziałek, lBeginDay == 5 ... jeśli data rozpoczęcia to piątek, lBeginDay == 1, itp. Inne odmiany również powinny działać.

+0

Wystąpił błąd w tym przykładowym kodzie. Zwraca wartość 2, jeśli data zakończenia to piątek. "Jeśli iPartial> 0 I lBeginDay - iPartial <** = ** 0 Then" powinno być "Jeśli iPartial> 0 I lBeginDay - iPartial <0 Then" Kiedy "<=" zostanie zmienione na "<", działa świetnie. – Brad

+0

@ Brad- Naprawiłem błąd. Dzięki! –

Powiązane problemy