excel - Combobox - 根据输入文本过滤列表
问题描述
我正在尝试修改以下代码以允许组合框根据您的输入自动过滤列表,类似于过滤器预览如何在过滤表列时缩小字段。
该代码应该在 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
但是,当我尝试按如下方式过滤范围值时,我收到类型不匹配运行时错误 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 个文本选项的静态数组。
谢谢您的帮助!
解决方案
根据Filter Function的文档,它sourcearray
是一个一维的字符串数组。
- 您清楚地指定了一个多维数组
Resize(790, 10)
。 - 并
.Value
返回一个变体数组,而不是字符串。
经审查,数组或变体是可以的,但它必须是一维的;所以你必须处理范围,因为即使是 1 列也会产生一个二维数组。这是我用来弥合差距的方法...
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
推荐阅读
- javascript - 如何在 VueJS 中动态提供 API 发送的 pdf 文件?
- php - 保存 PHPSpreadSheet 对象
- python - 使用列表生成嵌套的 json 布局
- c - 对二维数组的每一行的所有最大元素求和
- javascript - 将原型函数添加到特定字符串?
- jax-rs - 使用 CXF 代理客户端时在运行时添加查询参数
- azure-devops - VSTS - 自动链接此版本中的新作品不起作用
- postgresql - 在 PostgreSQL 中使用 COPY FROM 命令在多个表中插入
- asp.net - 在服务器中部署 IIS 项目时出现编译错误错误 -2146232576
- pyspark - 如何检查 PySpark 中是否存在临时视图?