• DİKKAT

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

Combobox KULLANMA SIRASI, AYNI VERİNİN ENGELLENMESİ

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Herkese merhabalar!...

UserFormda 61 adet ComboBox var.

Birincinin adı ComboBox401.

Diğerlerinin adı ise ComboBox1, ComboBox2, ComboBox3, ...ComboBox60

Bunlardan ismi 1'den 60'a kadar olanların veri kaynağı Properties kısmından excel belgesinin bir sayfasındaki bir hücre aralığı "M!A2:A61" olarak tanımlı.

Halletmem gereken iki sorun şu;

Birincisi; bu Comboboxlardan adı 1 olan kullanılmadan 2'nin kullanılamaması, 2 kullanılmadan 3'ün kullanılamaması ....(şeklinde ComboBox60 a kadar) gerekiyor.

İkincisi; bu Comboboxların veri kaynağı aynı ama, birinde bir seçim yapıldığında diğerlerinde aynı seçeneğin seçilememesi gerekiyor.

Özetle;
atlanmadan sırayla kullanılmasını sağlamam ve aynı verinin seçilmesini engellemem gerekiyor.


Nasıl bir kodlama yapmalıyım?

İlgilenenlere şimdiden teşekkürler.
 
Son düzenleme:
Bana göre, sırayla
Girerken, IF Sheet1.Cells(1,1).Value = 1 then .... çıkmadan önce Cells(1, 1) = 2
Girerken, IF Sheet1.Cells(1,1).Value = 2 then .... çıkmadan önce Cells(1, 1) = 3
....... ........
Girerken, IF Sheet1.Cells(1,1).Value = 60 then .... çıkmadan önce Cells(1, 1) = 61
Girerken, IF Sheet1.Cells(1,1).Value = 61 then .... çıkmadan önce Cells(1, 1) = 1
 
Teşekkürler Sayın Testereci !...

Ancak kod işinden pek anlamadığım için söylediğinizi;

UserForm Initalize olayına mı?
ComboBox Change olayına mı?
ComboBox_Clik olayına mı?

yazacağımı ve nasıl yazacağımı bilemedim.
 
Son düzenleme:
Merhaba,

Bu tür çoklu nesne kontrollerinde tek tek nesne olaylarına kod yazmak yerin Class module kullanmak daha avantajlı olur.

Ekte bir örnek hazırladım.

.
 

Ekli dosyalar

Bütün ComboBox' ların sırayla çalışabilmesini sağlamak için sayfa1 de A1 hücresini tahsis ettikten sonra (Haliyle siz başka bir adres verebilirsiniz.) Private Sub ComboBox1_Click() başlığından sonraki ilk satıra IF Sheet1.Cells(1,1).Value <> 1 then exit sub ve End Sub dan önceki satıra Cells(1, 1) = 2 yazıyoruz. Aynı şekilde diğer Combobox'ların cliklerine ilaveleri sayıları birer artırarak tamamlıyoruz.
Sonuçta 1 nolu comboBox'a tıklandığında a1 hücresinde 1 yazılı olmadığı sürece hiçbir işlem yapılmaz. Eğer a1 de 1 yazılı ise kendisine verilen görevi yaptıktan sonra A2 hücresine 2 değerini atar. Bu durumda da sadece 2 no.lu comboBox çalışabilir duruma gelir. (Anlatmak, yazmaktan zor olduğu için ifade güçlüğümü anlayışla karşılayınız)

Cevap yazdıktan sonra Üstat'dan yardım geldiğini gördüm. Sorun'un en doğru şekilde yanıtlandığına inanıyorum.
 
Sayın Adaşım Teşekkürler

Merhaba,

Bu tür çoklu nesne kontrollerinde tek tek nesne olaylarına kod yazmak yerin Class module kullanmak daha avantajlı olur.

Ekte bir örnek hazırladım.

.

Destek için teşekkür ederim.

Anladığım kadarıyla 60 combobox için ayrı ayrı kod yazmak yerine bunu class module ile yaptınız. Doğru mudur?

Peki belgemde normal modul olmasıyla class modül olmasının farkı nedir acaba?

Ayrıca bir şey daha sorayım;

Başka bir userformda da yine comboboxlar var, orada yapılması gereken ise,

-atlanmadan sırayla kullanılmasını sağlamak,
-art arda olmamak koşuluyla aynı veri seçilebiliyor olması lazım.

Bu konuda da destek olursanız çok sevinirim.


Meşgul ediyorum ama gerçekten öğrenmek için soruyorum.

Daha yolun başındayken, bilenlere danışmak lazım fırsat buldukça.

Sağlıcakla kalınız.
 
Anladığım kadarıyla 60 combobox için ayrı ayrı kod yazmak yerine bunu class module ile yaptınız. Doğru mudur?

Evet doğru.

Peki belgemde normal modul olmasıyla class modül olmasının farkı nedir acaba?

Class Module Uygulamaları

İncelemenizi tavsiye ederim.

1-atlanmadan sırayla kullanılmasını sağlamak,
2-art arda olmamak koşuluyla aynı veri seçilebiliyor olması lazım.

Tam olarak anlayamadım, örnekte ilk seçeneği yapmıştım. 2 seçeneğide yapmıştım fakat art arda şartı koymamıştım. Sadece bu şartı ilave etmemi mi istiyorsunuz.

.
 
Evet doğru.



Class Module Uygulamaları

İncelemenizi tavsiye ederim.



Tam olarak anlayamadım, örnekte ilk seçeneği yapmıştım. 2 seçenekle ilgi ise art arta şartı koymamıştım. Sadece bu şartı ilave etmemi mi istiyorsunuz.

.

Sayın adaşım!..
Bir önceki kodu bir user formda kullanacağım, yeni sorduğumu ise başka bir userformda kullanacağım.

Birincide (class modul ile çözdünüz) aynı verinin seçilmesini engelleyerek sırayla kullanılmasını sağlamıştınız ve tam olarak benim istediğimdi bu.

Yeni userformumda ise, yine atlanmadan kullanılacak ancak bu sefer aynı veri seçilebilecek ama art arda (birbirini izleyen comboboxlarda) olmaksızın.

Gerçekten minnettarım, çok teşekkürler ediyorum.

Class Modül çözümünüz birsürü kod satırının yerini tuttu, sağ olunuz.
Sağlıcakla.
 
Yeni userformda 401 şartı var mı? İlk ComboBox 401 den mi başlıyor. Detaylı bilgi verirmisiniz.

Class moduldeki kod bloğunu aşağıdakiyle değiştirirseniz art arda şartı eklenmiş olacaktır.

Kod:
Private Sub dizi_Change()
 
    Dim ad As String, no As Integer, Obj As Control, b As String, deg
 
    ad = dizi.Name
    no = Split(ad, "ComboBox")(1)
 
    If dizi.Value = "" Then Exit Sub
    If no = 401 Then Exit Sub
    If no = 2 Then no = 402
 
    If UserForm1.Controls("ComboBox" & no - 1) = "" Then
        MsgBox "Bir Önceki Boş Geçilmez", vbCritical, "excel.web.tr"
        dizi.Value = ""
        UserForm1.Controls("ComboBox" & no - 1).SetFocus
        Exit Sub
    End If
 
    deg = dizi.Value
    b = "ComboBox" & no - 1
 
    For Each Obj In UserForm1.Controls
        If TypeOf Obj Is MSForms.ComboBox Then
            If Obj.Name <> dizi.Name And Obj.Name <> b Then
                If Obj.Value = deg Then
                    MsgBox "Bu değer daha önce girilmiş", , "excel.web.tr"
                    dizi.Value = ""
                    Exit Sub
                End If
            End If
        End If
    Next Obj
 
End Sub


.
 
Yeni userformda 401 şartı var mı? İlk ComboBox 401 den mi başlıyor. Detaylı bilgi verirmisiniz.

Sayın adaşım kontrol etmedim ama eminim olmuştur.

UserFormlardan biri için ilk gönderdiğiniz class modülü,

ikincisi için ise yenisini kullancağım,

İkinci UserFormda da benzer şekilde ComboBox401 şartı var.

Umarım class modüllerden birini bir userform için, diğerini de ikinci user form için kullanabilirim.
Bunun için özel bir durum var mıdır acaba?
 
İstediğiniz 2 durum için 2 ayrı Class module ekledim. Bu şekilde daha anlaşılır oldu sanırım.

.
 

Ekli dosyalar

Ekli dosyalar

Eki inceleyiniz.
Ayrıca Userform içindeki kodları da kısalttım.

.
 

Ekli dosyalar

Sayın adaşım çok teşekkür ederim.
Bilmeyince kod için hamallık yapıyoruz işte. 60 nesne için 60 bilgi çağırma, 60 bilgi gönderme vs.
Bu yaştan sonra kod yazmaya merak salacağız anlaşılan.

Belki kod kısaltmayla ilgili başka sorularım da olabilir size. Sağlıcakla kalınız.

Hızır gibisiniz maşallah !...
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst