Excel 运行时错误';459';:对象或类不支持事件集

Excel 运行时错误';459';:对象或类不支持事件集,excel,vba,class,runtime-error,activex,Excel,Vba,Class,Runtime Error,Activex,我创建了一个名为Class1的简单类,正在测试事件是否可用于WithEvents列出的对象或容器 Class1: Option Explicit Public WithEvents Obj As OLEObject Private Sub Obj_GotFocus() MsgBox "Got U" End Sub Private Sub Obj_LostFocus() MsgBox "Lost U" End Sub Option Explicit Dim clsObj

我创建了一个名为Class1的简单类,正在测试事件是否可用于WithEvents列出的对象或容器

Class1

Option Explicit

Public WithEvents Obj As OLEObject

Private Sub Obj_GotFocus()
    MsgBox "Got U"
End Sub

Private Sub Obj_LostFocus()
    MsgBox "Lost U"
End Sub
Option Explicit

Dim clsObj As Class1

Sub doit()
    Set clsObj = New Class1
    Set clsObj.Obj = Sheet1.OLEObjects(1) ' Getting error 459 on this line
End Sub
据我所知,OleObject是一个容器,因此它有上面列出的两个事件

模块1中,这是一个简单的代码,用于在我的工作簿的表1上设置单个对象。出于测试目的,我添加了5个不同的ActiveX控件,以查看哪个控件可以获取事件

模块1

Option Explicit

Public WithEvents Obj As OLEObject

Private Sub Obj_GotFocus()
    MsgBox "Got U"
End Sub

Private Sub Obj_LostFocus()
    MsgBox "Lost U"
End Sub
Option Explicit

Dim clsObj As Class1

Sub doit()
    Set clsObj = New Class1
    Set clsObj.Obj = Sheet1.OLEObjects(1) ' Getting error 459 on this line
End Sub
上面的以下行导致错误:

运行时错误“459”: 对象或类不支持事件集

注意

Option Explicit

Public WithEvents Obj As OLEObject

Private Sub Obj_GotFocus()
    MsgBox "Got U"
End Sub

Private Sub Obj_LostFocus()
    MsgBox "Lost U"
End Sub
Option Explicit

Dim clsObj As Class1

Sub doit()
    Set clsObj = New Class1
    Set clsObj.Obj = Sheet1.OLEObjects(1) ' Getting error 459 on this line
End Sub
我可以将WithEvents添加到此容器中的对象,例如。 一个标签1并让它工作,但它给出了一组不同的 事件,而不是Get_Focus()和Lost_Focus()事件。但是,这不是我想要的:

Class1

Option Explicit

Public WithEvents Obj As OLEObject

Private Sub Obj_GotFocus()
    MsgBox "Got U"
End Sub

Private Sub Obj_LostFocus()
    MsgBox "Lost U"
End Sub
Option Explicit

Dim clsObj As Class1

Sub doit()
    Set clsObj = New Class1
    Set clsObj.Obj = Sheet1.OLEObjects(1) ' Getting error 459 on this line
End Sub

模块1

Option Explicit

Public WithEvents Obj As OLEObject

Private Sub Obj_GotFocus()
    MsgBox "Got U"
End Sub

Private Sub Obj_LostFocus()
    MsgBox "Lost U"
End Sub
Option Explicit

Dim clsObj As Class1

Sub doit()
    Set clsObj = New Class1
    Set clsObj.Obj = Sheet1.OLEObjects(1) ' Getting error 459 on this line
End Sub

问题

Option Explicit

Public WithEvents Obj As OLEObject

Private Sub Obj_GotFocus()
    MsgBox "Got U"
End Sub

Private Sub Obj_LostFocus()
    MsgBox "Lost U"
End Sub
Option Explicit

Dim clsObj As Class1

Sub doit()
    Set clsObj = New Class1
    Set clsObj.Obj = Sheet1.OLEObjects(1) ' Getting error 459 on this line
End Sub
  • 有人能解释为什么代码不允许设置对象吗 容器对象
  • 提供这些活动背后的逻辑或目的是什么 当它们根本无法触发时
  • 为什么错误消息会通知这些事件不存在 是否可用于添加到Sheet1的任何ActiveX控件
  • 是否有其他方法访问OleObject容器 事件

  • 4:将对象添加到工作表,在VBA项目资源管理器中转到工作表,在“代码”窗口上方的左下拉列表中可以选择OLE对象,在右下拉列表中可以选择已添加的事件。看到我得到的错误了吗。我希望你能阅读我的全部帖子请尝试使用Sheet1.OLEObjects(1)。Object@hansPrashant,您正在将一个对象设置为容器,即Oleobject。这样不行。