带有清除选项的多个组合框过滤器

我运气不好

特定控件,它们的属性和过去的循环。 我以为我会分享这段代码,随时以适合您需要的任何方式进行修改/模块化。 可以从组合框after_update事件或“ clear_filter”按钮after_update事件中调用此函数。 我把它放在一个模块中。 哦,还有一件事...我碰巧在组合框的第1列中有我的FK,这可能需要更改。 抱歉,如果我“评论过多”,由于评论不佳,我迷失了很多次。 如果有更好的方法可以完成此操作,请随时告诉我,根据我的经验,vba的访问权限仅限于此区域。

Public Function frmSearch_cbxFilter(Optional clear As Boolean) 
Dim frm As Form
Dim sbFrm As SubForm
Dim ctrl As Control
Dim cbxItem As Variant
Dim cbxValue As Variant
Dim strFilter As String
Dim count As Integer
Dim i As Integer 
    Set frm = Forms!frmSearch
    Set sbFrm = frm!sbfrmProdDetailSearch 
    cbxItem = Array("cbxUser", "cbxDepartment", "cbxComment")   '"Named" Comboboxes
    cbxValue = Array("userID", "departmentID", "commentID")     'Filter Fields | Count must match cbxItem
    count = UBound(cbxItem, 1)                                  'Number of elements in array 
    strFilter = "1=1" 
    If clear Then                                               'Clear set to true
        For i = 0 To count
            For Each ctrl In frm.Controls                       'Every control on form
                If ctrl.Name = cbxItem(i) Then                  'Only "Named" controls on form
                    ctrl.Value = ""                             'Clear control value
                End If
            Next
        Next
        sbFrm.Form.FilterOn = False
    Else                                                        'Clear not set
        For i = 0 To count
            For Each ctrl In frm.Controls                       'Every control on form
                If ctrl.Name = cbxItem(i) Then                  'Only "Named" controls on form
                    If Not IsNull(ctrl.Column(1)) Then          'Only update filter if control contains a value
                        strFilter = strFilter & " AND [" & cbxValue(i) & "]=" & ctrl.Column(1) 'Build filter
                    End If
                End If
            Next
        Next 
        sbFrm.Form.Filter = strFilter
        sbFrm.Form.FilterOn = True
    End If 
End Function
祝好运。 :)

From: https://bytes.com/topic/access/insights/861547-multiple-combobox-filter-clear-option

.版本 2 .支持库 iext .支持库 EThread .程序集 窗口程序集_启动窗口 .程序集变量 许可证, 线程许可证 .程序集变量 结果文件号, 整数型 .程序集变量 线程数, 整数型 .程序集变量 停止标志, 逻辑型 .程序集变量 目录队列, 文本型, , "0" .程序集变量 最大线程数, 整数型 .程序集变量 队列许可证, 线程许可证 .程序集变量 文件写入锁, 线程许可证 .程序集变量 UI更新许可证, 线程许可证, , , ; 新增UI更新锁 .程序集变量 文件路径, 文本型 .程序集变量 工作线程数, 整数型 .子程序 __启动窗口_创建完毕 花名花见.皮肤加载 (6, , , , , ) 通用对话框_保存.初始目录 = 编辑框_目录.内容 最大线程数 = 4 ' 根据CPU核心数设置合适值 清除数组 (目录队列) ' 初始化目录队列 许可证 = 线程_创建许可证 () 队列许可证 = 线程_创建许可证 () 文件写入锁 = 线程_创建许可证 () UI更新许可证 = 线程_创建许可证 () ' 创建UI更新锁 结果文件号 = 打开文件 (“文件列表.txt”, #重写, ) 关闭文件 (结果文件号) 停止标志 = 假 编辑框_目录.内容 = 到文本 (读入文件 (取运行目录 () + “\地址.ini”)) 超级列表框_数据显示.始终显示选择项 = 真 最大线程数 = 5 ' 初始化线程池 .计次循环首 (最大线程数, ) 启动线程 (&目录扫描线程, , ) .计次循环尾 () .子程序 _按钮_查找文件_被单击 .局部变量 初始目录, 文本型 .局部变量 文本, 文本型 文本 = 文本_删除空行 (编辑框_过滤器.内容) .如果真 (文本 = “”) 信息框 (“未输入需要查找的文件名!”, 0, , ) 返回 () .如果真结束 ' 在主线程直接更新UI 标签_搜索完成.文本颜色 = #红色 标签_搜索完成.标题 = “文件枚举中,请稍等》》》》” 列表框1.清空 () 初始目录 = 编辑框_目录.内容 .如果真 (目录_是否存在 (初始目录) = 假) 信息框 (“目录不存在!”, 0, , ) 返回 () .如果真结束 停止标志 = 假 列表框1.清空 () ' 初始化目录队列 清除数组 (目录队列) 加入成员 (目录队列, 初始目录) ' 启动多个工作线程 .计次循环首 (最大线程数, ) 启动线程 (&目录扫描线程, , ) .计次循环尾 () .子程序 目录扫描线程 .局部变量 文件数组, 文本型, , "0" .局部变量 子目录数组, 文本型, , "0" .局部变量 当前目录, 文本型 .局部变量 i, 整数型 .判断循环首 (取反 (停止标志)) 线程_进入许可区 (许可证) .如果 (取数组成员数 (目录队列) > 0) 当前目录 = 目录队列 [1] 删除成员 (目录队列, 1, 1) ' 从队列头部取出目录 工作线程数 = 工作线程数 + 1 .否则 当前目录 = “” .如果结束 线程_退出许可区 (许可证) .如果真 (当前目录 = “”) 程序_延时 (100) ' 队列空时短暂休眠 到循环尾 () .如果真结束 ' 扫描当前目录的文件 文件_枚举 (当前目录, 编辑框_过滤器.内容 + “.txt”, 文件数组, 真, 假, 真) .计次循环首 (取数组成员数 (文件数组), i) .如果真 (停止标志) 跳出循环 () .如果真结束 保存结果 (文件数组 [i]) 列表框1.加入项目 (文件数组 [i], ) .计次循环尾 () ' 枚举子目录并加入队列 目录_枚举子目录 (当前目录, 子目录数组, 假) 线程_进入许可区 (许可证) .计次循环首 (取数组成员数 (子目录数组), i) 加入成员 (目录队列, 子目录数组 [i]) ' 添加到队列尾部 .计次循环尾 () 工作线程数 = 工作线程数 - 1 .如果 (取数组成员数 (目录队列) = 0 且 工作线程数 = 0) 标签_搜索完成.文本颜色 = #绿色 标签_搜索完成.标题 = “扫描完成!” .否则 标签_搜索完成.标题 = “正在扫描,剩余目录:” + 到文本 (取数组成员数 (目录队列)) .如果结束 线程_退出许可区 (许可证) .判断循环尾 () .子程序 保存结果 .参数 文件路径, 文本型 .局部变量 临时内容, 文本型 临时内容 = 文件路径 + #换行符 线程_进入许可区 (文件写入锁) 结果文件号 = 打开文件 (“文件列表.txt”, #改写, ) 移到文件尾 (结果文件号) 写出文本 (结果文件号, 临时内容) 关闭文件 (结果文件号) 线程_退出许可区 (文件写入锁) .子程序 _按钮_停止_被单击 停止标志 = 真 .子程序 __启动窗口_将被销毁 停止标志 = 真 .判断循环首 (线程数 > 0) ' 等待所有线程退出 程序_延时 (100) .判断循环尾 () 线程_删除许可证 (许可证) 写到文件 (取运行目录 () + “\地址.ini”, 到字节集 (编辑框_目录.内容)) .子程序 _编辑框_过滤器_放开某键, 逻辑型 .参数 键代码, 整数型 .参数 功能键状态, 整数型 .如果真 (键代码 = #回车键) _按钮_查找文件_被单击 () .如果真结束 .子程序 _列表框1_列表项被选择 .局部变量 文件内容, 文本型 .局部变量 文件号, 整数型 .局部变量 行数组, 文本型, , "0" .局部变量 列数组, 文本型, , "0" .局部变量 i, 整数型 .局部变量 j, 整数型 .局部变量 A, 整数型 超级列表框_数据显示.全部删除 () ' 确定需要加入的位置 ' 文件路径 = 列表框1.取项目文本 (列表框1.现行选中项) 文件号 = 打开文件 (文件路径, , ) 文件内容 = 读入文本 (文件号, ) 列数组 = 分割文本 (文件内容, #换行符, ) 关闭文件 (文件号) ' 导入每列数据 .计次循环首 (取数组成员数 (列数组), i) A = 超级列表框_数据显示.插入表项 (, 到文本 (超级列表框_数据显示.取表项数 () + 1), , , , ) ' 应在循环内对每一行列进行分割 .如果真 (取文本长度 (列数组 [i]) > 0) 行数组 = 分割文本 (列数组 [i], “|”, ) ' ? 每行独立分割 .计次循环首 (取数组成员数 (行数组), j) 超级列表框_数据显示.置标题 (A, j, 行数组 [j]) .计次循环尾 () .如果真结束 .计次循环尾 () .子程序 _超级列表框_数据显示_被双击, 逻辑型 .参数 横向位置, 整数型 .参数 纵向位置, 整数型 .参数 功能键状态, 整数型 .局部变量 行索引, 整数型 .局部变量 客户名称, 文本型 .局部变量 颜色, 文本型 .局部变量 数量, 文本型 .局部变量 电压, 文本型 .局部变量 电流, 文本型 .局部变量 老化, 文本型 .局部变量 全检, 文本型 .局部变量 备注, 文本型 ' 获取当前被双击的行索引(从1开始) 行索引 = 超级列表框_数据显示.现行选中项 .如果真 (行索引 ≠ -1) ' 获取该行第一列的内容(可根据需要改为其他列) 客户名称 = 超级列表框_数据显示.取标题 (行索引, 1) 颜色 = 超级列表框_数据显示.取标题 (行索引, 2) 数量 = 超级列表框_数据显示.取标题 (行索引, 3) 电压 = 超级列表框_数据显示.取标题 (行索引, 4) 电流 = 超级列表框_数据显示.取标题 (行索引, 5) 老化 = 超级列表框_数据显示.取标题 (行索引, 6) 全检 = 超级列表框_数据显示.取标题 (行索引, 7) 备注 = 超级列表框_数据显示.取标题 (行索引, 8) 编辑框_客户名称.内容 = 客户名称 编辑框_颜色.内容 = 颜色 编辑框_数量.内容 = 数量 编辑框_电流.内容 = 电流 .判断开始 (老化 = “是”) 组合框_老化.现行选中项 = 0 .判断 (老化 = “否”) 组合框_老化.现行选中项 = 1 .默认 .判断结束 .判断开始 (电压 = “24”) 组合框_电压.现行选中项 = 0 .判断 (电压 = “12”) 组合框_电压.现行选中项 = 1 .判断 (电压 = “48”) 组合框_电压.现行选中项 = 2 .判断 (电压 = “5”) 组合框_电压.现行选中项 = 3 .判断 (电压 = “ 3”) 组合框_电压.现行选中项 = 4 .默认 .判断结束 .判断开始 (全检 = “否”) 组合框_全检.现行选中项 = 0 .判断 (全检 = “是”) 组合框_全检.现行选中项 = 1 .默认 .判断结束 编辑框_备注.内容 = 备注 .如果真结束 .子程序 _按钮_加入数据_被单击 .局部变量 a, 整数型 ' 在最后一行插入新的条目 .如果 (编辑框_客户名称.内容 ≠ “” 且 编辑框_颜色.内容 ≠ “” 且 编辑框_数量.内容 ≠ “” 且 编辑框_电流.内容 ≠ “”) a = 超级列表框_数据显示.插入表项 (, 到文本 (超级列表框_数据显示.取表项数 () + 1), , , , ) 超级列表框_数据显示.置标题 (a, 1, 文本_删首尾空 (编辑框_客户名称.内容)) 超级列表框_数据显示.置标题 (a, 2, 文本_删首尾空 (到大写 (编辑框_颜色.内容))) 超级列表框_数据显示.置标题 (a, 3, 文本_删首尾空 (编辑框_数量.内容)) .判断开始 (组合框_电压.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 4, “24”) .判断 (组合框_电压.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 4, “12”) .判断 (组合框_电压.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 4, “48”) .判断 (组合框_电压.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 4, “5”) .判断 (组合框_电压.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 4, “3”) .默认 .判断结束 超级列表框_数据显示.置标题 (a, 5, 文本_删首尾空 (编辑框_电流.内容)) .判断开始 (组合框_老化.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 6, “是”) .默认 组合框_老化.现行选中项 = 1 超级列表框_数据显示.置标题 (a, 6, “否”) .判断结束 .判断开始 (组合框_全检.现行选中项 = 0) 超级列表框_数据显示.置标题 (a, 7, “否”) .默认 组合框_老化.现行选中项 = 1 超级列表框_数据显示.置标题 (a, 7, “是”) .判断结束 超级列表框_数据显示.置标题 (a, 8, 文本_删首尾空 (编辑框_备注.内容)) 超级列表框_数据显示.置标题 (a, 9, 到文本 (取年份 (取现行时间 ())) + “年” + 到文本 (取月份 (取现行时间 ())) + “月” + 到文本 (取日 (取现行时间 ())) + “日”) .否则 信息框 (“输入错误!”, 0, , ) .如果结束 编辑框_客户名称.内容 = “” 编辑框_备注.内容 = “” .子程序 _按钮_删除文件_被单击 .局部变量 行索引, 整数型 .局部变量 被选中的行数组, 整数型, , "0" 被选中的行数组 = 超级列表框_数据显示.取被选择表项 () .如果真 (取数组成员数 (被选中的行数组) > 0) 行索引 = 被选中的行数组 [1] ' 获取第一个被选中的行索引 超级列表框_数据显示.删除表项 (行索引) .如果真结束 .子程序 _按钮_保存文件_被单击 .局部变量 保存到的路径, 文本型 .局部变量 对话框结果, 逻辑型 .如果真 (超级列表框_数据显示.取表项数 () = 0) 信息框 (“没有需要保存的内容!”, 0, , ) 返回 () .如果真结束 ' 若当前已有文件路径,则提取目录部分作为初始目录 .如果真 (取反 (文件路径 = “”)) 保存到的路径 = 文本_取左边 (文件路径, “\”, -1, ) 通用对话框_保存.初始目录 = 保存到的路径 通用对话框_保存.文件名 = 编辑框_过滤器.内容 .如果真结束 ' 设置保存对话框属性 通用对话框_保存.类型 = 1 ' 1 表示保存文件 通用对话框_保存.过滤器 = “文本文件(*.txt)|*.txt” ' 通用对话框_保存.默认扩展名 = “txt” ' 显示对话框 对话框结果 = 通用对话框_保存.打开 () .如果真 (对话框结果) ' 用户点击“保存”后执行保存操作 文件路径 = 通用对话框_保存.文件名 ' 更新全局路径 超级列表框_保存到文件 (文件路径, 假) ' 假:覆盖写入 ' 信息框 (“文件已成功保存!”, 0, , ) .如果真结束 .子程序 超级列表框_保存到文件 .参数 目标路径, 文本型 .参数 是否追加, 逻辑型 .局部变量 文件号, 整数型 .局部变量 行索引, 整数型 .局部变量 列索引, 整数型 .局部变量 当前行文本, 文本型 ' 打开文件(追加或新建) .如果 (是否追加) 文件号 = 打开文件 (目标路径, #改写, ) ' 覆盖模式 .否则 文件号 = 打开文件 (目标路径, #重写, ) ' 创建模式 .如果结束 .如果真 (文件号 = 0) 信息框 (“文件创建失败!”, 0, , ) 返回 () .如果真结束 ' 写入数据行 .计次循环首 (超级列表框_数据显示.取表项数 (), 行索引) 当前行文本 = “” .计次循环首 (超级列表框_数据显示.取列数 (), 列索引) 当前行文本 = 当前行文本 + 超级列表框_数据显示.取标题 (行索引 - 1, 列索引) + “|” .计次循环尾 () 写文本行 (文件号, 当前行文本) .计次循环尾 () 关闭文件 (文件号)
最新发布
11-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值