组合框-根据输入文本过滤列表

时间:2019-02-13 19:25:27

标签: excel vba

我正在尝试修改以下代码,以允许组合框根据您的输入自动过滤列表,类似于过滤表列时过滤器预览缩小字段的方式。

该代码应该在A1:A791范围内,以获取要在组合框下拉列表中包含的790个项目的列表。最初,当我按如下所述定义静态数组时,过滤器就可以工作:

Sub ComboBox1_Populate(Optional fltr As String)
ComboBox1.List = Filter(Array("qqq", "qqwww", "qqttt", "qwer"), fltr)     
End Sub

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
Shift As Integer)
Call ComboBox1_Populate(ComboBox1.Text)
End Sub

Private Sub UserForm_Initialize()
Call ComboBox1_Populate
End Sub

但是,当我改为尝试按以下方式过滤范围值时,我收到带有以下内容的Type Mismatch运行时错误13:

Sub ComboBox1_Populate(Optional fltr As String)
ComboBox1.List = Filter(Sheets("DVTest").Cells(2, 1).Resize(790, 10).Value, 
fltr)
End Sub

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
Shift As Integer)
Call ComboBox1_Populate(ComboBox1.Text)
End Sub

Private Sub UserForm_Initialize()
Call ComboBox1_Populate
End Sub

我正在寻找有关如何根据指定范围(而不是4个文本选项的静态数组)在组合框列表中获得相同过滤功能的建议。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据Filter Function上的文档,sourcearray是一维字符串数组。

  • 您显然要使用Resize(790, 10)指定一个多维数组。
  • 然后.Value返回一个变量数组,而不是字符串。

经审查,可以使用数组或变量,但必须是一维的;因此,您必须处理该范围,因为即使1列也会产生2维数组。这就是我用来弥合差距的方法...

Function RangeToOneDemensionalArray(Target As Range) As Variant
Dim Cell As Range
Dim ResultArr
Dim i As Long

    If Target Is Nothing Then Exit Function
    ReDim ResultArr(Target.Count - 1) As String

    For Each Cell In Target
        ResultArr(i) = Cell.Value
        i = i + 1
    Next

    RangeToOneDemensionalArray = ResultArr
End Function