VBA excel combobox.dropdown方法仅适用于其他所有方框

时间:2013-08-07 09:24:08

标签: excel-vba vba excel

我有一个有3个组合框的表格。在运行时,我希望能够使用Tab键循环浏览它们,并且当每个框具有焦点以使列表自动下拉时(因此我不必按向下箭头)。

在表单代码中,我有以下

Private Sub ComboBox1_Enter()
ComboBox1.DropDown
End Sub

对于组合框2& 3

然而,这只适用于其他每一个盒子。在初始运行时,combobox1具有焦点 - 不显示下拉。按Tab& combobox2获得焦点并显示下拉列表。再按一次cpmbobox3获得焦点 - 没有下拉。

再次按下,combobox1再次获得焦点并下拉列表apears,依此类推, 如果我点击任何一个框,列表将下拉。

如果我在每个组合框之间放置一个文本框等对象,那么下拉方法将适用于每个组合框。

任何一个想法为什么下拉方法在使用Tab时不会对连续的组合框起作用?

1 个答案:

答案 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