gpt4 book ai didi

excel - 使用自定义类访问 OLEObject 事件

转载 作者:行者123 更新时间:2023-12-03 16:21:11 25 4
gpt4 key购买 nike

我正在尝试在 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: Object or class does not support this set of events".

我试着寻找答案,但大部分结果都涉及访问 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 事件)没问题。

最佳答案

这对我有用,但它特定于文本框控件并且没有“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

关于excel - 使用自定义类访问 OLEObject 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10761973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com