Listbox a veri aldırmada hata

Katılım
26 Kasım 2012
Mesajlar
67
Excel Vers. ve Dili
Office 2016 / Türkçe
Herkese Merhabalar.Gelirler ve Giderler adında iki sayfam var bunlarda 3. sütunlardaki tarih aralığına göre listbox1 e gelirleri listbox2 ye de giderleri listeliyor fakat listelenecek veri yok sa hata veriyor.Hatayı ortadan nasıl kaldırabilirim lütfen yardımlarınızı rica ediyorum.Aşağıdaki kodu kullanıyorum. Vba bilgim yok denecek kadar az.Kodu da başka bir koddan kendime uyarladım.Teşekkürler.



Private Sub CommandButton1_Click()

If IsDate(TextBox1.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
If IsDate(TextBox2.Value) = False Then MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub


bastarih = CDbl(CDate(TextBox1.Value))
sontarih = CDbl(CDate(TextBox2.Value))
Satir = 0
On Error Resume Next
ListBox1.RowSource = ""
ListBox1.Clear
On Error GoTo 0

ReDim veri_dizisi(1 To 22, 1 To 1000000) ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır sanki bos bir excel sayfası gibi.

With Worksheets("GELİRLER")

For i = 2 To .Cells(Rows.Count, 1).End(3).Row 'burada bizim satış tablosunun dolu satırlarının sayısını buluyoruz.


'if ile ilk satıra bakıyoruz bizim istediğimiz kritere uyuyormu. yani kayıt tatihi bizim istediğimiz satırlar arasındamı.Evet ise bir alt bolumdeki yeni tabloyu dolduracağız.

If CDate(.Cells(i, 3).Value) >= bastarih And CDate(.Cells(i, 3).Value) <= sontarih Then 'tarihlerin bakılacağı sütun

'-------------------------------------------

Satir = Satir + 1
For Sutun = 1 To 21
veri_dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
Next Sutun

If IsNumeric(.Cells(i, 5)) = True Then
deg = deg + Round(.Cells(i, 5).Text, 2) * 1
End If ' tutar toplamlarını hesaplamak için


End If
'eğer satış sayfasındaki ilk satır bizim istediğimiz satır ise ilk olusturduğumuz bos tablonun ilk satırına ve sutunlarına satış sayfasındaki ilgili satırı alma işlemi yapılıyor.
'Artık bizim Veri_dizini tablomuzun 1 satır ve 21 sutunu satış tablosunun ilk satırı ve sutunları aynı oldu..
'Burda aslında sabit veriler arasında işimize yarayanları süzüp veri_dinzi tablosuna atıyoruz.

'-----------------------------------------------
Next i 'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.

End With


ReDim Preserve veri_dizisi(1 To 22, 1 To Satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.



ListBox1.Column = veri_dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.
'TextBox18.Text = ListBox1.ListCount 'burda listboxta kaç tane satır varsa textboxa onu yaz dedik.



If IsDate(TextBox1.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
If IsDate(TextBox2.Value) = False Then MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub


bastarih = CDbl(CDate(TextBox1.Value))
sontarih = CDbl(CDate(TextBox2.Value))
Satir = 0
On Error Resume Next
ListBox2.RowSource = ""
ListBox2.Clear
On Error GoTo 0

ReDim veri_dizisi(1 To 22, 1 To 1000000) ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır sanki bos bir excel sayfası gibi.

With Worksheets("GİDERLER")

For i = 2 To .Cells(Rows.Count, 1).End(3).Row 'burada bizim satış tablosunun dolu satırlarının sayısını buluyoruz.


'if ile ilk satıra bakıyoruz bizim istediğimiz kritere uyuyormu. yani kayıt tatihi bizim istediğimiz satırlar arasındamı.Evet ise bir alt bolumdeki yeni tabloyu dolduracağız.

If CDate(.Cells(i, 3).Value) >= bastarih And CDate(.Cells(i, 3).Value) <= sontarih Then 'tarihlerin bakılacağı sütun

'-------------------------------------------
Satir = Satir + 1
For Sutun = 1 To 21
veri_dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
Next Sutun

If IsNumeric(.Cells(i, 5)) = True Then
deg = deg + Round(.Cells(i, 5).Text, 2) * 1
End If ' tutar toplamlarını hesaplamak için


End If
'eğer satış sayfasındaki ilk satır bizim istediğimiz satır ise ilk olusturduğumuz bos tablonun ilk satırına ve sutunlarına satış sayfasındaki ilgili satırı alma işlemi yapılıyor.
'Artık bizim Veri_dizini tablomuzun 1 satır ve 21 sutunu satış tablosunun ilk satırı ve sutunları aynı oldu..
'Burda aslında sabit veriler arasında işimize yarayanları süzüp veri_dinzi tablosuna atıyoruz.

'-----------------------------------------------
Next i 'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.

End With

ReDim Preserve veri_dizisi(1 To 22, 1 To Satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.

ListBox2.Column = veri_dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.


End Sub
 
Katılım
31 Aralık 2014
Mesajlar
1,845
Excel Vers. ve Dili
Excel 2010
Merhaba
Aşağıdaki gibi deneyelim.
Kod:
Private Sub CommandButton1_Click()

If IsDate(TextBox1.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
If IsDate(TextBox2.Value) = False Then MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
bastarih = CDbl(CDate(TextBox1.Value))
sontarih = CDbl(CDate(TextBox2.Value))
satir = 0
On Error Resume Next
ListBox1.RowSource = ""
ListBox1.Clear
On Error GoTo 0
ReDim veri_dizisi(1 To 22, 1 To 1000000) ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır sanki bos bir excel sayfası gibi.
With Worksheets("GELİRLER")
For i = 2 To .Cells(Rows.Count, 1).End(3).Row
If CDate(.Cells(i, 3).Value) >= bastarih And CDate(.Cells(i, 3).Value) <= sontarih Then
satir = satir + 1
For Sutun = 1 To 21
veri_dizisi(Sutun, satir) = .Cells(i, Sutun).Text
Next Sutun
If IsNumeric(.Cells(i, 5)) = True Then
deg = deg + Round(.Cells(i, 5).Text, 2) * 1
End If ' tutar toplamlarını hesaplamak için
End If
Next i 'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.
End With
[COLOR="Red"]If satir > 0 Then[/COLOR]
ReDim Preserve veri_dizisi(1 To 22, 1 To satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.
[COLOR="Red"]Else
MsgBox "veri bulunamadı"
End If[/COLOR]
ListBox1.Column = veri_dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.
If IsDate(TextBox1.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
If IsDate(TextBox2.Value) = False Then MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
bastarih = CDbl(CDate(TextBox1.Value))
sontarih = CDbl(CDate(TextBox2.Value))
satir = 0
On Error Resume Next
ListBox2.RowSource = ""
ListBox2.Clear
On Error GoTo 0
ReDim veri_dizisi(1 To 22, 1 To 1000000) ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır sanki bos bir excel sayfası gibi.
With Worksheets("GİDERLER")
For i = 2 To .Cells(Rows.Count, 1).End(3).Row 'burada bizim satış tablosunun dolu satırlarının sayısını buluyoruz.
If CDate(.Cells(i, 3).Value) >= bastarih And CDate(.Cells(i, 3).Value) <= sontarih Then 'tarihlerin bakılacağı sütun
satir = satir + 1
For Sutun = 1 To 21
veri_dizisi(Sutun, satir) = .Cells(i, Sutun).Text
Next Sutun
If IsNumeric(.Cells(i, 5)) = True Then
deg = deg + Round(.Cells(i, 5).Text, 2) * 1
End If ' tutar toplamlarını hesaplamak için
End If
Next i 'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.
End With
[COLOR="Red"]If satir > 0 Then[/COLOR]
ReDim Preserve veri_dizisi(1 To 22, 1 To satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.
[COLOR="Red"]Else
MsgBox "veri bulunamadı"
End If[/COLOR]
ListBox2.Column = veri_dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.
End Sub
 
Katılım
26 Kasım 2012
Mesajlar
67
Excel Vers. ve Dili
Office 2016 / Türkçe
Çok teşekkür ederim Sn. PLİNT sorunum çözüldü.Emeğinize sağlık.
 
Üst