• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

İzin kayıt sistemi hk.

Benim tavsiyem izne çıkan kişinin kayıtlarını tuttuğunuz sayfaya bir tarih sütunu ekleyip tarihe göre tersten sıralatın.
(Ben alışkanlık olarak, bir kayıt sayfasında, benzersiz bir sütun kullanmak adına saniye belirten bir sütun kaydı yaparım)
Sonra da şu kodu kullanın:

Kod:
Private Sub ComboBox1_Click()
k = ActiveSheet.Name
Sheets("Sayfa1").Select
On Error Resume Next
Set izinli = Sheets("Sayfa1").Range("B:B").Find(ComboBox1.Value, Lookat:=xlWhole)
izinlimi = izinli.Offset(0, 3).Value
    If izinlimi > CDate(Today) Then
    MsgBox ("Bu kişi şu anda izindedir")
    Sheets(k).Select
    Exit Sub
    End If
Sheets(k).Select
End Sub
 
bu şekilde olmuyor hocam yinede teşekkür ederim..

çünkü örnek olarak 02.08.2021 - 05.08.2021 tarihinde girilen izin var misal
03.08.2021 - 10.08.2021 tarihinde izin giriliyor bu karısıklıgı cozmem için farklı bir yol arıyorum
 
Aşağıdaki ilaveyi belirtilen yere girip dener misin.
C++:
If say > 0 Then
    satir = s1.Range("B:B").Find(aranan).Row
  
    '.......................
    ' Aray aşağıdaki satırları kopyalayıp dener misin.
    If (s1.Cells(satir + say - 1, 4) >= CDate(TextBox4.Value) And _
        s1.Cells(satir + say - 1, 4) <= CDate(TextBox5.Value)) Or _
        (s1.Cells(satir + say - 1, 5) >= CDate(TextBox4.Value) And _
        s1.Cells(satir + say - 1, 5) <= CDate(TextBox5.Value)) Then
        MsgBox "İzin tarihi uygun değil"
        TextBox4 = ""
        TextBox5 = ""
        TextBox4.SetFocus
        Exit Sub
    End If
    '...................................
    s1.Rows(satir + say).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 
Son düzenleme:
229166

kodu doğru alana yapıstırdıgımı düşünüyorum sonuç sağdaki gibi zaten uyarı vsde vermedi hocam textboxa yazarken
 
Kodda hata görmüş ve düzeltmiştim. Hızlı davranıp ben değiştirene kadar kullanmılşsınız=)
Düzeltilmiş halini dener msiin
 
Hocam emeğine sağlık, kaydet aşamasına gelmeden İZİN BAŞLANGIÇ tarihi yazdıktan sonra uyarının cıkma ihtimali var mı? zaten uyarı kısmı izin başlangıç girildikten sonra mevzu bitmiş demektir:)
 
Ben de şöyle bir soru sorayım.
Önce tarih sonra isim girerse nasıl yapacağız?
 
yok hocam önce isim seçilecek, seçilmesi lazım yani. Yada orayada seçilmeden textbox aktif olmasın mı koymak lazım
 
Uyarıyı ha Kaydet deyince ha tarih girince versin. Sizin için değişen nedir ki?

Mesela önceki kayıtlarınızda 1.07.2021 - 15.07.2021 tarihli bir izin tanımlanmış olsun.
Siz 25.06.2021 tarihli bir başlangıç tarihi girerseniz kontrol edince sorun olmayacak.
Taki bitiş tarihine 1.07.2021 tarihinden küçük bir değer girmeyene kadar.

Hem TextBox4 de, Hem TextBox5 de kontrol yapmak yerine bu şekilde daha sade oluyor.
Bu sebeple yukarıdaki verdiğim yöntemin sizin için daha doğru olduğunu düşünüyorum.
 
Detaylı inceledim şimdi Ömer hocam senin kodda olmadı malesef. İstersen örnek dosyaya ekle

05.08.2021 - 15.08.2021 gir, sonra 06.08.2021 - 07.08.2021 gir.

Olmaması lazımken oluyor çok ilginç
 
Kod:
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'izin bşlama tarihi textbox çıkışı
If TextBox4.Value > "" Then
    Dim sf As Worksheet
    Set sf = Sheets("Sayfa1")
    son = sf.Cells(Rows.Count, "B").End(xlUp).Row
    tx4 = CDate(TextBox4)
  
  
    For i = 2 To son
  
    If Cells(i, "B") = ComboBox1.Text Then
        If CDate(TextBox4) >= CDate(Cells(i, "D")) And CDate(TextBox4) <= CDate(Cells(i, "E")) Then
        MsgBox "Çakışan İzni Bulunmakta Lütfen Kontrol Ediniz!"
        Exit Sub
        ElseIf CDate(TextBox4) = CDate(Cells(i, "D")) Then
        MsgBox "Çakışan İzni Bulunmakta Lütfen Kontrol Ediniz!"
        Exit Sub
        End If
    End If
    Next i
  
End If
End Sub

şu şekilde çözüldü, okutkan hocama teşekkürler. Faydalanmak isteyen olur diye ekledim..
Konu tamamlanmıştır :)
 
Biraz uğraştım. Yaptıklarımı ekleyeyim.

İlk gönderdiğimi dikkate almayın. Buton ve CommoBoxların TabIndexlerini 1 den 8 e kadar özellikler penceresinden ayarlayın.

CommandButton1 kodlarının baş tarafına aşağıdakini ekleyin.
C++:
    If ComboBox2.ListIndex < 0 Then
        MsgBox "İzin kullanım yılı seçin"
        ComboBox2.SetFocus
        Exit Sub
    End If


TextBox4 ve 5 için aşağıdakileri ekleyin.
C++:
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Tarihkontrol
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Tarihkontrol
End Sub


Userform Intialize kodlarını aşağıdkiyle değiştirin
C++:
Private Sub UserForm_Initialize()
    CommandButton1.Enabled = False
    CommandButton1.BackColor = &HE0E0E0
    son = Sheets("personeller").Range("B" & Rows.Count).End(3).Row
    For i = 2 To son
        ComboBox1.AddItem Sheets("personeller").Range("B" & i).Value
    Next
End Sub


Ve aşağıdaki kodları yapıştırın.
C++:
Sub Tarihkontrol()
Dim s1 As Worksheet, SonSatir As Integer
Dim aranan As String, say As Long, satir As Long
    If TextBox4 = "" Or Not IsDate(TextBox4) Then TextBox4.SetFocus: GoTo TarihHata
    If TextBox5 = "" Or Not IsDate(TextBox5) Then TextBox5.SetFocus: GoTo TarihHata
    If TextBox5 <= TextBox4 Then TextBox4.SetFocus: GoTo TarihHata
    Set s1 = Sheets("Sayfa1")
    aranan = Trim(ComboBox1.Text)
    say = WorksheetFunction.CountIf(s1.Range("B1:B" & Rows.Count), aranan)
    If say > 0 Then
        satir = s1.Range("B:B").Find(aranan).Row
        For i = satir To satir + say - 1
            If (CDate(TextBox4.Value) >= s1.Cells(i, 4) And CDate(TextBox4.Value) <= s1.Cells(i, 5)) Then
                MsgBox "İzin Başlangıç Tarihi" & vbCrLf & s1.Cells(i, 4) & " - " & s1.Cells(i, 4) & " arasında olmamalı."
                TextBox4.SetFocus
                GoTo TarihHata
            End If
            If (CDate(TextBox5.Value) >= s1.Cells(i, 4) And CDate(TextBox5.Value) <= s1.Cells(i, 5)) Then
                MsgBox "İzin Bitiş Tarihi" & vbCrLf & s1.Cells(i, 4) & " - " & s1.Cells(i, 4) & " arasında olmamalı."
                TextBox5.SetFocus
                GoTo TarihHata
            End If
            If (CDate(TextBox4.Value) < s1.Cells(i, 4) And CDate(TextBox5.Value) > s1.Cells(i, 5)) Then
                MsgBox "İzin Tarihleri" & vbCrLf & s1.Cells(i, 4) & " - " & s1.Cells(i, 4) & " aralığını kapsamamalı."
                TextBox4.SetFocus
                GoTo TarihHata
            End If
        Next i
    End If
    TextBox6.Text = CLng(CDate(TextBox5.Text)) - CLng(CDate(TextBox4.Text)) + 1
    TextBox4 = Format(TextBox4, "dd.mm.yyyy")
    TextBox5 = Format(TextBox5, "dd.mm.yyyy")
    CommandButton1.Enabled = True
    CommandButton1.BackColor = &HFFFF&
    Exit Sub
TarihHata:
    CommandButton1.Enabled = False
    CommandButton1.BackColor = &HE0E0E0
    TextBox6 = ""
End Sub
 
Geri
Üst