【问题标题】:Sometimes the form Combobox only shows one row, why?有时表单 Combobox 只显示一行,为什么?
【发布时间】:2018-01-19 13:51:08
【问题描述】:

我复制了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 属性,但我找不到。

我注意到的另一件事是,通过键盘上的箭头键进行选择会遍历原始列表,而通过单击鼠标进行选择会为您提供搜索中的项目列表。

我认为有两个列表,但我不知道搜索中的项目列表存储在哪里,所以我可以以某种方式解决它。

【问题讨论】:

  • 谢谢,Hexfire,我只是在寻找一种显示图像的方法。

标签: excel combobox form-control vba


【解决方案1】:

我找到了解决办法

我发现 .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 隐藏和显示下拉字段。

这有点笨拙,所以如果有人能想到更好的方法会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多