我有一个有3个组合框的表格。在运行时,我希望能够使用Tab键循环浏览它们,并且当每个框具有焦点以使列表自动下拉时(因此我不必按向下箭头)。
在表单代码中,我有以下
Private Sub ComboBox1_Enter()
ComboBox1.DropDown
End Sub
对于组合框2& 3
然而,这只适用于其他每一个盒子。在初始运行时,combobox1具有焦点 - 不显示下拉。按Tab& combobox2获得焦点并显示下拉列表。再按一次cpmbobox3获得焦点 - 没有下拉。
再次按下,combobox1再次获得焦点并下拉列表apears,依此类推, 如果我点击任何一个框,列表将下拉。
如果我在每个组合框之间放置一个文本框等对象,那么下拉方法将适用于每个组合框。
任何一个想法为什么下拉方法在使用Tab时不会对连续的组合框起作用?
答案 0 :(得分:1)
是的,因为TABing
会干扰正常运作。试试这个(经过测试和测试)
LOGIC :捕获Tab键(键码:9)并将其设置为0
,然后使用代码移至下一个组合。
<强> CODE 强>:
Option Explicit
Dim i As Long
'~~> Adding Sample Data
Private Sub UserForm_Initialize()
For i = 1 To 10
ComboBox1.AddItem i: ComboBox2.AddItem i: ComboBox3.AddItem i
Next i
ComboBox1.DropDown
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 9 Then
KeyCode = 0
ComboBox2.SetFocus
ComboBox2.DropDown
End If
End Sub
Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 9 Then
KeyCode = 0
ComboBox3.SetFocus
ComboBox3.DropDown
End If
End Sub
Private Sub ComboBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 9 Then
KeyCode = 0
ComboBox1.SetFocus
ComboBox1.DropDown
End If
End Sub