ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:按条件查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-2-9 16:50 | 显示全部楼层
zhaogang1960 发表于 2015-2-9 16:25
你这是一碗豆腐换成了豆腐一碗,我要的是你的具体要求,不是修改代码,我没有时间看懂别人写的代码

不好意思,老师我修改了,谢谢

点评

已回复,请查看  发表于 2015-2-9 17:00

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-9 18:30 | 显示全部楼层
本帖最后由 jjj2123456? 于 2015-2-9 18:32 编辑
zhaogang1960 发表于 2015-2-8 18:26
第二步,查询程序

工作表和数据库的表命名一致,赵老师我想做一个循环查询到各个工作表,可以实现吗。
其他的数据库表字段是不一样的,但是要查询条件前面的字段是一样的,请老师再费费心。

新建文件夹 (2).zip (98.14 KB, 下载次数: 8)

TA的精华主题

TA的得分主题

发表于 2015-2-10 00:11 | 显示全部楼层
jjj2123456? 发表于 2015-2-9 18:30
工作表和数据库的表命名一致,赵老师我想做一个循环查询到各个工作表,可以实现吗。
其他的数据库表字段 ...

添加一个有3个页面的多页控件,每个页面代表一个数据表:
  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 MultiPage1_Change()
  9.     Sheets(MultiPage1.Pages(MultiPage1.Value).Caption).Activate
  10. End Sub

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

  18. Private Sub UserForm_Initialize() '开启窗体设置18个ComboBox
  19.     Dim i As Integer
  20.     Dim j As Integer
  21.     Dim SQL As String
  22.     arr = Array("ID号", "编号", "单号", "年", "月", "日")
  23.     myTable = ActiveSheet.Name
  24.     Set cnn = New ADODB.Connection
  25.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\jiageguanli.mdb" '连接数据库
  26.     With MultiPage1 '添加一个多页控件
  27.         .Value = ActiveSheet.Index - 1
  28.         For j = 0 To 2
  29.             For i = 1 To 6
  30.                 SQL = "SELECT DISTINCT " & arr(i - 1) & " FROM " & .Pages(j).Caption
  31.                 Set rs = cnn.Execute(SQL)
  32.                 Me.Controls("ComboBox" & j * 6 + i).Column = rs.GetRows
  33.             Next
  34.         Next
  35.     End With
  36. End Sub
  37. Private Sub CommandButton1_Click() '确定
  38.     Dim s As String
  39.     Dim i As Integer
  40.     Dim j As Integer
  41.     Dim SQL As String
  42.     j = MultiPage1.Value
  43.     If Len(Me.Controls("ComboBox" & j * 6 + 1).Value) Then s = s & " and " & arr(0) & "=" & Me.Controls("ComboBox" & j * 6 + 1).Value
  44.     For i = 2 To 6
  45.         If Len(Me.Controls("ComboBox" & j * 6 + i).Value) Then s = s & " and " & arr(i - 1) & "='" & Me.Controls("ComboBox" & j * 6 + i).Value & "'"
  46.     Next
  47.     SQL = "SELECT * FROM " & MultiPage1.Pages(j).Caption
  48.     If Len(s) Then SQL = SQL & " WHERE " & Mid(s, 6)
  49.     Set rs = cnn.Execute(SQL)
  50.     If Not rs.EOF Then
  51.         With Sheets(MultiPage1.Pages(j).Caption)
  52.             .UsedRange.Offset(1).ClearContents
  53.             .[a2].CopyFromRecordset rs
  54.         End With
  55.     Else
  56.         MsgBox "没有查到"
  57.     End If
  58. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-2-10 00:14 | 显示全部楼层
请测试附件
新建文件夹 (2).rar (69.47 KB, 下载次数: 23)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-10 08:06 | 显示全部楼层
zhaogang1960 发表于 2015-2-10 00:14
请测试附件

谢谢赵老师!
又学到一招多页控件

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-11 18:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2015-2-10 00:14
请测试附件

老师您好!
再次麻烦您下
Private Sub UserForm_Initialize() '开启窗体设置6个ComboBox
    Dim i As Integer
    Dim j As Integer
    Dim SQL As String
    arr = Array("ID号", "编号", "单号", "年", "月", "日")
    For Each sh In Worksheets
        If sh.Name <> "其他" And sh.Name <> "qt1" Then
            myTable = sh.Name
        End If
    Next
    Set cnn = New ADODB.Connection
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\jiageguanli.mdb" '连接数据库
    For i = 1 To 6
      
        SQL = "SELECT DISTINCT " & arr(i - 1) & " FROM " & myTable
        Set rs = cnn.Execute(SQL)
       Me.Controls("ComboBox" & i).Column = rs.GetRows
    Next

End Sub
请问要如何修改代码把 rs.GetRows的值循环累加给ComboBox下拉窗口

TA的精华主题

TA的得分主题

发表于 2015-2-11 20:49 | 显示全部楼层
Me.Controls("ComboBox" & i).Column = rs.GetRows这一句就是

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-11 21:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2015-2-11 20:49
Me.Controls("ComboBox" & i).Column = rs.GetRows这一句就是

老师
Me.Controls("ComboBox" & i).Column = rs.GetRows
这一句是给循环到最后一个工作表的下拉窗口
我想把这些循环的值统计后再赋值给下拉窗口,不知道可不可以实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-11 21:21 | 显示全部楼层
zhaogang1960 发表于 2015-2-11 20:49
Me.Controls("ComboBox" & i).Column = rs.GetRows这一句就是

我的目的是有几个数据库表,就把数据库每个表的那一列的值累计赋值给下拉窗口。
就是在循环的过程中把这些数据存放在一起,最后循环完再把这些数据赋值给下拉窗口

TA的精华主题

TA的得分主题

发表于 2015-2-11 23:36 | 显示全部楼层
jjj2123456? 发表于 2015-2-11 21:21
我的目的是有几个数据库表,就把数据库每个表的那一列的值累计赋值给下拉窗口。
就是在循环的过程中把这 ...

我阅读能力较差,没有看懂
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 08:59 , Processed in 0.030867 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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