Đá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
Heart Chạy lệnh tự động theo thời gian định sẵn minhriohtn 1 101 22-12-16, 11:22 AM
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 43 17,376 18-12-16, 03:37 PM
Bài mới nhất: huuduy.duy
  Hướng Dẫn Enter xuống dòng trong textbox thanhquyt 2 107 18-12-16, 09:43 AM
Bài mới nhất: thanhquyt
  Lấy record từ tbl1 làm thành field trong tbl2. MinhnHang 5 164 13-12-16, 03:05 PM
Bài mới nhất: ongke0711
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 9 298 09-12-16, 06:11 PM
Bài mới nhất: maidinhdan

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ơ