Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hàm] Tính số ngày làm việc trong tuần trong một khoảng thời gian
#1
Chào các bạn,
Trong quá trình làm một số form liên quan đến nhân sự, ngày công nên mình có nhu cầu tính số ngày làm việc trong một khoảng thời gian báo cáo. Có cty thì làm nguyên ngày thứ 7, có cty nghỉ hoặc làm nữa ngày thứ 7 do đó số ngày làm việc cũng khác nhau. Để cho tiện mình cũng đã làm 1 cái hàm TinhNgayLV để xử lý trường hợp này chia sẽ cùng các bạn.

[Hình: Form.png]

- Tạo Option group với 3 options : 1. Nghỉ ngày thứ 7; 2. Làm nữa ngày thứ 7; 3. Làm nguyên ngày thứ 7.
- Textbox txtTuNgay, txtDenNgay, txtTongSoNgayLV.
- Code như sau:
Mã PHP:
Option Compare Database
Option Explicit

Function TinhSoNgayLV(dtTuNgay As DatedtDenNgay As Date) As Double
On Error 
GoTo XuLy_Loi
   Dim dtNgay   
As Date
   Dim iThuTrongTuan 
As Integer

   
'Kiem tra ngay co hop le không?
   If dtTuNgay > dtDenNgay Then
       MsgBox "Ngay khong hop le! Den ngày > Tu ngày", vbCritical, "Thông báo"
       Exit Function
   End If

   TinhSoNgayLV = 0
   
   For dtNgay = dtTuNgay To dtDenNgay
       iThuTrongTuan = Weekday(dtNgay)
       Select Case Me.fmeNgayLV
       Case 1
           If iThuTrongTuan <> vbSunday And iThuTrongTuan <> vbSaturday Then
               TinhSoNgayLV = TinhSoNgayLV + 1
           End If
       Case 2
           If iThuTrongTuan <> vbSunday Then
               If iThuTrongTuan <> vbSaturday Then
                   TinhSoNgayLV = TinhSoNgayLV + 1
               Else
                   TinhSoNgayLV = TinhSoNgayLV + 0.5
               End If
           End If
       Case 3
           If iThuTrongTuan <> vbSunday Then
               TinhSoNgayLV = TinhSoNgayLV + 1
           End If
       End Select
   Next dtNgay

XuLy_Loi_Exit:
   On Error Resume Next
   Exit Function

XuLy_Loi:
   MsgBox "Loi nay da phat sinh:" & vbCrLf & vbCrLf & _
          "So loi: " & Err.Number & vbCrLf & _
          "Loi do: TinhSoNgayLV" & vbCrLf & _
          "Dien giai: " & Err.Description, vbCritical, _
          "Phát sinh loi!"
   Resume XuLy_Loi_Exit
End Function

Private Sub fmeNgayLV_AfterUpdate()
Me.txtTongSoNgayLV = TinhSoNgayLV(Me.txtTuNgay, Me.txtDenNgay)
End Sub

Private Sub txtDenNgay_AfterUpdate()
Me.txtTongSoNgayLV = TinhSoNgayLV(Me.txtTuNgay, Me.txtDenNgay)
End Sub

Private Sub txtTuNgay_AfterUpdate()
Me.txtTongSoNgayLV = TinhSoNgayLV(Me.txtTuNgay, Me.txtDenNgay)
End Sub 
 


Demo
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tranthanhan1962 , bvchauthanh , huuduy.duy


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Đóng Access khi máy tính chuyển sang standby Phung Duc 3 60 2 Giờ trước
Bài mới nhất: ongke0711
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 49 18,031 21-03-17, 10:20 PM
Bài mới nhất: maidinhdan
  [Help] Add Ngày tháng lên textbox HoangManh 4 92 16-03-17, 03:03 PM
Bài mới nhất: trangdv.pchg
  Tránh xung đột dữ liệu trong access quocdung9999 17 2,013 11-03-17, 04:12 PM
Bài mới nhất: quocdung9999
Heart Chạy lệnh tự động theo thời gian định sẵn minhriohtn 1 156 22-12-16, 11:22 AM
Bài mới nhất: ongke0711

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ