• DİKKAT

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

Birbiriyle ilişkili birden fazla combobox la süzme.

  • Konbuyu başlatan Konbuyu başlatan Yitik
  • Başlangıç tarihi Başlangıç tarihi
Katılım
23 Ekim 2011
Mesajlar
31
Excel Vers. ve Dili
2003 Türkçe
Merhaba arkadaşlar.
Başka bir forumdaki arkadaşların yardımıyla dosyamı ekteki hale getirdim.
combobox4 ve combobox5 bağımsız arama yapıyor. Ancak combobox2, sadece combobox1 in getirdiği sonuçlar içinde arama yapmalı. Combobox3, sadece combobox1 ve combobox2'nin yaptığı süzme işlemi sonucunda textbox a gelen veriler içinde arama yapmalı. Eğer arama yapılan seçim, alanda tekrarlanıyor ise, sadece combobox1 ve combobox2'ye karşılık gelen satırları listbox'a getirmeli.
İşin mantığını kuruyorum ama bunu kodlara dökemiyorum.
İyi çalışmalar.
 

Ekli dosyalar

Dosyanızı yeniden düzenledim. Class modül ekleyerek farklı bir mantık üzerinden hareket ettim. Her bir comboboxtan tüm veriler üzerinden ayrı ayrı sorgulama yapabildiğiniz gibi marka ve model seçip filtreledikten sonrada sorgu yapabilirsiniz. Eğer her bir comboboxtan tüm veriler üzerinden sorgulama yapmak istemezseniz yada tablonuzda null veriler olmasaydı kodlar ciddi oranda azaltılabilirdi.
 

Ekli dosyalar

Teşekkür ederim Levent bey. İndirip inceledim, anlamam gereken bir yığın kod'la başbaşa bırakmışsınız beni :) Gün içinde etraflıca inceleyeceğim.
Levent bey alternatif çözümler var mı?
 
Teşekkür ederim Levent bey. İndirip inceledim, anlamam gereken bir yığın kod'la başbaşa bırakmışsınız beni :) Gün içinde etraflıca inceleyeceğim.
Levent bey alternatif çözümler var mı?

Rica ederim. Alternatif çözüm olarak tüm comboboxlara ayrı ayrı kod yazarak en basit mantık uygulanabilir. Ben eklediğim dosyadaki kodlarla ilgili açıklamada bulunurum. Siz takıldığınız yerleri çekinmeden sorabilirsiniz.
 
Levent bey neredeyse takılmadığım yer yok, o yüzden modüllerden önce userform ve nesneleri iyice kavrasam sanırım daha iyi olacak. Nesneler üzerindeki kodları yazamasam da, yazılmış kodları yavaş yavaş anlamaya başlamıştım. Siz yepyeni bir pencere açtınız, örneğin; (Yıl)combobox4'de verilerin tamamını değil de, 2ve3 te olduğu gibi kendinden önceki combobox lardaki seçimlere göre veri listelemesini istiyorum. Ancak kodun bulunduğu satırın hangisi olduğunu bile anlayamadım :(
 
Levent bey neredeyse takılmadığım yer yok, o yüzden modüllerden önce userform ve nesneleri iyice kavrasam sanırım daha iyi olacak. Nesneler üzerindeki kodları yazamasam da, yazılmış kodları yavaş yavaş anlamaya başlamıştım. Siz yepyeni bir pencere açtınız, örneğin; (Yıl)combobox4'de verilerin tamamını değil de, 2ve3 te olduğu gibi kendinden önceki combobox lardaki seçimlere göre veri listelemesini istiyorum. Ancak kodun bulunduğu satırın hangisi olduğunu bile anlayamadım :(

Aslında eklediğim dosyada nesnelerin incelenmesini gerektirecek kodlar yok. Bütün iş class modüldeki kodlarda bitiyor. Class modül kullanımını öğrenmeye öncelik vermenizi öneririm. Bu modül ile kodlarda ciddi tasarruf sağlandığını göreceksiniz. Ben ilk fırsatta kullandığım algoritmayı açıklamaya çalışırım. Combobox4'e combobox3'teki seçime göre veri yüklenmesi için class1 isimli class modüldeki ilgili koda aşağıdaki kırmızı renkli satırı ekleyin.

Kod:
Private Sub cb_Change()
If cb = "" Then Exit Sub
ad = Replace(cb.Name, "ComboBox", "")
Select Case ad
Case 1: nesneyukle 2, "select distinct Model from Devirdaim where Marka='" & UserForm1.ComboBox1 & "'"
Case 2: nesneyukle 3, "select distinct Motor from Devirdaim where Marka='" & UserForm1.ComboBox1 & "' and Model='" & UserForm1.ComboBox2 & "'"
[B][COLOR=red]Case 3: nesneyukle 4, "select distinct Yil from Devirdaim where Marka='" & UserForm1.ComboBox1 & "' and Model='" & UserForm1.ComboBox2 & "' and Motor='" & UserForm1.ComboBox3 & "'"[/COLOR][/B]
End Select
End Sub
Not: Birde Access tablosu oluşturma mantığınıda geliştirmek gerekir. Örneğin bana tablonuzdaki null veri yerine varsayılan olarak tanımlanmış bir karakter kullanmak daha mantıklı geliyor. Örneğin "-" işareti gibi. Bu konuda yeterli bilgi düzeyine sahip olmadığımdan Access konusunda uzman arkadaşların önerilerine ihtiyacımız olduğunu düşünüyorum.
 
Teşekkür ederim Levent bey.
Access tablosu henüz tamamlanmadı. Verileri oluştururken sıkıldım, biraz kod'lara el atayım dedim, girdim vba penceresine, o kadar keyifli ki çıkamıyorum :) Kısaca veritabanı yarım kaldı.
Gelelim class molül meselesine, doğrusu combobox'lara satırlarca kod yazarak edinilen sonuçların, bu kadar kısa kodlarla elde edilebiliyor olması ciddi bir avantaj. Cazibesine kapılmamak mümkün değil.
Başlangıçta yazdığınız kodlar gözümü korkutmuştu. İnceledikçe kurulan mantığı anlamaya başlıyorum. Konuyla ilgili bulabildiğim "makale-döküman-örnek dosya"ları incelemeye başlayacağım.
Sizin yada diğer arkadaşların, (Başlangış aşamasında olduğumu göz önünde tutarak) tavsiyelerinize(kaynak-yazılı,görsel döküman,v.s.) şiddetle ihtiyacım var.
İyi çalışmalar.
 
Teşekkür ederim Levent bey.
Access tablosu henüz tamamlanmadı. Verileri oluştururken sıkıldım, biraz kod'lara el atayım dedim, girdim vba penceresine, o kadar keyifli ki çıkamıyorum :) Kısaca veritabanı yarım kaldı.
Gelelim class molül meselesine, doğrusu combobox'lara satırlarca kod yazarak edinilen sonuçların, bu kadar kısa kodlarla elde edilebiliyor olması ciddi bir avantaj. Cazibesine kapılmamak mümkün değil.
Başlangıçta yazdığınız kodlar gözümü korkutmuştu. İnceledikçe kurulan mantığı anlamaya başlıyorum. Konuyla ilgili bulabildiğim "makale-döküman-örnek dosya"ları incelemeye başlayacağım.
Sizin yada diğer arkadaşların, (Başlangış aşamasında olduğumu göz önünde tutarak) tavsiyelerinize(kaynak-yazılı,görsel döküman,v.s.) şiddetle ihtiyacım var.
İyi çalışmalar.

VBA ile ilgilenmeye mdb dosyasına yönelik bir uygulama ile başlamanız, ayrıca dosyadaki ado ile mdb bağlantısı, class modül gibi ileri düzey uygulamaların mantığını çözebilmeniz, başlangıç düzeyindeki bilgi ile yapılabilecek işler değildir. Dolayısıyla kendinizi başlangıç düzeyinde görmeniz pek mantıklı değil. Bu durumda iki ihtimal var, ya öğrenme konusunda aceleci davranarak basamakları hızlıca aşıp üst sıralardan başladınız yada çok mütevazi davranıyorsunuz.

Kaynak konusunda şunu söyleyebilirim. Benim temel kaynağım her zaman internet oldu. Özellikle de yerli ve yabancı forumları takip etmek geçmişte en büyük hobimdi. Halende aradığım bir konuyu internet üzerinden araştırmaya devam ediyorum. Ancak internet üzerinde bilgi çok dağınık olduğundan, aranan bilgiye ulaşmakta belli bir düzeyde bilgiye sahip olmayı gerektiriyor. Bu sebeple ilk aşamada bir kitap yada elektronik döküman üzerinden başlamak daha doğru gibi görünüyor. Bu konuda deneyimi olan üyelerimizin önerilerini paylaşmalarını rica ederim.
 
İlk tahmininiz doğru Levent bey, çok aceleci davrandım. Excel de formüllerle aram iyidir, noktalama işaretlerinin nerede, ne amaçla kullanıldığı konusunda bazen takılsam da, internet yardımıma koşuyor.
Elimizde ki bu çalışmamdan önce, çalıştığım şirkette karekod'la kargo takip amaçlı ufak 2-3 çalışmam oldu. Etiket basımı, akşamları kargo tesliminden önce koli etiketlerinin okutulup kaydedilmesi v.s.Onlarda da resim çağırma dışında macro ihtiyacım olmadı. Kalan tüm işlemler formüllerle hallediliyor.
Vba yı inceleyince konuya bakış açım değişti. Onlarca satırda tekrarlanan, tekrarlandıkça dosyayı şişiren formüller yerine, kodlarla daha verimli sonuçlar alındığını gördüm. Userform'un görselliği de cabası. Sonrasın da hedefler büyüdü, "Ben bir satış programı mı yapsam acaba?" ya kadar geldi iş.
Hikayem bu. Sizinde tahmin ettiğiniz gibi, ağaç yeşermeye başladı ama, kökler zayıf. Kökleri güçlendirmek içinde, önümüzdeki günlerde 30 saatlik bir eğitim programına katılacağım.
Benim öğrenme arzum ve kabiliyetim, sizlerin de desteği ile, kendi ihtiyaçlarımı karşılayacak kadar kod yazmayı öğrenebileceğimi umuyorum.
İyi çalışmalar.
 
Aslında eklediğim dosyada nesnelerin incelenmesini gerektirecek kodlar yok. Bütün iş class modüldeki kodlarda bitiyor. Class modül kullanımını öğrenmeye öncelik vermenizi öneririm. Bu modül ile kodlarda ciddi tasarruf sağlandığını göreceksiniz. Ben ilk fırsatta kullandığım algoritmayı açıklamaya çalışırım. Combobox4'e combobox3'teki seçime göre veri yüklenmesi için class1 isimli class modüldeki ilgili koda aşağıdaki kırmızı renkli satırı ekleyin.

Kod:
Private Sub cb_Change()
If cb = "" Then Exit Sub
ad = Replace(cb.Name, "ComboBox", "")
Select Case ad
Case 1: nesneyukle 2, "select distinct Model from Devirdaim where Marka='" & UserForm1.ComboBox1 & "'"
Case 2: nesneyukle 3, "select distinct Motor from Devirdaim where Marka='" & UserForm1.ComboBox1 & "' and Model='" & UserForm1.ComboBox2 & "'"
[B][COLOR=red]Case 3: nesneyukle 4, "select distinct Yil from Devirdaim where Marka='" & UserForm1.ComboBox1 & "' and Model='" & UserForm1.ComboBox2 & "' and Motor='" & UserForm1.ComboBox3 & "'"[/COLOR][/B]
End Select
End Sub

Not: Birde Access tablosu oluşturma mantığınıda geliştirmek gerekir. Örneğin bana tablonuzdaki null veri yerine varsayılan olarfak tanımlanmış bir karakter kullanmak daha mantıklı geliyor. Örneğin "-" işareti gibi. Bu konuda yeterli bilgi düzeyine sahip olmadığımdan Access konusunda uzman arkadaşların önerilerine ihtiyacımız olduğunu düşünüyorum.

Levent Bey bu konuyu açtığım tarihlerde veritabanıyla ilgili tavsiyenizi çok dikkate değer bulmamıştım. Şimdilerde daha gelişmiş yapılar kurmaya çabalıyorum, o tarihlerde dikkate almadığım tavsiyenizin aslında ne kadar önemli olduğunu şimdi anlıyorum, şu günlerde veritabanı ilişkileri, diagramlar üzerinde araştırmalar yapıp öğrenmeye çalışıyorum. İyi çalışmalar dilerim.
 
Geri
Üst