我正在尝试在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事件)很好。
我显然做错了什么,但我在互联网上找不到任何解释内容的文档!
答案 0 :(得分:0)
这对我有用,但它特定于Textbox控件并且没有“GotFocus / LostFocus”事件......
<强> clsSheetControl 强>
Dim WithEvents objOLEControl As MSForms.TextBox
Public Sub Init(oleControl As MSForms.TextBox)
Set objOLEControl = oleControl
End Sub
Private Sub objOLEControl_Change()
MsgBox "Changed"
End Sub
Private Sub objOLEControl_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
MsgBox "Key down: " & KeyCode
End Sub
<强>工作表强>
Dim objControl As clsSheetControl
Public Sub SetControlHandler()
Set objControl = New clsSheetControl
objControl.Init Me.OLEObjects("TextBox1").Object
End Sub