2017-06-05 108 views
1

我有一个可搜索的组合框,有建议可供选择,因为我在其中键入字母(下面的vba)。不过,我希望能够单击组合框的箭头(如果我不在其中键入任何其他内容)并查看整个下拉列表。出于某种原因,如果我点击箭头,下面的代码不会显示整个列表。下拉列表组合框excel

任何建议非常感谢。

Dim ws As Worksheet 
    Dim x, dict 
    Dim i As Long 
    Dim str As String 
    Set ws = Sheets("Lists") 
    x = ws.Range("Listing").value 
    Set dict = CreateObject("Scripting.Dictionary") 
    str = Me.cbo1.value 
    If str <> "" Then 
    For i = 1 To UBound(x, 1) 
    If InStr(LCase(x(i, 1)), LCase(str)) > 0 Then 
     dict.Item(x(i, 1)) = "" 
    End If 
    Next i 
    Me.cbo1.List = dict.keys 
    Else 
    Me.cbo1.List = x 
    End If 
    Me.cbo1.DropDown 

回答

0

你想要的是,如果在尚未选定或由用户编写的组合没有被点击的箭头,显示列表中的所有项目,你从命名范围"Listing"加载没有任何过滤。

要做到这一点,该事件处理程序添加到您的用户窗体的代码:

Private Sub Cbo1_DropButtonClick() 
    'If Len(Trim(cbo1.text)) = 0 Then 
    If Trim(cbo1.text) = "type here" Then 
    cbo1.List = Sheets("Lists").Range("Listing").Value 
    Exit Sub 
    End If 

    ' Your code to add only items that match the characters typed by the user 
    ' ... 
End Sub 
+0

非常感谢。它似乎并没有工作,但。我的组合框中总是有一个文字说“在这里输入”。这可能是它不工作的原因,例如因为它不是空白的?如果是的话,有没有办法改变你上面提出的vba? – thankseveryone

+0

@thankseveryone可以'如果修剪(cbo1.text)=“在这里输入”然后' –

+0

像往常一样有帮助,谢谢ASH – thankseveryone