【问题标题】:ActiveX Combo box list filtered according to initial letter根据首字母过滤的 ActiveX 组合框列表
【发布时间】:2021-10-15 14:08:23
【问题描述】:

我有一个组合框,其中列出了 2 列中的数据,姓氏和教名,效果很好,但滚动的列表相当长。我想要实现的是能够输入或选择姓氏的首字母,并且组合框下拉列表仅显示以该字母开头的姓氏的两列(就像现在一样),或者打开完整列表所选字母的第一个姓氏。我找到了很多似乎是答案的东西,但要么我不明白答案,要么我无法让它们发挥作用。谢谢。

我已经有一个用于组合框的私有子,可以给我一个行号(感谢 norie),并通过将 ColumnCount 设置为 2 来获取 2 列。

    Private Sub ComboBox1_Change()
    Me.Range("G1").Value = ComboBox1.ListIndex + 3

End Sub

【问题讨论】:

  • 如何填充组合框?
  • 使用包含列 A 和 B 的 ListFillRange
  • A 列和 B 列来自哪个工作表?
  • 从存储所有数据的工作表中'Data!A3:B99'

标签: excel vba


【解决方案1】:

Combobox 允许您在键入时使用以下代码过滤项目:

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim arrIn As Variant, arrOut As Variant
    Dim i As Long, j As Long

    arrIn = Sheet1.Range("A2:A2000")

    ReDim arrOut(1 To UBound(arrIn), 1 To 1)

    For i = 1 To UBound(arrIn)
        If arrIn(i, 1) Like ComboBox1.Text & "*" Then
            j = j + 1
            arrOut(j, 1) = arrIn(i, 1)
        End If
    Next
    ComboBox1.List = arrOut
End Sub

【讨论】:

  • 如果您已通过 ListFillRange 从某个范围填充组合框,则不会。
  • 感谢 Gangula 如此迅速的回复。我已经尝试过了,它可以工作,但是 ComboBox1.List = arrOut 给了我一个运行时错误。
  • 如果我注释掉该行,它仍然可以正常工作。谢谢
  • 已经将一份工作副本交给了我为之工作的人,我将在星期四作为志愿者为他工作的慈善组织做饭时获得更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2023-03-11
  • 1970-01-01
  • 2017-08-06
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多