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