我在工作表上有十个下拉菜单,每个菜单都应对GotFocus()事件做出相同的响应.
我编写了以下代码,但是我得到了一个运行时错误(459) - "对象或类不支持set if if"
在一个名为clsPDRinputI 的课程中,我有以下内容:
Public WithEvents inputObj As OLEObject
Public Property Set myInput(obj As OLEObject)
Set inputObj = obj
End Property
Public Sub tbPDRInput_GotFocus()
//Do some stuff...
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我运行以下代码产生错误:
Dim tbCollection As Collection
Public Sub InitializePDRInput()
Dim myObj As OLEObject
Dim obj As clsPDRInput
Set tbCollection = New Collection
For Each myObj In Worksheets("1. PDR Documentation").OLEObjects
If TypeName(myObj.Object) = "ComboBox" Then
Set obj = New clsPDRInput
Set obj.myInput = myObj <-- **THIS LINE THROWS ERROR**
tbCollection.Add obj
End If
Next myObj
Set obj = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
我不确定是什么导致了这个错误.虽然我有一个OLEObject太普通,并不是每个人都OLEObject支持GotFocus()事件,这就是代码给出错误信息的原因?
我尝试过替换OLEObject,MSForms.ComboBox但这并没有解决问题.
任何想法 - 现在用Google搜索了两个小时,然后空白......
编辑 - 更新我认为的问题是......
我做了更多的调查,就我所知,这就是问题所在.
OLEObject(如...inputObj as OLEObject),那么暴露的唯一事件是GotFocus()和LostFocus().MSForms.ComboBox(如...inputObj as MSForms.ComboBox),那么各种各样的事件暴露(例如Change(),Click(),DblClick()),但该事件GotFocus(),并LostFocus()在未暴露点1和点2与excel中的对象模型一致.因此,当我尝试为ComboBox我的班级分配一个时,我得到一个错误(见原帖),因为ComboBox它不支持GotFocus()和LostFocus事件.
现在为了拼图.如果我将一个ComboBox添加到工作表(使用Control ToolBox)中,我双击该ComboBox以获取后面的代码,然后公开所有事件,包括GotFocus()和LostFocus()!
以下对我有用.您的代码存在一些问题,并且组合框没有GotFocus事件,因此您必须使用不同的代码.集合需要是模块中的全局集合,而不是类的一部分.我无法使用通用的"OLEobject"方法(你得到的相同错误)使用它.
' ### in the class
Public WithEvents inputObj As MSForms.ComboBox
Private Sub inputObj_Change()
MsgBox "Change!"
End Sub
' ### in a module
Dim tbCollection As Collection
Public Sub InitializePDRInput()
Dim myObj As OLEObject
Dim obj As clsPDRInput
Set tbCollection = New Collection
For Each myObj In Worksheets("Sheet1").OLEObjects
If TypeName(myObj.Object) = "ComboBox" Then
Set obj = New clsPDRInput
Set obj.inputObj = myObj.Object
tbCollection.Add obj
End If
Next myObj
End Sub
Run Code Online (Sandbox Code Playgroud)