我在MS Excel 2010中的用户表单中有一系列组合框。我为每个组件分配了_enter事件,调用.DropDown,这样当我选中框时,它们会自动打开下拉窗口。这适用于第一个,但是当我选择下一个时,它不起作用。 _enter事件触发(使用msgbox测试),但它不会下降。下面的框将下拉,但不会是之后的框。如果你向后标签,反过来会发生同样的事情。如果我按Tab键顺序在它们之间放置虚拟文本框,它们都会下拉。
任何想法如何解决这个问题?
我也尝试过使用KeyUp - > Ascii 9(tab)具有相同的结果。
答案 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
处理程序。