ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3928|回复: 22

[求助] ado筛选怎么写ComboBox有请zhaogang1960老师

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-25 10:44 | 显示全部楼层 |阅读模式
求助赵老师,这个筛选数据库的代码是在论坛找的你的代码。我想要的功能是类似于E表的高级筛选功能,这4个条件可以相互组合,又可以单独使用,比如选择年份2009年后,其余3个ComboBox为空时,就将数据库明细表内年份为2009年的数据全部提取过来,如果填入了年份2009年和施工单位赵勇施工队就将2009年内包含赵勇施工队的数据提取过来,这个变量怎么写呢,主要是ComboBox有为空的时候,请赵老师方便时给与帮助,问题在附件谢谢 新建文件夹 (2).rar (20.56 KB, 下载次数: 48)

TA的精华主题

TA的得分主题

发表于 2011-1-25 11:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 望江婷 于 2011-1-25 10:44 发表
求助赵老师,这个筛选数据库的代码是在论坛找的你的代码。我想要的功能是类似于E表的高级筛选功能,这4个条件可以相互组合,又可以单独使用,比如选择年份2009年后,其余3个ComboBox为空时,就将数据库明细表内年份为 ...

没有注意到,歉
不必指名求助,以免错过高手们的帮助,发个短信就可以了

TA的精华主题

TA的得分主题

发表于 2011-1-25 11:04 | 显示全部楼层
Private Sub CommandButton1_Click()
    Dim cnn As New ADODB.Connection
    Dim Sql As String, i%, arr
    arr = [a2:h2&""]
    For i = 1 To 4
        If Len(Controls("ComboBox" & i).Value) Then Sql = Sql & " and " & Controls("Label" & i).Caption & "='" & Controls("ComboBox" & i).Value & "'"
    Next
    If Sql = "" Then Exit Sub
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\数据库.mdb"
    Sql = "select " & Join(arr, ",") & " from 明细 where " & Mid(Sql, 6)
    [a3:h65536] = ""
    [a3].CopyFromRecordset cnn.Execute(Sql)
    cnn.Close
    Set cnn = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 11:12 | 显示全部楼层
呵呵,老师太谦虚了,谢谢赵老师,好好学习学习,提前恭祝赵老师春节愉快,阖家安康。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 11:16 | 显示全部楼层
赵老师这一句Mid(Sql, 6)是什么意思呢?

TA的精华主题

TA的得分主题

发表于 2011-1-25 11:17 | 显示全部楼层
原帖由 望江婷 于 2011-1-25 11:16 发表
赵老师这一句Mid(Sql, 6)是什么意思呢?

去掉前面5个多余的字符:“ and ”

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 11:22 | 显示全部楼层
哦明白了,就是有为空的条件时,不会出现操作字符丢失现象吧,太高了,谢谢

TA的精华主题

TA的得分主题

发表于 2011-1-25 11:26 | 显示全部楼层
修改一下:
Dim cnn As ADODB.Connection

Private Sub CommandButton1_Click()
    Dim i%, arr, Sql As String
    arr = [a2:h2&""]
    For i = 1 To 4
        If Len(Controls("ComboBox" & i).Value) Then Sql = Sql & " and " & Controls("Label" & i).Caption & "='" & Controls("ComboBox" & i).Value & "'"
    Next
    [a3:h65536] = ""
    If Sql = "" Then Exit Sub
    Sql = "select " & Join(arr, ",") & " from 明细 where " & Mid(Sql, 6)
    [a3].CopyFromRecordset cnn.Execute(Sql)
End Sub

Private Sub UserForm_Initialize()
    Dim i%, arr
    Set cnn = New ADODB.Connection
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\数据库.mdb"
    For i = 1 To 4
        arr = cnn.Execute("select distinct " & Controls("Label" & i).Caption & " from 明细").GetRows
        Controls("ComboBox" & i).List = WorksheetFunction.Transpose(arr)
    Next
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    cnn.Close
    Set cnn = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 17:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-3-21 21:39 | 显示全部楼层
第一次见这种写法arr = [a2:h2&""]太高了请问侠圣gang1960  
如果写成Range或Cells----应该怎么写呢,怎么表示呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 09:25 , Processed in 0.040222 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表