ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多工作薄多条件查询求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-19 09:33 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有以下需求,请高手帮忙啦!
说明:1.每个工作薄中,工作表的个数不确定,可能有空白工作表,工作表的命名也不规律。但有内容的工作表,格式都是一样的。
          2.要求如截图,不打开任何目标工作薄,查询任何一个字段,能查询出所有明细,并且速度较快,适应更多个工作薄(目前2个)的情况。   

10.jpg

多工作薄查询.zip

52.61 KB, 下载次数: 89

TA的精华主题

TA的得分主题

发表于 2016-1-19 10:01 | 显示全部楼层
你这个其实是合并工作表

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-19 16:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有没有高手相助?自己先顶!d=====( ̄▽ ̄*)b一下

TA的精华主题

TA的得分主题

发表于 2016-1-19 21:02 | 显示全部楼层
ADO法不需要传统意义上的打开文件,查询多工作簿速度很快,请参考:
  1. Sub ADO法()
  2.     Dim cnn As Object, rs As Object, rst As Object, SQL$, Mypath$, MyFile$, s$, t$, a, arr, i&
  3.     Application.ScreenUpdating = False
  4.     arr = Range("A2:J3")
  5.     For i = 1 To UBound(arr, 2)
  6.         If arr(2, i) <> "" Then
  7.             If i = 1 Then
  8.                 t = t & " and " & arr(1, i) & "=#" & arr(2, i) & "#"
  9.             Else
  10.                 t = t & " and " & arr(1, i) & "='" & arr(2, i) & "'"
  11.             End If
  12.         End If
  13.     Next
  14.     If t = "" Then Exit Sub
  15.     t = Mid(t, 5)
  16.     Range("A6:L65536").ClearContents
  17.     Mypath = ThisWorkbook.Path & ""
  18.     MyFile = Dir(Mypath & "*.xls")
  19.     Do While MyFile <> ""
  20.         If MyFile <> ThisWorkbook.Name Then
  21.             Set cnn = CreateObject("adodb.connection")
  22.             cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=excel 8.0;Data Source=" & Mypath & MyFile
  23.             Set rs = cnn.OpenSchema(20)
  24.             Do Until rs.EOF
  25.                 If rs.Fields("TABLE_TYPE") = "TABLE" Then
  26.                     s = Replace(rs("TABLE_NAME").Value, "'", "")
  27.                     If Right(s, 1) = "$" Then
  28.                         Set rst = cnn.Execute("[" & s & "a3:a3]")
  29.                         If rst.Fields(0).Name = "生产日期" Then
  30.                             SQL = "select 生产日期,处理结果,产品名称,产品编码,防伪码,入库,生产部门,生产车间,质检员,备注,'" & Replace(MyFile, ".xls", "") & "','" & Replace(s, "$", "") & "' from [" & s & "a3:j] where" & t
  31.                             Set rst = cnn.Execute(SQL)
  32.                             If Not rst.EOF Then Range("a65536").End(xlUp).Offset(1).CopyFromRecordset rst
  33.                         End If
  34.                     End If
  35.                 End If
  36.                 rs.MoveNext
  37.             Loop
  38.         End If
  39.         MyFile = Dir()
  40.     Loop
  41.     rs.Close
  42.     Set rs = Nothing
  43.     rst.Close
  44.     Set rst = Nothing
  45.     cnn.Close
  46.     Set cnn = Nothing
  47. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-1-19 21:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请测试附件
多工作薄查询.rar (38.22 KB, 下载次数: 196)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-19 21:21 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-19 22:11 | 显示全部楼层

赵版,如果某工作薄中有一张sheet1等等工作表,会提示以下运行错误。怎么处理?
QQ截图20160119220810.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-19 22:19 | 显示全部楼层
chengshanming 发表于 2016-1-19 22:11
赵版,如果某工作薄中有一张sheet1等等工作表,会提示以下运行错误。怎么处理?

漏掉了是存在空白工作表,会提示错误!

TA的精华主题

TA的得分主题

发表于 2016-1-19 22:21 | 显示全部楼层
chengshanming 发表于 2016-1-19 22:11
赵版,如果某工作薄中有一张sheet1等等工作表,会提示以下运行错误。怎么处理?

加上容错处理语句:
  1. Sub ADO法()
  2.     Dim cnn As Object, rs As Object, rst As Object, SQL$, Mypath$, MyFile$, s$, t$, a, arr, i&
  3.     Application.ScreenUpdating = False
  4.     arr = Range("A2:J3")
  5.     For i = 1 To UBound(arr, 2)
  6.         If arr(2, i) <> "" Then
  7.             If i = 1 Then
  8.                 t = t & " and " & arr(1, i) & "=#" & arr(2, i) & "#"
  9.             Else
  10.                 t = t & " and " & arr(1, i) & "='" & arr(2, i) & "'"
  11.             End If
  12.         End If
  13.     Next
  14.     If t = "" Then Exit Sub
  15.     t = Mid(t, 5)
  16.     Range("A6:L65536").ClearContents
  17.     On Error Resume Next
  18.     Mypath = ThisWorkbook.Path & ""
  19.     MyFile = Dir(Mypath & "*.xls")
  20.     Do While MyFile <> ""
  21.         If MyFile <> ThisWorkbook.Name Then
  22.             Set cnn = CreateObject("adodb.connection")
  23.             cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=excel 8.0;Data Source=" & Mypath & MyFile
  24.             Set rs = cnn.OpenSchema(20)
  25.             Do Until rs.EOF
  26.                 If rs.Fields("TABLE_TYPE") = "TABLE" Then
  27.                     s = Replace(rs("TABLE_NAME").Value, "'", "")
  28.                     If Right(s, 1) = "$" Then
  29.                         Set rst = cnn.Execute("[" & s & "a3:a3]")
  30.                         If Err.Number = 0 Then
  31.                             If rst.Fields(0).Name = "生产日期" Then
  32.                                 SQL = "select 生产日期,处理结果,产品名称,产品编码,防伪码,入库,生产部门,生产车间,质检员,备注,'" & Replace(MyFile, ".xls", "") & "','" & Replace(s, "$", "") & "' from [" & s & "a3:j] where" & t
  33.                                 Set rst = cnn.Execute(SQL)
  34.                                 If Not rst.EOF Then Range("a65536").End(xlUp).Offset(1).CopyFromRecordset rst
  35.                             End If
  36.                         Else
  37.                             Err.Clear
  38.                         End If
  39.                     End If
  40.                 End If
  41.                 rs.MoveNext
  42.             Loop
  43.         End If
  44.         MyFile = Dir()
  45.     Loop
  46.     rs.Close
  47.     Set rs = Nothing
  48.     rst.Close
  49.     Set rst = Nothing
  50.     cnn.Close
  51.     Set cnn = Nothing
  52. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-1-19 22:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
下面附件中各插入了一张新表,请测试:
多工作薄查询.rar (41.44 KB, 下载次数: 188)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 18:54 , Processed in 0.030826 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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