Listbox 2 tarih arası raporluları getirme

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Merhaba ustalar ekteki dosyada sayfayı listboxa alıyorum. Benim yapmak istediğim başlangıç ve bitiş tarihi kontrol ederek text box ay ve yıl yazarak sadece raporluları getirmesi .
Birde yapmak istediğim ÖRNEK personel1 25.07.2022 ile 14.08.2022 raporluymuş . 7.ayda 7 gün 8. ayda 14 gün olarak belirtmesi
teşekkür ediyorum ilignize şimdiden
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Userform üzerine 2 adet yeni ComboBox ekleyin. Combobox1 ve Combobox2
Önceki koyduğunuz Ay ve Tarih Textboxlarını silin

Userform kod sayfasındaki tüm kodları aşağıdakilerle değiştirin. Sizin kod yapısını aynen muhafaza ettim sadece eklemeler ve çıkarmalar yaptım.
C++:
Const sayfaad As String = "KAYITLAR"
Dim syfaADo As String
Dim Con As Object
Dim Rs As Object
Dim sql As String
Dim son As Long
Dim CombolarEnable As Boolean
Const ilkSatir As Byte = 3
Sub ilkSatirKontrol()
    son = ThisWorkbook.Sheets(sayfaad).Cells(Rows.Count, "A").End(3).Row
    If son < ilkSatir Then son = ilkSatir
End Sub
Sub SayfaAdKisalt()
    ilkSatirKontrol
    syfaADo = "[" & sayfaad & "$A" & ilkSatir & ":H" & son & "]"
End Sub
Private Sub ComboBox1_Change()
    If CombolarEnable Then
        Me.ListBox1.Clear
        If CDate(ComboBox1) < CDate(ComboBox2) Then
            Call Me.Listbox
        Else
            MsgBox "Başlangıç ve Bitiş Dönemlerini Kontrol edin"
        End If
    End If
End Sub
Private Sub ComboBox2_Change()
    If CombolarEnable Then
        Me.ListBox1.Clear
        If CDate(ComboBox1) < CDate(ComboBox2) Then
            Call Me.Listbox
        Else
            MsgBox "Başlangıç ve Bitiş Dönemlerini Kontrol edin"
        End If
    End If
End Sub
Private Sub UserForm_Activate()
    Application.ScreenUpdating = False
    'Me.StartUpPosition = 0
    'Me.Top = Application.Top + 260
    'Me.Left = Application.Left + Application.Width - Me.Width - 200
     With UserForm1
        .StartUpPosition = 0
        .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
        .Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
    End With
    Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Initialize()
    DonemleriCombolaraAl
    SayfaAdKisalt
    Set Con = CreateObject("adodb.connection")
    Con.Open "provider=microsoft.ace.oledb.12.0;data source=" & ThisWorkbook.FullName & ";extended properties=""excel 12.0;hdr=no"""
    Call Me.Listbox

End Sub
Sub DonemleriCombolaraAl()
    ilkSatirKontrol
    Tar1 = WorksheetFunction.Min(Worksheets(sayfaad).Range("E3:E" & son))
    Tar2 = WorksheetFunction.Max(Worksheets(sayfaad).Range("F3:F" & son))
    Date1 = DateSerial(Year(Tar1), Month(Tar1), 1)
    Date2 = DateAdd("m", 1, DateSerial(Year(Tar2), Month(Tar2), 1)) - 1
    Do Until Date1 > Date2
        ComboBox1.AddItem Format(Date1, "dd.mm.yyyy")
        'ComboBox2.AddItem Format(Date1, "yyyy mmmm")
        Date1 = DateAdd("m", 1, Date1)
        ComboBox2.AddItem Format(Date1 - 1, "dd.mm.yyyy")
    Loop
    ComboBox1.ListIndex = 0
    ComboBox2.ListIndex = ComboBox2.ListCount - 1
    CombolarEnable = True
End Sub
Sub Listbox()
    sql = "Select f1,f2,f3,f4,format([f5],""dd.mm.yyyy""),format([f6],""dd.mm.yyyy""),f7,f8 from " & syfaADo
    sql = sql + " where (not isnull(f2)) and Clng(Cdate(f5))>= " & CLng(CDate(Me.ComboBox1)) & " and Clng(Cdate(f6))<= " & CLng(CDate(Me.ComboBox2))
    sql = sql & " order by [f5]"
    With Me
        Set Rs = Con.Execute(sql)
        .ListBox1.ColumnCount = Rs.Fields.Count
        If Not Rs.EOF = True Then .ListBox1.Column = Rs.GetRows
        UserForm1.ListBox1.ColumnWidths = "40;70;70;120;80;80;40;50"
    End With
End Sub
Private Sub UserForm_Terminate()
    Rs.Close: Con.Close
    Set Con = Nothing
    Set Rs = Nothing
    sql = ""
    son = Empty
End Sub
 

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Teşekkür ediyorum ömer hocam ama ay yıl olarak kendim girerek olsa çok daha iyi olur bu şekilde tarih seçmek kafa karıştıyor
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Ay ve Yılı elle girmek en yaygın excele veri giriş hatalarındandır.
Yine de istiyorsanız yapılır.
Ama daha açıklayıcı olmalısınız.
Ay isimlerini mi elle yazaksınız?
Ş-Ç-İ-I-Ö- gibi harflere dikkat edecekmisiniz?
Ayın hepsini büyük mü yazacaksınız?
Ayın numarasınımı yazaksınız?

Sorular uzayıp gidiyor.
Ayları Textboxa elle yazmaktansa Combodan, Ocak-Şubat.... diye seçmenizi
Yılı da bir başka combodan seçmenizi ya da Textboxda nümeric giriş kontrolü ve minimum maksimum değer kontrolü yaparak girmenizi tavsiye ederim.

Geriye kalan Başlangıç AY ve YILI Combo yada Textboxlarından Başlangıç Tarihi elde etmek ve benzer şekilde diğer Combo ya da Textboxlardan Bitiş tarihi elde etmek.

Mevcut kodlar size ait ise kolaylıkla ya da cesaretinizi toplayıp biraz mücadele ile yapabileceğinize inanıyorum
 

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Ömer hocam ( Ayları Textboxa elle yazmaktansa Combodan, Ocak-Şubat.... diye seçmenizi ) bu şekilde ayarlabilrseniz ozaman cok daha iyi olur kodlar bana ait değil teşekkür edeirm hocam
 

arrow3441

Altın Üye
Katılım
31 Ekim 2022
Mesajlar
294
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
07-11-2024
Çok teşekkür ederim hocam elinize sağlık böyle daha iyi oldu
 
Üst