在vba

时间:2015-06-02 10:50:40

标签: vba excel-vba combobox focus excel

我有一些自动创建一些ActiveX组合框的vba代码。为了处理他们的事件,我用CComboEvent对象填充一个全局Collection(我写的自定义类,见下文),每个组合框都有一个。 CComboEvent对象应该处理事件。虽然下面的代码中的cbx_Change()按预期工作,但cbx_GotFocus()不会触发。

我觉得我在监督某事,有人可以帮忙吗?

谢谢

Option Explicit

Public WithEvents Cbx As MSForms.ComboBox

Private Sub Cbx_Change()
    ' TODO: Filter data that is shown in ListFillRange
    ' For now just show that the event fires:
    MsgBox Cbx.Value  ' This works as expected on every key stroke
End Sub

Private Sub Cbx_GotFocus()
    MsgBox "FOCUS!"  ' Never shown
    ' Open the dropdown list
    Cbx.ListFillRange = "A1:A11"
    Cbx.DropDown
End Sub

1 个答案:

答案 0 :(得分:0)

要正确关闭此问题:Cbx_GotFocus()永远不会触发的原因是MSForms.ComboBox在此上下文中确实无法使用Cbx_KeyUp()。可以像这样检查可用事件:

  1. 打开vba编辑器窗口上方的左下拉列表,然后选择要响应Choose element

  2. 事件的类元素
  3. 打开vba编辑器窗口上方的右下拉列表,查看哪些活动可以使用Choose event

  4. 这是一个技巧,您可以在不同的场合使用它来检查vba中的内置事件/功能。遗憾的是我没有立刻想到它。我最终使用Cbx_DropButtonClick()HOST = CHIRANJIB_VAIO的组合来响应该特定项目中的用户互动。