我复制了this主题,因为这是一个非常类似的问题,出现在我的表单中。
我有一个表单,其中一个组合框在每次击键的项目列表中执行搜索。问题是,键入时显示的结果列表只有1行,显示在组合框下方。在该字段的右侧,有一个向上/向下箭头滚动按钮。
如果我用它来滚动列表,它会显示找到的项目。当我单击组合框的箭头时,带有结果的字段将消失,如果我再次单击箭头,则会显示已执行搜索的结果的完整列表。
以下是例程的代码:
Private Sub MiscD_Change()
Dim v As Variant, i As Long
With Me.MiscD
If .Value <> "" And .ListIndex = -1 Then
v = Range("MiscD").Value
.Clear 'clear all items
'Repopulate with matched items
For i = LBound(v) To UBound(v)
If LCase(v(i, 1)) Like "*" & LCase(.Value) & "*" Then
.AddItem v(i, 1)
.DropDown
End If
Next i
Else
'Repopulate with all items
.List = Range("MiscD").Value
End If
End With
End Sub
似乎ListFillRange在FormControl中不可用。 我检查过.DropDown属性可能会强制显示结果,但我找不到任何结果。
我注意到的其他事情是,通过键盘上的箭头键进行选择是通过原始列表进行选择,而通过单击鼠标进行选择可以获得搜索中的项目列表。
我认为有两个列表,但我不知道搜索中的项目列表存储在哪里,所以我可以用某种方式解决它。
答案 0 :(得分:0)
我找到了解决方案
我发现.DropDown是在每个循环后实现的,由于某种我不知道的原因而只保留一行。
我所做的是在For循环后移动它,因此检查了所有值并且列表可以完整显示
这是代码
Private Sub MiscD_Change()
Dim v As Variant, i As Long
With Me.MiscD
If .Value <> "" And .ListIndex = -1 Then
v = Range("MiscD").Value
.Clear 'clear all items
MiscDe.SetFocus
MiscD.SetFocus
'Repopulate with matched items
For i = LBound(v) To UBound(v)
If LCase(v(i, 1)) Like "*" & LCase(.Value) & "*" Then
.AddItem v(i, 1)
End If
Next i
.DropDown
Else
'Repopulate with all items
.List = Range("MiscD").Value
End If
End With
End Sub
当我在组合框中更改搜索条件时,我使用SetFocus隐藏并显示下拉字段。
这有点笨拙,所以如果有人能想出更好的方式,那将会有所帮助。