2012-01-09 43 views
5

Tôi đang tìm một số mã VBA để xác định số ngày trong tuần và ngày cuối tuần trong một phạm vi ngày nhất định bằng Access VBA.Tìm số ngày trong tuần/cuối tuần trong một phạm vi ngày nhất định

Ví dụ:

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

quả nên là:

Week days - 22 
Weekend days - 9 

bất cứ ai có thể giúp đỡ với điều này?

+0

Bạn có thể sử dụng chức năng NETWORKDAYS không? Mã Pseudo: TotalDays qua một datediff hai ngày Run NETWORKDAYS chức năng trên hai ngày Trừ Ngày làm việc từ Totaldays cho ngày cuối tuần. – jetgrrrl

+1

Hàm NETWORKDAYS là một hàm bảng tính Excel có giá trị, nhưng nó không tồn tại trong VBA. –

Trả lời

6

Hai chức năng sẽ tính toán số ngày trong tuần và ngày cuối tuần:

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 

Lưu ý: Tôi tìm thấy nó đơn giản nhất để tính toán những ngày cuối tuần phần tuần bằng cách tính toán biến lBeginDay để nếu ngày bắt đầu là Thứ hai, lBeginDay == 5 ... nếu ngày bắt đầu là Thứ Sáu, lBeginDay == 1, v.v ... Các biến thể khác cũng sẽ hoạt động.

+0

Có lỗi trong mã mẫu này. Nó trả về 2 nếu ngày kết thúc là thứ Sáu. "Nếu iPartial> 0 Và lBeginDay - iPartial <** = ** 0 Sau đó" nên là "Nếu iPartial> 0 Và lBeginDay - iPartial <0 Sau đó" Khi "<=" được thay đổi thành "<" thì nó hoạt động rất tốt. – Brad

+0

@ Brad- Tôi đã sửa lỗi. Cảm ơn! –

Các vấn đề liên quan