Bir çalışma sayfasında her biri GotFocus()
etkinliğine karşılık vermesi gereken on damla aşağı menüm var.excel vba ile birden çok nesneye olay nasıl atanır?
Aşağıdaki kodu yazdım ama çalışma zamanı hatası (459) almak - "Nesne veya sınıf kümesini desteklemiyor olaylar eğer" Bir sınıfta
ben şu var clsPDRinput
seslendi:
Public WithEvents inputObj As OLEObject
Public Property Set myInput(obj As OLEObject)
Set inputObj = obj
End Property
Public Sub tbPDRInput_GotFocus()
//Do some stuff...
End Sub
sonra hata üretiyor aşağıdaki kodu çalıştırıyorum
:
Dim tbCollection As Collection
Public Sub InitializePDRInput()
Dim myObj As OLEObject
Dim obj As clsPDRInput
Set tbCollection = New Collection
For Each myObj In Worksheets("1. PDR Documentation").OLEObjects
If TypeName(myObj.Object) = "ComboBox" Then
Set obj = New clsPDRInput
Set obj.myInput = myObj <-- **THIS LINE THROWS ERROR**
tbCollection.Add obj
End If
Next myObj
Set obj = Nothing
End Sub
Ben Bu hatayı neden olduğundan emin değilsiniz. Bir tane olsa da bu OLEObject
çok genel ve her OLEObject
her GotFocus()
olay desteklemiyor ve bu nedenle bu hata iletisini veriyor?
OLEObject
'u MSForms.ComboBox
ile değiştirmeyi denedim, ancak bu sorunu çözmüyor.
herhangi bir fikir - Ben sorunu olduğunu düşünüyorum ne Güncelleme ...
Ben daha buraya soruşturma ve did olduğunu -
DÜZENLEME ... şimdi iki saat googled ve boş geldi Mesele, anlatabildiğim kadarıyla. Eğer (...inputObj as OLEObject
olduğu gibi) OLEObject
gibi bir değişken bildirirseniz
- sonra maruz sadece olayları
GotFocus()
veLostFocus()
bulunmaktadır. Sonra çeşitli etkinlikler maruz kalan (...inputObj as MSForms.ComboBox
olduğu gibi)MSForms.ComboBox
gibi bir değişken bildirirseniz - (örn
Change()
,Click()
,DblClick()
) ama olaylarGotFocus()
veLostFocus()
Noktalar maruz kalmadığıvardır 1 ve 2, excel'deki nesne modeliyle tutarlıdır. Sonuç olarak, sınıfıma bir ComboBox
atamaya çalıştığımda ComboBox
GotFocus()
ve LostFocus
olaylarını desteklemediğinden bir hata alıyorum (orijinal gönderine bakın).
Şimdi bulmaca için. Bir çalışma sayfasına bir ComboBox eklerseniz (Control ToolBox
kullanarak) ve o kodun arkasındaki kodu almak için bu ComboBox'ı çift tıklatırsam, GotFocus()
ve LostFocus()
dahil olmak üzere tüm olaylar açığa çıkar!
'Her myObj' için' 'Sonraki inputObj' tutarsız ve derleme yapmaz. Bu senin gerçek kodun mu? –
Ayrıca, 'Koleksiyon olarak Dim tbCollection' sınıfınızdadır, ancak bir modülde olduğunu varsaydığım 'Sub InitializePDRInput'' 'tbCollection' kullanırsınız. Burada neler oluyor? –
@ Jean-Francois Corbett - İlk noktanızda, bu kodun sürümünü indirdi. 'Her birimiz için' noktasında sadece bir yazım hatası yazıyorsunuz (yazıyı düzenleyeceğim). 2. noktaya gelince, yazım hatası - "Dim tbCollection ..." bir modülde –