ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:按条件查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-2-8 14:39 | 显示全部楼层 |阅读模式
本帖最后由 jjj2123456? 于 2015-2-8 14:46 编辑

打开窗体

在ID号对应的combobox中写入1,那么就在数据库提取这一行数据到工作表,在编号写入cmz150101那么就在数据库提取这一行数据到工作表,单号、年、月、日同理

如果什么都不写,那么就提取数据库所有的数据到工作表

新建文件夹 (2).zip (118.9 KB, 下载次数: 11)
Sub 数据库数据写入工作表()
    Dim cnn As New ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim myPath As String
    Dim SQL As String
    Dim i As Integer
    On Error GoTo errmsg
    myPath = ThisWorkbook.Path & "\jiageguanli.mdb"
    myTable = ActiveSheet.Name
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath '连接数据库
    For Each sh In Worksheets
        If sh.Name = myTable Then
            SQL = "SELECT * FROM " & myTable
            Set rs = cnn.Execute(SQL)
            sh.Range("A1").CurrentRegion.ClearContents
            For i = 0 To rs.Fields.Count - 1
                sh.Cells(1, i + 1) = rs.Fields(i).Name
            Next
            sh.Range("A2").CopyFromRecordset rs
        End If
    Next
    MsgBox "读出access数据完毕。", vbInformation
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
    Exit Sub
errmsg:
    MsgBox Err.Description, , "错误报告"
End Sub
这段代码是论坛一位老师帮我写的,现在只可以把数据库里面的所有数据提取到工作表,我想按条件提取不知道可否实现。


TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-8 15:55 | 显示全部楼层
希望路过的老师帮帮忙

TA的精华主题

TA的得分主题

发表于 2015-2-8 18:25 | 显示全部楼层
第一步,基本设置:
  1. Dim cnn As ADODB.Connection '模块级变量
  2. Dim rs As ADODB.Recordset
  3. Dim myTable As String
  4. Dim arr As Variant

  5. Private Sub CommandButton2_Click() '退出
  6.     Unload Me
  7. End Sub

  8. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '关闭窗体时断开连接,释放内存
  9.     On Error Resume Next
  10.     rs.Close
  11.     cnn.Close
  12.     Set rs = Nothing
  13.     Set cnn = Nothing
  14. End Sub

  15. Private Sub UserForm_Initialize() '开启窗体设置6个ComboBox
  16.     Dim i As Integer
  17.     Dim SQL As String
  18.     arr = Array("ID号", "编号", "单号", "年", "月", "日")
  19.     myTable = "数据"
  20.     Set cnn = New ADODB.Connection
  21.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\jiageguanli.mdb" '连接数据库
  22.     For i = 1 To 6
  23.         SQL = "SELECT DISTINCT " & arr(i - 1) & " FROM " & myTable
  24.         Set rs = cnn.Execute(SQL)
  25.         Me.Controls("ComboBox" & i).Column = rs.GetRows
  26.     Next
  27. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-2-8 18:26 | 显示全部楼层
第二步,查询程序
  1. Private Sub CommandButton1_Click() '确定
  2.     Dim s As String
  3.     Dim i As Integer
  4.     Dim SQL As String
  5.     If Len(ComboBox1.Value) Then s = s & " and " & arr(0) & "=" & ComboBox1.Value
  6.     For i = 2 To 6
  7.         If Len(Me.Controls("ComboBox" & i).Value) Then s = s & " and " & arr(i - 1) & "='" & Me.Controls("ComboBox" & i).Value & "'"
  8.     Next
  9.     SQL = "SELECT * FROM " & myTable
  10.     If Len(s) Then SQL = SQL & " WHERE " & Mid(s, 6)
  11.     Set rs = cnn.Execute(SQL)
  12.     If Not rs.EOF Then
  13.         With Sheets("数据")
  14.             .UsedRange.Offset(1).ClearContents
  15.             .[a2].CopyFromRecordset rs
  16.         End With
  17.     Else
  18.         MsgBox "没有查到"
  19.     End If
  20. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-2-8 18:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请测试附件
新建文件夹 (2).rar (75.94 KB, 下载次数: 45)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-8 19:16 | 显示全部楼层
zhaogang1960 发表于 2015-2-8 18:28
请测试附件

感谢老师!
已经可以实现了。

TA的精华主题

TA的得分主题

发表于 2015-2-9 15:16 | 显示全部楼层
zhaogang1960 发表于 2015-2-8 18:28
请测试附件

赵老师,你好,能否看一下这里的问题,谢谢,ADO查询后。得出的数据少了,65536行后的数据都没有了

http://club.excelhome.net/thread-1163082-2-1.html

TA的精华主题

TA的得分主题

发表于 2015-2-9 16:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
此用户被禁言 发表于 2015-2-9 15:16
赵老师,你好,能否看一下这里的问题,谢谢,ADO查询后。得出的数据少了,65536行后的数据都没有了

ht ...

从你的1楼看不出来问题,后面的代码我看不懂,请重新发新帖求助,并通知我网址

TA的精华主题

TA的得分主题

发表于 2015-2-9 16:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2015-2-9 16:01
从你的1楼看不出来问题,后面的代码我看不懂,请重新发新帖求助,并通知我网址

赵老师,发了新的地址了,谢谢

http://club.excelhome.net/forum. ... =1186317&extra=

TA的精华主题

TA的得分主题

发表于 2015-2-9 16:25 | 显示全部楼层
此用户被禁言 发表于 2015-2-9 16:17
赵老师,发了新的地址了,谢谢

http://club.excelhome.net/forum.php?mod=viewthread&tid=1186317&ext ...

你这是一碗豆腐换成了豆腐一碗,我要的是你的具体要求,不是修改代码,我没有时间看懂别人写的代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 05:53 , Processed in 0.030606 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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