1

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

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

Private Sub ComboBox1_Enter()
ComboBox1.DropDown
End Sub

与组合框 2 和 3 相同

但是,这仅适用于其他所有盒子。在初始运行时,combobox1 具有焦点 - 不出现下拉菜单。按 T​​ab & combobox2 获得焦点并出现下拉菜单。再次按 cpmbobox3 获得焦点 - 没有下拉菜单。

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

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

任何人都知道为什么下拉方法在使用 Tab 时不适用于连续的组合框?

4

1 回答 1

1

是的,这是因为TABing干扰了正常功能。试试这个(尝试和测试

逻辑:捕获 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
于 2013-08-07T11:07:16.370 回答