Sayfada aranan değeri ListBox ta Listeleme

Katılım
14 Haziran 2025
Mesajlar
4
Excel Vers. ve Dili
2003 Tr
Merhaba,

Veri adlı sayfadaki verileri 14 sütun, 5000 satırdan oluşuyor. "B:O" sütunları arasında. UserForm üzerindeki bir Buton ile TextBox'taki veriyi bir ListBox da aşağıdaki kodlar yardımıyla listeleyebiliyorum. Kodlara, satır başında tırnak işareti bulunan yani K sütunu satırını da eklediğimde ;
Hata Kodu: '380' : Liste özelliği ayarlanamadı. Geçersiz özellik değeri.
Hatası alıyorum. Burada ListBox nesnesinin bir sınırımı var acaba, bu nedenle mi hata alıyorum.
Yardımcı olacak arkadaşlara teşekkür ederim.

Private Sub cmdbul10_Click()

Dim Alan As Range

ListBox3.RowSource = Empty
ListBox3.Clear
ListBox3.ColumnCount = 14

Set Alan = Sheets("Veri").Range("B2:B" & Sheets("Veri").Range("B5001").End(xlUp).Row)

For Each isim In Alan
If UCase(LCase(isim)) Like UCase(LCase(TextBox1)) & "*" Then
liste = ListBox3.ListCount

ListBox3.AddItem
ListBox3.List(liste, 0) = isim 'Sutun B
ListBox3.List(liste, 1) = isim.Offset(0, 1) 'Sutun C
ListBox3.List(liste, 2) = isim.Offset(0, 2) 'Sutun D
ListBox3.List(liste, 3) = isim.Offset(0, 3) 'Sutun E
ListBox3.List(liste, 4) = isim.Offset(0, 4) 'Sutun D
ListBox3.List(liste, 5) = isim.Offset(0, 5) 'Sutun F
ListBox3.List(liste, 6) = isim.Offset(0, 6) 'Sutun G
ListBox3.List(liste, 7) = isim.Offset(0, 7) 'Sutun H
ListBox3.List(liste, 8) = isim.Offset(0, 8) 'Sutun I
ListBox3.List(liste, 9) = isim.Offset(0, 9) 'Sutun J
‘ListBox3.List(liste, 10) = isim.Offset(0, 10) 'Sutun K
‘ListBox3.List(liste, 11) = isim.Offset(0, 11) 'Sutun L
‘ListBox3.List(liste, 12) = isim.Offset(0, 12) 'Sutun O


End If
Next

Set Alan = Nothing: isim = Empty

End Sub

 

wezyr

Altın Üye
Katılım
14 Nisan 2006
Mesajlar
117
Excel Vers. ve Dili
OFFİCE 2010-2019
Altın Üyelik Bitiş Tarihi
21-04-2029
chat gpt 10 sütun sınırı olduğunu söylüyor.

Private Sub cmdbul10_Click()
Dim Alan As Range, satir As String

With ListBox3
.RowSource = ""
.Clear
.ColumnCount = 1 'ListBox aslında tek sütun
.ColumnWidths = "400 pt" 'Genişliği ayarlayın
End With

Set Alan = Sheets("Veri").Range("B2:B" & Sheets("Veri").Cells(Rows.Count, "B").End(xlUp).Row)

For Each isim In Alan
If UCase(isim) Like UCase(TextBox1) & "*" Then
satir = Join(Array( _
isim.Value, isim.Offset(0, 1).Value, isim.Offset(0, 2).Value, _
isim.Offset(0, 3).Value, isim.Offset(0, 4).Value, isim.Offset(0, 5).Value, _
isim.Offset(0, 6).Value, isim.Offset(0, 7).Value, isim.Offset(0, 8).Value, _
isim.Offset(0, 9).Value, isim.Offset(0, 10).Value, isim.Offset(0, 11).Value, _
isim.Offset(0, 12).Value, isim.Offset(0, 13).Value), vbTab)
ListBox3.AddItem satir
End If
Next isim
End Sub

Bu kod ile “gerçek” 14 sütun değil; tek sütunu sekmelerle bölmüş oluyorsunuz, ama dar bir çözüm olarak işe yarar.


Özet

  • MSForms.ListBox’ta maksimum 10 sütun var → 11. sütuna yazınca hata 380 oluşur.
  • 14 sütun ihtiyacınız varsa ListView, FlexGrid veya iki ayrı ListBox gibi alternatif kontrolleri düşünün.
  • Hatanız ListBox sınırıyla ilgili, kod mantığında bir başka problem yok.

Kolay gelsin! der chat gpt
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,576
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Eger 2003 tr ile calısıyorsanız : RowSource ile 14 Sütunlu ListBox belki soruna cozum olur 381 hatası ( sutun yetersiz ) vermeyebilir. Ayrıca eski denen bu surumlerde kucuk kod kelimeleri de ( .clear ) hatası (2010da dahi ) verebilir. Benim kullanma olanagım 2010la sınırlı ve 2003 ne sorun cıkarabilir emin degilim. Yine de kopya bir dosyada 10 15 satırla su rowsource metodu ile calısan kodu deneyin :


Kod:
Private Sub cmdbul10_Click()
    Dim sonSatir As Long
    Dim aranan As String
    Dim veriSayfa As Worksheet

    Set veriSayfa = ThisWorkbook.Sheets("Veri")
    aranan = LCase(Trim(TextBox1.Value))

    ' Son satırı bul
    sonSatir = veriSayfa.Cells(veriSayfa.Rows.Count, "B").End(xlUp).Row

    ' Otomatik filtreleme yapılacak alan
    With veriSayfa
        .AutoFilterMode = False
        .Range("B1:O" & sonSatir).AutoFilter Field:=1, Criteria1:="*" & aranan & "*"

        ' Görünen satırları geçici bir alana kopyala
        Dim tmpAralik As Range
        On Error Resume Next
        Set tmpAralik = .Range("B2:O" & sonSatir).SpecialCells(xlCellTypeVisible)
        On Error GoTo 0

        If Not tmpAralik Is Nothing Then
            ' Geçici verileri boş alana kopyala (örneğin Sayfa2!A1)
            Sheets("Sayfa2").Range("A1").CurrentRegion.Clear
            tmpAralik.Copy Destination:=Sheets("Sayfa2").Range("A1")

            ' ListBox'u Sayfa2'den doldur
            With ListBox3
                .ColumnCount = 14
                .ColumnHeads= True
                .ColumnWidths = "60;60;60;60;60;60;60;60;60;60;60;60;60;60"
                .RowSource = "Sayfa2!A1:N" & tmpAralik.Rows.Count
            End With
        Else
            ListBox3.RowSource = "" ' Hiçbir eşleşme yoksa boşalt
        End If

        .AutoFilterMode = False
    End With
End Sub
Bu kod yuksek olasılıkla userform ustunde textbox yardımı ile suzmekte iseniz calısabilir. Sayfadaki sutun baslıgı isimleri listbox ustunde gorunecektir ve sutun sayısı veri ile aynı olacaktır.
 
Katılım
14 Haziran 2025
Mesajlar
4
Excel Vers. ve Dili
2003 Tr
chat gpt 10 sütun sınırı olduğunu söylüyor.
....
Bu kod ile “gerçek” 14 sütun değil; tek sütunu sekmelerle bölmüş oluyorsunuz, ama dar bir çözüm olarak işe yarar.
Özet
SForms.ListBox’ta maksimum 10 sütun var → 11. sütuna yazınca hata 380 oluşur.
  • 14 sütun ihtiyacınız varsa ListView, FlexGrid veya iki ayrı ListBox gibi alternatif kontrolleri düşünün.
  • Hatanız ListBox sınırıyla ilgili, kod mantığında bir başka problem yok.
Kolay gelsin! der chat gpt
İlginiz ve cevabınız için teşekkür ederim sayın wezyr,
ListBox da listelediğim sonuçları başka bir excel sayfasına rapor olarak gönderdiğim için bu tür (verileri tek bir sütunda birleştirmek) bir çözüm sorunuma çözüm olmayacak. Bu durumda, excel sayfasına gönderdiğim her bir satır, rapor sayfasına tek bir hücrede birleşik halde gönderilmiş oluyor.
Bu çalışmalarımı yaklaşık 10-15 yıl önce yapmıştım. Yaklaşık on yıldır kodlar ile uğraşmadığım için bildiklerimin çoğunu unutmuşum. Eski dosyalarımı bu arada inceledim, tamamında en fazla 10 sütun kullanmışım. Daha sonra, Listbox yetersiz gelmiş olacak ki bazı çalışmalarımda ListView kullanmışım. ListBox'un daha hızlı ve pratik olduğunu düşündüğüm için bu yoldan devam ettim. Önümde 2 seçenek kaldı, ya bazı sütunlardan feragat, yada ListView kullanmak.
Yaş 59 lara gelince jetonların düşmesi zaman alıyor.
 
Katılım
14 Haziran 2025
Mesajlar
4
Excel Vers. ve Dili
2003 Tr
Eger 2003 tr ile calısıyorsanız : RowSource ile 14 Sütunlu ListBox belki soruna cozum olur 381 hatası ( sutun yetersiz ) vermeyebilir. Ayrıca eski denen bu surumlerde kucuk kod kelimeleri de ( .clear ) hatası (2010da dahi ) verebilir. Benim kullanma olanagım 2010la sınırlı ve 2003 ne sorun cıkarabilir emin degilim. Yine de kopya bir dosyada 10 15 satırla su rowsource metodu ile calısan kodu deneyin :
......
......
Bu kod yuksek olasılıkla userform ustunde textbox yardımı ile suzmekte iseniz calısabilir. Sayfadaki sutun baslıgı isimleri listbox ustunde gorunecektir ve sutun sayısı veri ile aynı olacaktır.
İlginiz ve cevabınız için teşekkür ederim sayın cems,

RowSource yöntemini UserForm Initialize de kullanıyorum, ListBox nesnesinde 14 sütun bir sorun (sütun sınırı olmaksızın kullanılabiliyor) olmuyor.
Sorgulamada kullandığım kodlar ile bunu yapamıyorum. ListBox.List özelliğinde 10 sütun sınırı var galiba.
Sizin kodlarınızın yöntemini de bazı çalışmalarımda kullanmıştım. Filtreleme ile başka sayfaya aktarım ve verileri ListBox nesnesine bu sayfadan RowSource ile listelemek biraz dolambaçlı yollar kullanmak gibi.
Şimdilik, ya sütunları azaltacağım yada Listview deneyeceğim.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,576
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
2010 ile rowsource metodu uygulayarak su cozumu buldum ve bende calstı , b sutununa gore bul tuş olmadan textboxa veri girildiginde otomatik suzuluyor ve satırı tek başına bırakıyor. Kullanılan kodlar


Kod:
Private Sub VerileriListele(aranan As String)
    Dim veriSayfa As Worksheet
    Dim kopyaSayfa As Worksheet
    Dim sonSatir As Long
    Dim tmpAralik As Range
    Dim veriAralik As Range

    Set veriSayfa = ThisWorkbook.Sheets("Verisayfa")
    Set kopyaSayfa = ThisWorkbook.Sheets("Sayfa2")

    sonSatir = veriSayfa.Cells(veriSayfa.Rows.Count, "B").End(xlUp).Row

    ' Önce varsa filtreyi kaldır
    On Error Resume Next
    veriSayfa.ShowAllData
    On Error GoTo 0

    ' Filtre uygula
    If aranan = "" Then
        veriSayfa.Range("B1:O" & sonSatir).AutoFilter Field:=1
    Else
        veriSayfa.Range("B1:O" & sonSatir).AutoFilter Field:=1, Criteria1:="*" & aranan & "*"
    End If

    ' Sayfa2'yi temizle
    kopyaSayfa.Cells.Clear

    ' Başlık satırını kopyala
    veriSayfa.Range("B1:O1").Copy Destination:=kopyaSayfa.Range("A1")

    ' Eşleşen satırları al
    On Error Resume Next
    Set tmpAralik = veriSayfa.Range("B2:O" & sonSatir).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not tmpAralik Is Nothing Then
        ' Eşleşen verileri başlığın altına kopyala
        tmpAralik.Copy Destination:=kopyaSayfa.Range("A2")

        ' ListBox ayarları
        With ListBox3
    .RowSource = "" ' Temizlemenin doğru yolu
    .ColumnCount = 14
    .ColumnHeads = True
    .ColumnWidths = "60;60;60;60;60;60;60;60;60;60;60;60;60;60"
    .RowSource = "Sayfa2!A2:N" & tmpAralik.Rows.Count + 1 ' +1 başlık için
End With

    Else
        ListBox3.RowSource = ""
    End If
End Sub

Private Sub TextBox1_Change()
    Call VerileriListele(TextBox1.Value)
End Sub

Private Sub UserForm_Initialize()
    Call VerileriListele("")
End Sub
Listboxta sutun basları da geliyor. Bu yontemde gecici sayfaya veri atılıyor oradan da geri alınıyor. ve listboxa 14 sutun olarak eksiksiz yukluyor.
textbox b sutununa gore suzuyor ama verinin diger sutunlarına gore de suzme yaparsanız criterya sayılarını arayaagı sutuna gore degistirirsiniz bu sekilde coklu textboxlarla da suzme sansınız olabilir. Verinin gecici yuklenecegi sayfayı isterseniz properties ten xlveryhidden yapın o zaman ayakaltında gorunmeyebilir.
Bu kodlarla yapılan dosya ektedir ancak 2003 teki tepkisini siz kopya dosyada kısmi veri ile asılı bozmadan denemelisiniz.

cbaska sutunlara gore de suzmek icin textbox ekleyin ve kodda su kilit kısmı degistirin

c sutunu icin
veriSayfa.Range("B1:O" & sonSatir).AutoFilter Field:=2, Criteria1:="*" & aranan & "*"
d sutunu icin
veriSayfa.Range("B1:O" & sonSatir).AutoFilter Field:=3, Criteria1:="*" & aranan & "*"
ve cogaltın . Sutun sayısı bu metodla onemsizlesiyor



 

Ekli dosyalar

Son düzenleme:
Katılım
14 Haziran 2025
Mesajlar
4
Excel Vers. ve Dili
2003 Tr
2010 ile rowsource metodu uygulayarak su cozumu buldum ve bende calıstı , b sutununa gore bul tuş olmadan textboxa veri girildiginde otomatik suzuluyor ve satırı tek başına bırakıyor. Kullanılan kodlar
......
.....
Sayın cems, emeğiniz için çok teşekkür ederim. Bir önceki mesajımda yazdığım gibi bu yöntem bir hayli dolambaçlı gibi geldi bana. Veriler çoğaldığında filtreleme işleminin zaman alacağını düşünüyorum. Hem versiyonumuz eski hem bilgisayarımız yeterli değil. Farklı 3 sayfada daha arama/listeleme işlemleri yapacağım için, sütun azaltma yada Listview nesnesi kullanmayı deneyeceğim.

Bu arada, Dosya.co sitesine, insan olduğumu doğrulatamadığım için örnek dosyanızı indiremedim.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,576
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Bu diger site genelde temiz ve zorlamadan teslim edebilir Bahsettiğim cozumler eski model excel icin gecerli ve ben rowsource yontemi ile ayrıca
screenupdate ozelliğini kod basında durdurup sonunda acarak vekod basında xlcalculation manual yapıp sonund xlcalculationautomatic olarak acarak
85000 satır 15 sutun matrisi cozerek 2010 da uzun sure calısmıstım. Gecicisayfayı hidden yaparsanız hic gormezsiniz ama kullanılabilir.Veri suzme cok yuksek satırda donma gibi bekletir ama 10 saniye sonra dokuluyor.
Daha yuksek surum excel ve ozelliklerini kullanma ve listview kullanma konusunda bir sozum yok idiger surumleri kullanmayı tercih etmediğim ( yuksek surumdeki ozellikler dusuk surumlerde olmadıgından kod calısamaz ama dusuk surumde yazılan kod yuksek surumde yuksek olasılıkla calısabilir

Bu konuda soz surumler arası yetenek farkını iyi bilen ustadların ....

 
Üst