我正在尝试在 Excel VBA 中创建一个自定义类来处理 OLEObject(工作表上的 ActiveX 控件)的事件 GotFocus 和 LostFocus。
自定义类clsSheetControl
Dim WithEvents objOLEControl as OLEObject
Public Sub Init(oleControl as OLEObject)
Set objOLEControl = oleControl
End Sub
结束自定义类
调用工作表
Public Sub SetControlHandler()
set clsControl = new ClsSheetControl
clsControl.Init(Me.OLEObjects("cmdControl1")
End Sub
结束工作表
当我在下拉列表中选择 objOLEControl 时,我可以在自定义类模块中创建“GotFocus”和“LostFocus”,但是当该行
Set objOLEControl = oleControl
在自定义类中遇到,我得到错误
“459:对象或类不支持这组事件”。
我尝试寻找答案,但大多数结果都涉及访问 OLEObject 中的控制对象,而不是我在这里尝试做的事情。
编辑
这也不适用于工作表
工作表
Dim WithEvents objCtrl As OLEObject
Dim WithEvents chkCtrl As MSForms.CheckBox
Private Sub Worksheet_Activate()
Set chkCtrl = Me.OLEObjects("chkControl").Object
Set objCtrl = Me.OLEObjects("chkControl")
End Sub
Private Sub chkControl_GotFocus()
MsgBox ("chkControl has focus")
End Sub
线
Set objCtrl = Me.OLEObjects("chkControl")
引发同样的错误。但是直接访问 GotFocus 事件(chkControl_GotFocus 事件)很好。