• DİKKAT

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

ilişkili çalışan comboboxlar

  • Konbuyu başlatan Konbuyu başlatan mbldn
  • Başlangıç tarihi Başlangıç tarihi
Katılım
7 Mart 2011
Mesajlar
184
Excel Vers. ve Dili
2007 TR
Arkadaşlar merhaba;
ekte göndermiş olduğum dosyada 2011 yılı taban puanları var. ben buna bir form ve içinde comboboxlar yardımıyla basit bir filtre çalışması eklemek istedim. çalışma bir yere kadar geldi ancak takıldığım nokta şu oldu. comboboxlar ya da textboxlar tek başlarına çalışıyorlar ancak biri değiştiğinde eğer diğerlerinden herhangi birinde de değer varsa seçim o yönde sınırlanmalı comboboxların içerikleri o şekilde değişmeli seçimler daralmalı aynı anda 4 seçim yapılsa bile seçim doğru sonucu vermeli ve sıralama olmamalı (atıyorum önce üniversite seçmek zorunda olmadan bölüm seçip o bölümü bulunduran ünileri seçmek gibi)
hepsi birbiri ile ilişkili çalışacak biri seçildiğinde diğerlerinin içeri seçime göre sınırlanacak tek başlarına da tüm hepsi kullanılabilecek
umarım anlatabilmişimdir.
saygılar...
 

Ekli dosyalar

İstediğiniz basit bir filtre çalışması değildir. Aynı excel dosyası içinde gelişmiş filtre, normal filtre yada klasik döngü işlemi gibi yöntemlerle çözüm bulunabilir ancak yazılacak kodlar biraz ağır çalışacaktır. Zaten dosyanızdaki comboboxlara yaptığınız yüklemeler için yazdığınız döngü içeren kodlarda çok ağır çalışmaktadır.

Benim önerim; detay sayfasını ayrı bir çalışma kitabı yaparak verileri, bu dosyayı hiç açmadan ADO gibi araçlarla sorgulamanızdır. Bu yöntemle çok daha hızlı işlem yapabilirsiniz.
 
İstediğiniz basit bir filtre çalışması değildir. Aynı excel dosyası içinde gelişmiş filtre, normal filtre yada klasik döngü işlemi gibi yöntemlerle çözüm bulunabilir ancak yazılacak kodlar biraz ağır çalışacaktır. Zaten dosyanızdaki comboboxlara yaptığınız yüklemeler için yazdığınız döngü içeren kodlarda çok ağır çalışmaktadır.

Benim önerim; detay sayfasını ayrı bir çalışma kitabı yaparak verileri, bu dosyayı hiç açmadan ADO gibi araçlarla sorgulamanızdır. Bu yöntemle çok daha hızlı işlem yapabilirsiniz.

Sayın Menteşeoğlu;
ilgi ve açıklamalarınız için teşekkür ederim. kendini tamamen forumda geliştirmeye gayret eden biri olarak henüz ADO olayına giremedim. çalışmayı incelediğinzde de gördüğünüz üzere kodlar tamamiyle forumdan derlemedir. ado ile çalışma hakkında bana küçük bir örnek gösterebilirseniz bu çalışma üzerinde, ben onu geliştirebileceğimi düşünüyorum.
çalışma bittiğinde üniversite tercihi yapacak bütün herkes için kullanışlı bir çalışma olacağı düşüncesindeyim.
bir comboboxı siz örnekleyebilirseniz gersini ben hallederim diye ümit ediyorum
saygılar...
 
Merhaba,

Tam istediğiniz gibi olmasada aşağıdaki kodlar işinize yarayacaktır.

Formunuzda bulunan tüm kodları silip yerine aşağıdaki kodu uygulayın. Bu kodu Sn. veyselemre bey daha önce hazırlamıştı. Ben sizin için uyarladım.

Kod:
Dim dic As Object
 
Private Sub UserForm_Initialize()
    Set dic = CreateObject("Scripting.Dictionary")
    a = Sheets("Detay").Range("A3:H" & Sheets("Detay").Cells(Rows.Count, 1).End(3).Row).Value
    For i = 1 To UBound(a)
        ekle = ""
        For ii = 1 To 8
            ekle = ekle & a(i, ii) & "|"
            If Not dic.exists(ekle) Then dic.Add ekle, 1
        Next ii
    Next i
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 1 Then ComboBox1.AddItem v(0)
    Next
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set dic = Nothing
End Sub
 
Private Sub ComboBox1_Change()
    ComboBox2.Clear
    ComboBox3.Clear
    ComboBox4.Clear
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 2 Then
            If v(0) = ComboBox1.Text Then ComboBox2.AddItem v(1)
        End If
    Next
End Sub
 
Private Sub ComboBox2_Change()
    ComboBox3.Clear
    ComboBox4.Clear
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 4 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text Then ComboBox3.AddItem v(3)
        End If
    Next
End Sub
 
Private Sub ComboBox3_Change()
    ComboBox4.Clear
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 5 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text And v(3) = ComboBox3.Text _
               Then ComboBox4.AddItem v(4)
        ElseIf UBound(v) = 8 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text And v(3) = ComboBox3.Text _
               And v(4) = ComboBox4.Text Then: TextBox1 = v(7): TextBox2 = v(8)
        End If
    Next
End Sub
 
Private Sub ComboBox4_Change()
    TextBox1 = "": TextBox2 = ""
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 8 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text And v(3) = ComboBox3.Text _
               And v(4) = ComboBox4.Text Then: TextBox1 = v(6): TextBox2 = v(7)
        End If
    Next
End Sub
 

Ekli dosyalar

Merhaba,

Tam istediğiniz gibi olmasada aşağıdaki kodlar işinize yarayacaktır.

Formunuzda bulunan tüm kodları silip yerine aşağıdaki kodu uygulayın. Bu kodu Sn. veyselemre bey daha önce hazırlamıştı. Ben sizin için uyarladım.

Kod:
Dim dic As Object
 
Private Sub UserForm_Initialize()
    Set dic = CreateObject("Scripting.Dictionary")
    a = Sheets("Detay").Range("A3:H" & Sheets("Detay").Cells(Rows.Count, 1).End(3).Row).Value
    For i = 1 To UBound(a)
        ekle = ""
        For ii = 1 To 8
            ekle = ekle & a(i, ii) & "|"
            If Not dic.exists(ekle) Then dic.Add ekle, 1
        Next ii
    Next i
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 1 Then ComboBox1.AddItem v(0)
    Next
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set dic = Nothing
End Sub
 
Private Sub ComboBox1_Change()
    ComboBox2.Clear
    ComboBox3.Clear
    ComboBox4.Clear
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 2 Then
            If v(0) = ComboBox1.Text Then ComboBox2.AddItem v(1)
        End If
    Next
End Sub
 
Private Sub ComboBox2_Change()
    ComboBox3.Clear
    ComboBox4.Clear
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 4 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text Then ComboBox3.AddItem v(3)
        End If
    Next
End Sub
 
Private Sub ComboBox3_Change()
    ComboBox4.Clear
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 5 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text And v(3) = ComboBox3.Text _
               Then ComboBox4.AddItem v(4)
        ElseIf UBound(v) = 8 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text And v(3) = ComboBox3.Text _
               And v(4) = ComboBox4.Text Then: TextBox1 = v(7): TextBox2 = v(8)
        End If
    Next
End Sub
 
Private Sub ComboBox4_Change()
    TextBox1 = "": TextBox2 = ""
    For Each elem In dic.keys
        v = Split(elem, "|")
        If UBound(v) = 8 Then
            If v(0) = ComboBox1.Text And _
               v(1) = ComboBox2.Text And v(3) = ComboBox3.Text _
               And v(4) = ComboBox4.Text Then: TextBox1 = v(6): TextBox2 = v(7)
        End If
    Next
End Sub

Korhan Bey Merhabalar;
öncelikle ilginiz ve yardımlarınız için teşekkür ederim. Ancak sanıyorum yanlış anlaşıldım. userformun üzerinde bulunan tüm açılır kutu ve metin kutuları sorgulama için. döküm özet sayfaya yapılacak ve seçimle paralel olacak. detay sayfadan sorgulanan veriler özet sayfaya dökülecek tek seçim yapılıp form kapatılırsa özet sayfada o seçime göre filtreli sonuç gelmiş olacak. derdim şu ki userform yüklendiğinde tüm hepsi boş olacak ve ilk seçimin combobox1 olma zorunluluğu olmayacak. örneğinizden örneklersem üniversite seçildiğinde ikinci açılır kutu içeriği daralıyor o üniversitenin ilgili bölümleri geliyor. ancak ben formu açıp önce puan türünü seçersem diğer comboboxlar bu kez puan türüne göre değer alacak arıyorum dil den öğrenci almayacak üniversiteler combobox1 e gelmeyecek ya da textbox4 e *işlet yazdım işletme bölümü olan tüm üniversiteler önce dökülecek akabinde de ikinci seçim yapılırsa züme yeniden olacak ve bu kez özet sayfada yerinde süzecek gibi
ümit ediyorum anlatabilmişimdir.
saygılarımla...
 
Geri
Üst