Vba 从自动填充组合框中停止下拉选择
我有一个ActiveX组合框,它有一个下拉列表,当用户在组合框中键入字符时,该下拉列表将被填充和过滤。下拉项来自cLst。因此下拉列表将打开,但一旦用户按下箭头,组合框就会填充第一个下拉列表项,并且下拉列表中的所有其他项都会消失,因为它会尝试按组合框中的项过滤下拉列表,这与下拉列表中的一个项目完全匹配,即箭头向下时突出显示的项目 当向下箭头指向下拉列表时,如何避免这种自动填充行为,并让用户在要填充组合框的选择上按enter键 如果用户避免使用键盘,鼠标可以很好地滚动并高亮显示,然后单击,并且仅在单击时填充组合框。我想滚轮工作,如果可能的话,滚动通过下拉列表Vba 从自动填充组合框中停止下拉选择,vba,excel,combobox,Vba,Excel,Combobox,我有一个ActiveX组合框,它有一个下拉列表,当用户在组合框中键入字符时,该下拉列表将被填充和过滤。下拉项来自cLst。因此下拉列表将打开,但一旦用户按下箭头,组合框就会填充第一个下拉列表项,并且下拉列表中的所有其他项都会消失,因为它会尝试按组合框中的项过滤下拉列表,这与下拉列表中的一个项目完全匹配,即箭头向下时突出显示的项目 当向下箭头指向下拉列表时,如何避免这种自动填充行为,并让用户在要填充组合框的选择上按enter键 如果用户避免使用键盘,鼠标可以很好地滚动并高亮显示,然后单击,并且仅在
Private Sub newCmb_Change()
filterComboList Tool.newCmb, cLst
End Sub
Private Sub newCmb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Tool.newCmb.DropDown
End Sub
Private Sub newCmb_GotFocus() 'or _MouseDown()
Tool.newCmb.DropDown
End Sub
Public Sub filterComboList(ByRef cmb As ComboBox, ByRef dLst As Variant)
Dim itm As Variant, lst As String, sel As String, rng As Range
With Worksheets("Database")
Set rng = Application.Intersect(.UsedRange.Rows(2), .Cells.Resize(.Columns.Count - 1).Offset(1))
End With
Application.EnableEvents = False
With cmb
sel = .Value
If IsEmpty(cLst) Then cLst = rng
For Each itm In cLst
If Len(itm) > 1 Then If InStr(1, itm, sel, 1) Then lst = lst & itm & "||"
Next
If Len(lst) > 1 Then .List = Split(Left(lst, Len(lst) - 2), "||") Else .List = dLst
End With
Application.EnableEvents = True
End Sub
我当时也在处理同样的问题,最后在一个微软帮助网站的帖子上找到了一些信息,让我可以随意使用它。这似乎对我有用。这是一个精简版本的什么,我用在一张纸上为这个相同的概念 基本思想涉及newCmb_KeyDown事件,但在组合框所在的工作表中,其整体行为应类似于按键,这会阻碍箭头键的按下并设置标志。通过将KeyCode值设置为0并将newCmb.ListIndex值更改+/-1以更改选择,并在newCmb_更改事件中使用标志,可以取消键的操作,从而防止组合框由于上下箭头而更改链接的单元格值。当您到达KeyDown或KeyPress事件的末尾时,您可以在希望发生更改时重置标志 希望这些帮助,在我找到的线索的答案中有一个链接,它有一些一般的想法,尽管重点是用户表单而不是电子表格。祝你好运 **编辑 注意:在我的工作表中,这些代码部分似乎控制了这种行为,但如果您在使其工作时遇到问题,我可以再看一次