Kod:
Sub hesapla()
On Error Resume Next
If dur = 1 Then Exit Sub
txtGunSayisi = Empty
txtsaat = Empty
If ListBox1.ListIndex < 0 Or ListBox1.ListIndex > ListBox1.ListCount - 1 Then
If txtBitisTarihi = Empty Or txtBaslangicTarihi = Empty Then MsgBox "Başlangıç ve Bitiş tarihi boş olamaz.", vbCritical, "DİKKAT": Exit Sub
End If
If cbstat <> "Memur" Then
ReDim gunler(7)
Dim k As Integer, i As Integer, m As Integer, gun As Integer, hftgn As Integer, say As Integer
Dim trh As Date
gunler = Array("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar")
For k = 1 To 7
If gunler(k - 1) = cbhafta Then Exit For
Next
gun = (CDate(txtBitisTarihi) - CDate(txtBaslangicTarihi))
For i = 0 To gun
trh = CDate(txtBaslangicTarihi) + i
hftgn = Application.Weekday(trh, 2)
say = WorksheetFunction.CountIf(tnm.Range("S3:S289"), trh)
If k <> hftgn And say = 0 Then m = m + 1
Next i
txtGunSayisi = m
Else
txtGunSayisi = (CDate(txtBitisTarihi) - CDate(txtBaslangicTarihi)) + 1
End If
If cbIzinTuru.ListIndex = 1 Or cbIzinTuru.ListIndex = 2 Or cbIzinTuru.ListIndex = 4 Then
If txtBitissaat = Empty Or txtCikissaat = Empty Or cbvardiya = Empty Then Exit Sub
txtGunSayisi = Empty
If cbvardiya.ListIndex = 0 Or cbvardiya.ListIndex = 1 Then
If TimeValue(txtCikissaat) * 1 <= tnm.Cells(cbvardiya.ListIndex + 3, 23) And TimeValue(txtBitissaat) * 1 >= tnm.Cells(cbvardiya.ListIndex + 3, 25) Then
txtsaat = WorksheetFunction.Text(TimeValue(txtBitissaat) - TimeValue(txtCikissaat) - tnm.Cells(cbvardiya.ListIndex + 3, 24) * 1, "hh:mm")
Else
txtsaat = WorksheetFunction.Text(TimeValue(txtBitissaat) - TimeValue(txtCikissaat), "hh:mm")
End If
Else
txtsaat = WorksheetFunction.Text(TimeValue(txtBitissaat) - TimeValue(txtCikissaat), "hh:mm")
End If
End If
End Sub
*İzin bitiş tarihini saymaması gerek çünkü izin dönüş tarihi olarak geçiyor. Memur personeller hariç diğer tüm personellerde hafta tatili izni düşer sayılmaz. Örneğin 12.04.2022 başlama bitiş 14.04.2022 2 gün olarak hesaplaması gerek. Ama ne yazık ki 3 gün olarak hesaplıyor.