2016-03-18 21 views
1

adım adım farklı davranıyorsa Kullanıcı formumdaki herhangi bir ComboBox "change" olayını işleyecek kod yazmayı deniyorum. VBA kodu

Ben this Sorunun cevabı geçti ve

Ancak, çalışmayan bir ayrı sınıf, vb yarattı. Yeni bir proje üzerinde aynı kodu kullanmak iyi çalışıyorsa, bu projedeki bu kod bazen "adım adım" yürütme (F8) kullandığımda çalışır, ancak normal çalıştırma kullanıldığında işe yaramıyor.

Diğer insanların benzer çıkmazlarına baktığımda "DoEvents" ekledim ancak bu yardımcı olmadı.

Private WithEvents TriggerComboBox As MSForms.ComboBox 

Public Property Set Control(CB As MSForms.ComboBox) 
    Set TriggerComboBox = CB 
End Property 

Private Sub TriggerComboBox_Change() 
    MsgBox ("yay") 
End Sub 
+0

yürütülmesi bittikten sonra kapsam dışına çıkacak/kaybolmayacaktır. Ne olmasını istediğinizi söyleyebilir misiniz? –

+0

@ScottMarcus, Bir kullanıcı formunda belirli bir türdeki tüm denetimler için "değişiklik" olayını işleyecek basit bir kod istiyorum. – mathgenius

cevap

2

ComboBox_Collection ihtiyaçlar (Global değişken olması, en azından, Küresel formunuz en:

Bu "ComboBox_Class" adlı UserForm

Private Sub UserForm_Initialize() 

Dim ComboBox_Collection As Collection 
Dim ctrl As Control 
Dim cbc As ComboBox_Class 

Set ComboBox_Collection = New Collection 
    For Each ctrl In UserForm1.MultiPage.Pages(2).Controls 
    DoEvents 
     If TypeName(ctrl) = "ComboBox" Then 
      DoEvents 
      Set cbc = New ComboBox_Class 
      Set cbc.Control = ctrl 
      ComboBox_Collection.Add cbc 
      DoEvents 
     End If 
    Next ctrl 
Set cbc = Nothing 

End Sub 

Ve sınıf modülünde benim koddur kod modülü) veya UserForm_Initialize Sub'nuzun

+0

Teşekkürler! Öyleydi, koleksiyonu Modüle taşıdım ve onu halka açtı, şimdi işe yarıyor! – mathgenius

+0

@mathgenius Sınıfın dışından erişmeniz gerekmedikçe, 'Public' yapmanıza gerek yoktur. Ve sınıfın dışına erişmeniz gerekiyorsa bile, uygun bir kapsüllemeyi muhafaza etmek için, * bir kopyasını * (bir dizi belki de) bir 'Public Property Get' üyesi olarak sergilemeniz gerekir. –