我正在尝试修改以下代码,以允许组合框根据您的输入自动过滤列表,类似于过滤表列时过滤器预览缩小字段的方式。
该代码应该在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个文本选项的静态数组)在组合框列表中获得相同过滤功能的建议。
感谢您的帮助!
答案 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