ComboBox下拉列表仅触发每个其他框

时间:2015-11-10 00:13:04

标签: excel vba drop-down-menu combobox

我在MS Excel 2010中的用户表单中有一系列组合框。我为每个组件分配了_enter事件,调用.DropDown,这样当我选中框时,它们会自动打开下拉窗口。这适用于第一个,但是当我选择下一个时,它不起作用。 _enter事件触发(使用msgbox测试),但它不会下降。下面的框将下拉,但不会是之后的框。如果你向后标签,反过来会发生同样的事情。如果我按Tab键顺序在它们之间放置虚拟文本框,它们都会下拉。

任何想法如何解决这个问题?

我也尝试过使用KeyUp - > Ascii 9(tab)具有相同的结果。

1 个答案:

答案 0 :(得分:1)

在我给出解决方案之前,我将尝试解释为什么会出现这种意外行为。这似乎是由于一些事件竞赛条件。

当打开一些组合(说<%= favicon_link_tag 'favicon.ico' %>)(打开下拉窗口)然后使用ComboBox1键导航到另一个组合(例如ComboBox2)时,会发生这种情况。竞争条件发生是因为在内部,TAB的窗口也将处理按下的键,因此它会导致ComboBox1的窗口立即关闭,因为在同一时间只能打开一个组合窗体。

解决此问题的方法是处理ComboBox2事件,这是新组合通过TAB导航获得焦点后发生的最后一个事件。

<强>解决方案

对于每个组合,添加以下事件处理程序:

KeyUp

这些处理程序足以满足您Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyTab Then ComboBox1.DropDown End Sub Private Sub ComboBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyTab Then ComboBox2.DropDown End Sub ' similar handlers for ComboBox3, ComboBox4 etc.. 导航所需的行为。如果您在使用鼠标选择组合时需要相同的行为,也可以按原样保留TAB处理程序。