У меня возникла проблема с запуском любого события из элементов управления, встроенных в модульные классы в VBA Access. Несмотря на много (много!) Разговоров на разных форумах, связанных с этим, я не нашел никого, кто помог бы мне. Насколько я могу судить, я следую всем их советам (в основном, я всегда использую «Access.Control», «Access.Label» и т. Д., Поэтому всегда используется одна и та же библиотека, и ссылка все еще существует на момент, когда должно произойти событие ...), но он все равно не срабатывает! В том же проекте у меня такая же проблема в нескольких классах; Я возьму пример группы меток на форме.Событие управления, которое не срабатывает в модуле класса VBA
Событие нагрузки формы создает первый, большая группа так:
Private Sub Form_Load()
...
set mGroups = new CDocTree
mGroups.Make Me
End Sub
В CDocTree есть три переменные-члены, объявленные как это:
Private WithEvents mVVPlan As CDocGroup
Private WithEvents mTestPlan As CDocGroup
Private mFrm As Form_FrmAlphaDocuments
и способ сделать по существу делает это:
Public Sub Make(frm As Access.Form)
Set mFrm = frm
With mFrm
Set mVVPlan = New CDocGroup
mVVPlan .Make .LblVVPlanBox, .LblVVPlanRef
Set mTestPlan = New CDocGroup
mTestPlan .Make .LblTestPlanBox, .LblTestPlanRef
End With
End Sub
И наконец, класс CDocGroup определяется следующим образом:
Private WithEvents mBox As Access.Label
Private WithEvents mRef As Access.Label
Public Event Clicked(grp As CDocGroup)
Public Sub Make(box As Access.Label, ref As Access.Label)
...
Set mBox = box
Set mRef = ref
End Sub
Private Sub mBox_Click()
Debug.Print "Event Click fired in CDocGroup on " & mBox.Name
RaiseEvent Clicked(Me)
End Sub
Private Sub mRef_Click()
Debug.Print "Event Click fired in CDocGroup on " & mRef.Name
RaiseEvent Clicked(Me)
End Sub
Вот и все: код никогда не попадает в mBox_Click или mRef_Click. Что я делаю неправильно?
Раньше мне приходилось заглушать эти события в модуле Form, чтобы они проходили к событиям класса (хотя я читал, что вам не нужно это делать). Таким образом, вставьте объявление скелета, Private Sub lblBox_Click() ... End Sub в самой форме и посмотрите, проходит ли она через события. – VBlades