combobox下拉列表只能触发每一个其他框

在MS Excel 2010中,我有一系列combobox在用户窗体中。我有_enter事件分配给每个调用.DropDown,所以当我通过框选项卡,他们将自动打开下拉窗口。 这对第一个很好,但是当我select下一个时,它不起作用。 _enter事件触发(使用msgbox进行testing),但不会下降。 下面的框会下降,但不是那个之后的框。 如果你倒退,同样的事情发生在相反的。 如果我把它们之间的虚拟文本框按Tab键顺序排列,它们都会下降。

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

我也试过使用KeyUp – > Ascii 9(tab),结果相同。

在我给出解决scheme之前,我会试着解释为什么会出现这种意外行为。 这似乎是由于一些事件的比赛条件。

它发生在某些组合(如ComboBox1 )打开(下拉窗口打开)时,然后使用TAB键导航到另一个组合(如ComboBox2 )。 竞争条件发生,因为在内部, ComboBox1的窗口也将处理按下的键,所以它导致ComboBox2的窗口立即closures,因为只有一个组合可以在同一个UserForm一次打开。

解决方法是处理KeyUp事件,这是一旦您的新组合通过TAB导航获取焦点时发生的最后一个事件。

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

 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导航所需的行为。 如果您在使用鼠标select组合时需要相同的行为,您也可以保留_Enter处理程序。