ListBox'ı Textbox İle Filtreleme

Katılım
30 Ekim 2010
Mesajlar
108
Excel Vers. ve Dili
2007 Türkçe
Bununla ilgili birçok konu var ama hepsi veriyi ya sayfadan yada dış veri kaynağından alıyor. Benim sorunum ListBox'a ".Additem" yöntemiyle veri ekliyorum. Yani Listeyi bir yerden almıyor, bir yere de kayıt yapmıyorum. Bu şekilde çalışan bir listeye TextBox ile Filtre uygulamak mümkün müdür? Liste sutun sayısı birden fazla.
 
Katılım
30 Ekim 2010
Mesajlar
108
Excel Vers. ve Dili
2007 Türkçe
Ömer Bey dosya için çok teşekkür ederim. Çok güzel olmuş elinize sağlık. Yalnız şöyle bir sorunum var "liste = ListBox1.List" dediğimize ve bunu "UserForm_initialize()" olayına aldığımızda liste artık sabitleniyor. Benim Filtre uygulayacağım liste ise değişken yani; birçok yerden içine verip ekleyip değiştiyor, bazen satırları siliyorum ve en son işim bitince listeyi Access data'ma kaydediyorum. "liste = ListBox1.List" Listbox'ın Change olayına koymayı düşündüm ama bu seferde filtre uygulayınca liste de değişeceği için bir anlamı olmuyor. Filtrede kullandığım Textbox'ın Change, MouseMove vs. olaylarına ekledim sonuç değişmedi :(
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Kod:
Private Sub Liste_Degistir()
liste = ListBox1.List
End Sub
şeklinde bir prosedür oluşturun. Daha sonra listboxa veri eklediğiniz her kodun sonuna(UserForm_initialize dahil) Call Liste_Degistir eklerseniz liste güncel olacaktır.
Ya da formunuza ikinci bir listbox ekleyip süzme işlemini orada yaptırabilirsiniz.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,653
Excel Vers. ve Dili
Pro Plus 2021
Listbox'a veri eklediğiniz kısımlardan sonra liste yi yenileyin.

Kod:
liste = ListBox1.List
Kod:
Dim liste()
Option Compare Text
Private Sub TextBox1_Change()
    Call filtrele
End Sub
Private Sub TextBox2_Change()
    Call filtrele
End Sub
Sub filtrele()
    ListBox1.List = liste
    If TextBox1 <> "" Or TextBox2 <> "" Then
        For i = ListBox1.ListCount - 1 To 0 Step -1
            If Not (ListBox1.List(i, 0) Like "*" & TextBox1.Text & "*" And _
                    ListBox1.List(i, 1) Like "*" & TextBox2.Text & "*") Then
                ListBox1.RemoveItem (i)
            End If
        Next
    End If
End Sub
 
Katılım
30 Ekim 2010
Mesajlar
108
Excel Vers. ve Dili
2007 Türkçe
Teşekkür ederim. Çok işime yaradı. Elinize sağlık (y)
 
Üst