【问题标题】:VBA excel combobox.dropdown method only works with every other boxVBA excel combobox.dropdown 方法仅适用于所有其他框
【发布时间】:2013-08-08 14:31:06
【问题描述】:

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

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

Private Sub ComboBox1_Enter()
ComboBox1.DropDown
End Sub

组合框 2 和 3 也一样

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

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

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

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

【问题讨论】:

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

标签: excel vba


【解决方案1】:

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

LOGIC:捕获 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2017-08-24
    • 1970-01-01
    • 2010-11-30
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多