Class modül NESNE KONTROL SORUNU

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
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Herkese merhabalar!...

Belgemi UserFormlarla yönetmeye çalışıyorum.
UserFormumdaki kullanılacak ilk nesne ComboBox301 ve
bunun kaynağı Properties kısmından ayarlanarak Sayfa1'deki bir
hücre aralığı olarak tanımlı.

Ardından kullanılacak ComboBoxların adları ise
ComboBox1, ComBox2, ........ComboBox20'ye kadar ve
bunların veri kaynağı ise Properties kısmından ayarlanarak
belgemin Sayfa2'deki bir hücre aralığı olarak tanımlı.

ComboBoxların tümünün bulunduğu UserFormdaki ilgili kod aşağıdaki gibi.

Option Explicit
Dim dizi() As New Class1
Private Sub UserForm_Initialize()

Dim a As Integer, Obj As Control

For Each Obj In Me.Controls
If TypeOf Obj Is MSForms.ComboBox Then
a = a + 1
ReDim Preserve dizi(1 To a)
Set dizi(a).dizi = Obj
End If
Next Obj

Set Obj = Nothing

End Sub
İlk kullanılacak 301 no'lu olan ComboBox dışındaki,
ComboBox1 .....ComboBox20'ye kadar olanların kontrolü için hazırlanmış bir
Class Modülden dolayı sorun yaşıyorum.
Class Modüldeki kod aşağıdaki gibi.

Option Explicit
Public WithEvents dizi As MSForms.ComboBox
Private Sub dizi_Change()

Dim ad As String, no As Integer, Obj As Control, deg

ad = dizi.Name
no = Split(ad, "ComboBox")(1)

If dizi.Value = "" Then Exit Sub
If no = 300 Then Exit Sub
If no = 2 Then no = 301

If UserForm3.Controls("ComboBox" & no - 1) = "" Then
MsgBox "Bir Önceki Boş Geçilmez", vbCritical
dizi.Value = ""
UserForm3.Controls("ComboBox" & no - 1).SetFocus
Exit Sub
End If

deg = dizi.Value


For Each Obj In UserForm3.Controls
If TypeOf Obj Is MSForms.ComboBox Then
If Obj.Name <> dizi.Name Then
If Obj.Value = deg Then
MsgBox "Bu değer daha önce girilmiş"
dizi.Value = ""
Exit Sub
End If
End If
End If
Next Obj

End Sub
Class Modülde veya Userform kodlarında nasıl bir değişiklik yapmalıyım.

İlgilenen arkadaşlara teşekkür ederim.
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,183
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Merhaba,

Doğru anladıysam,

If no = 300 Then Exit Sub
If no = 2 Then no = 301

Yerine;

If no = 301 Then Exit Sub
If no = 1 Then no = 302

olarak yazın.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Yine beceremedim

Merhaba,

Doğru anladıysam,

If no = 300 Then Exit Sub
If no = 2 Then no = 301

Yerine;

If no = 301 Then Exit Sub
If no = 1 Then no = 302

olarak yazın.
YİNE BECEREMEDİM SANIRIM.

Ben anlatamamışımdır.

En iyisi belgemi ekleyeyim.
 

Ekli dosyalar

Son düzenleme:

vardar07

Destek Ekibi
Destek Ekibi
Katılım
19 Mart 2008
Mesajlar
2,154
Excel Vers. ve Dili
Office 2007 Enterprise
Türkçe
Form üzerinde combobox301 adını combobox0 olarak değiştir.
class modül clas2 içindekini aşağıdaki gibi yazıp denermisin.

Kod:
Option Explicit
Public WithEvents dizi As MSForms.ComboBox
Private Sub dizi_Change()
 
    Dim ad As String, no As Integer, Obj As Control, b As String, deg 'FARKLI OLAN b As String
 
    ad = dizi.Name
    no = Split(ad, "ComboBox")(1)
 
    If dizi.Value = "" Then Exit Sub
    If no = 0 Then Exit Sub
    If no = 2 Then no = 1
 
    If UserForm3.Controls("ComboBox" & no - 1) = "" Then
        MsgBox "Bir Önceki Boş Geçilmez", vbCritical, "BARAN"
        dizi.Value = ""
        UserForm3.Controls("ComboBox" & no - 2).SetFocus
        Exit Sub
    End If
 
    deg = dizi.Value
    b = "ComboBox" & no - 2 'CLASS 1 DEN FARKLI OLAN BURASI
 
    For Each Obj In UserForm3.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ş", , "BARAN"
                    dizi.Value = ""
                    Exit Sub
                End If
            End If
        End If
    Next Obj
 
End Sub
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
ComboBoxa 0 adı verilebiliyor muydu?
Bilmiyordum, deneyeceğim.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
O UserFormdaki ComboBox_Change kodları ile excel belgesindeki kayıtlı bilgiler geliyordu, şimdi gelmiyor.
(İlgili UserForm bu bilgileri değiştirmek için kullanılıyor)

Onun dışında kullanım kısıtlamasına ilişkin olay tamam sanırım. Sağolunuz.
 

vardar07

Destek Ekibi
Destek Ekibi
Katılım
19 Mart 2008
Mesajlar
2,154
Excel Vers. ve Dili
Office 2007 Enterprise
Türkçe
combobox seçili iken özelliklerden ismini combobox0 yap
userform4 deki combobox401 yerine combobox0 yapıp
class1 içinede aşağıdakini denermisin
Kod:
Option Explicit
Public WithEvents dizi As MSForms.ComboBox
Private Sub dizi_Change()
   
    Dim ad As String, no As Integer, Obj As Control, deg
   
    ad = dizi.Name
    no = Split(ad, "ComboBox")(1)
    
    If dizi.Value = "" Then Exit Sub
    If no = 0 Then Exit Sub
    If no = 2 Then no = 1

    If UserForm4.Controls("ComboBox" & no - 1) = "" Then
        MsgBox "Bir Önceki Boş Geçilmez", vbCritical
        dizi.Value = ""
        UserForm4.Controls("ComboBox" & no - 1).SetFocus
        Exit Sub
    End If
    
    deg = dizi.Value
    
    
    For Each Obj In UserForm4.Controls
        If TypeOf Obj Is MSForms.ComboBox Then
            If Obj.Name <> dizi.Name Then
                If Obj.Value = deg Then
                    MsgBox "Bu değer daha önce girilmiş"
                    dizi.Value = ""
                    Exit Sub
                End If
            End If
        End If
    Next Obj
   
End Sub
excel açıkken alıyor.
ayrıca userform kodlarındaki tüm combobox301 leri combobox0 olarak değiştirmen gerekir.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Onu mesajı yazdıktan sonra fark ettim.
Her iki UserFormdaki 301 ve 401 lere yapılan atıfları değiştirince tamam oldu.

Ayrıca, dikkat ettiyseniz ComboBoxlara excelden veri alma ve ComboBoxlardan excele veri gönderme kodları acemiliğimizi ortaya çıkartmıştır.

Onu düzeltmek için sizi yormayacak bir öneriniz olursa, kodda sadeleşmiş olur.
 

vardar07

Destek Ekibi
Destek Ekibi
Katılım
19 Mart 2008
Mesajlar
2,154
Excel Vers. ve Dili
Office 2007 Enterprise
Türkçe
Arkadaşım bende acemiyim, Bende ömer hocanın yazdığı koddan esinlenerek düzeltmeler yaptım. Olduysa güle güle kullan. İyi geceler.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,986
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Teşekkürler size de.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst