ongke0711 > 11-12-16, 12:31 PM
Option Compare Database
Option Explicit
Public Function fWorkingdays(ByVal datTuNgay As Date, ByVal datDenNgay As Date, ByVal bytSoNgayLVTuan As Byte, _
Optional ByVal blnTinhNgayLe As Boolean) As Long
'-------------------------------------------------------------------------------------------------
'Muc dich: Tính so ngày làm viec giua 2 tham so (datTuNgay) và (datDenNgay).
'Có tùy chon tru ngày nghi (Thu 7, CN) và tru các ngày Le
'bytSoNgayLVTuan : là so ngày lam viec trong 1 tuan. 5: neu nghi thu 7 + CN; 6: nêu chi nghi CN
'blnTinhNgayLe : là 'True' neu có tru ngay Le; 'False' neu không tru ngay Le
'-------------------------------------------------------------------------------------------------
'Const bytSoNgayLVTuan 'Khai bao so ngay lam viec trong tuan
'Khai bao ten table Ngay Nghi.
Const cstrTenTableNgayLe As String = "tblNgayLe"
'Khai bao ten truong (Field) luu Ngay Nghi trong table Ngay Nghi.
Const cstrTenFieldNgayLe As String = "NgayLe"
Dim bytSunday As Byte
Dim intWeekdayTuNgay As Integer
Dim intWeekdayDenNgay As Integer
Dim lngDays As Long
Dim datDateTemp As Date
Dim strDateFrom As String
Dim strDateTo As String
Dim lngNgayLe As Long
Dim strFilter As String
'Dao nguoc TuNgay, DenNgay neu nhap lieu nguoc lai.
If datTuNgay > datDenNgay Then
datDateTemp = datTuNgay
datTuNgay = datDenNgay
datDenNgay = datDateTemp
End If
'Xac dinh Weekday cua Sunday.
'Nêu chon Sat là ngày dau tuan thì Weekday cua Sunday=7, Sunday là ngày dau tuan thì Weekday cua Sunday=1.
bytSunday = Weekday(vbSunday, vbMonday)
'Xac dinh Weekdays cua [TuNgay], [DenNgay].
intWeekdayTuNgay = Weekday(datTuNgay-1, vbMonday)
intWeekdayDenNgay = Weekday(datDenNgay, vbMonday)
intWeekdayTuNgay = intWeekdayTuNgay + (intWeekdayTuNgay = bytSunday)
intWeekdayDenNgay = intWeekdayDenNgay + (intWeekdayDenNgay = bytSunday)
lngDays = intWeekdayDenNgay - intWeekdayTuNgay - (bytSoNgayLVTuan * (intWeekdayDenNgay < intWeekdayTuNgay))
'Them so ngay lam viec ung voi so tuan giua TuNgay va DenNgay
lngDays = lngDays + (bytSoNgayLVTuan * DateDiff("w", datTuNgay-1, datDenNgay, vbMonday, vbFirstFourDays))
'Dem so ngay Le trong khoang thoi gian TuNgay va DenNgay
If blnTinhNgayLe And lngDays > 0 Then
strTuNgay = Format(datTuNgay, "yyyy\/mm\/dd")
strDenNgay = Format(datDenNgay, "yyyy\/mm\/dd")
strFilter = cstrTenFieldNgayLe & " Between #" & strTuNgay & "# And #" & strDenNgay & "# And Weekday(" & cstrTenFieldNgayLe & ", 2) <= " & bytSoNgayLVTuan & ""
lngNgayLe = DCount("*", cstrTenTableNgayLe, strFilter)
End If
fWorkingdays = lngDays - lngNgayLe
End Function
Public Function fCalcWorkingDays(dteTuNgay As Date, dteDenNgay As Date) As Integer
Dim intCount As Integer
intCount = 0
Do While dteTuNgay <= dteDenNgay
Select Case Weekday(dteTuNgay)
Case Is = 1
'La ngày CN -> không dem'
Case Is = 2, 3, 4, 5, 6, 7 'Tu thu 2 - thu 7'
'Kiem tra xem có nam trong table tblNgayLe không?'
If DCount("*", "tblNgayLe", "[NgayLe] = #" & Format(dteTuNgay, "mm/dd/yyyy") & "#") < 1 Then 'Không phai ngay le'
intCount = intCount + 1
End If
End Select
dteTuNgay = dteTuNgay + 1
Loop
fCalcWorkingDays = intCount
End Function
btamsgn > 06-06-23, 11:56 AM