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

VBA excel combobox.dropdown方法仅适用于其他框,excel,vba,Excel,Vba,我有一张有3个组合框的表格。当运行时,我希望能够使用Tab键循环浏览它们,并且当每个框都有焦点时,列表会自动下拉(因此我不必按下向下箭头) 在表单代码中,我有以下内容 Private Sub ComboBox1_Enter() ComboBox1.DropDown End Sub 与组合框2和3相同 然而,这将只适用于其他每一个盒子。在初始运行时,combobox1具有焦点-不显示下拉列表。按Tab键,combobox2获得焦点并显示下拉列表。再次按下CPMBOx3获得焦点-无下拉列表 再次按

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

在表单代码中,我有以下内容

Private Sub ComboBox1_Enter()
ComboBox1.DropDown
End Sub
与组合框2和3相同

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

再次按combobox1再次对焦和下拉列表apears等, 如果我单击任何框,列表将下拉

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


有人知道为什么在使用Tab时,下拉方法对连续的组合框不起作用吗?

是的,这种情况的发生是因为
制表
干扰了正常功能。尝试此(经过尝试和测试)

逻辑:捕获Tab键(键代码:9)并将其设置为
0
,然后使用代码移动到下一个组合

代码

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

是的,这是因为
选项卡
干扰了正常功能。尝试此(经过尝试和测试)

逻辑:捕获Tab键(键代码:9)并将其设置为
0
,然后使用代码移动到下一个组合

代码

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

+一个好问题!让我想了一会儿:)+1个好问题!让我想了一会儿:)