ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请老师帮我实现(按时间段、按内容条件)查询两个子表数据。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-18 11:17 | 显示全部楼层 |阅读模式
请老师帮忙实现,能够(按时间段)查询出sheet2与sheet3的数据,
并将查询出的数据放到sheet1工作表中。(图为查询效果)

103834.jpg
按时间段查询俩表数据.zip (13.18 KB, 下载次数: 169)

TA的精华主题

TA的得分主题

发表于 2012-5-18 11:38 | 显示全部楼层
本帖最后由 zhaogang1960 于 2012-5-18 12:42 编辑
  1. Sub Macro1()
  2.     Dim cnn As Object, SQL$
  3.     Set cnn = CreateObject("ADODB.Connection")
  4.     cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  5.     SQL = "select * from [Sheet2$B4:M] where 日期 between #" & [c2] & "# and #" & [c3] & "# union all select * from [Sheet3$B4:M] where 日期 between #" & [c2] & "# and #" & [c3] & "#"
  6.     Range("A1").CurrentRegion.Offset(4).ClearContents
  7.     Range("b5").CopyFromRecordset cnn.Execute(SQL)
  8.     cnn.Close
  9.     Set cnn = Nothing
  10. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-5-18 11:39 | 显示全部楼层
请看附件
按时间段查询俩表数据.rar (18.79 KB, 下载次数: 161)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-18 11:51 | 显示全部楼层
本帖最后由 xm2012 于 2012-5-18 11:54 编辑
zhaogang1960 发表于 2012-5-18 11:39
请看附件


老师,能帮我,再把(内容一)这个查询条件加上吗?

例如 开始时间: 1-1  截止日期: 1-8   内容一:类B

那么就查询出这个时间段包含类B的数据。  

最后,就是在没有输入查询条件的情况下,则将俩表数据全部显示。

TA的精华主题

TA的得分主题

发表于 2012-5-18 12:43 | 显示全部楼层
请看附件
按时间段查询俩表数据.rar (21.56 KB, 下载次数: 186)

TA的精华主题

TA的得分主题

发表于 2012-5-18 12:41 | 显示全部楼层
xm2012 发表于 2012-5-18 11:51
老师,能帮我,再把(内容一)这个查询条件加上吗?

例如 开始时间: 1-1  截止日期: 1-8   内容一:类 ...
  1. Sub Macro1()
  2.     Dim cnn As Object, SQL$, s$, t$
  3.     If [c2] <> "" Then s = s & " and 日期>=#" & [c2] & "#"
  4.     If [c3] <> "" Then s = s & " and 日期<=#" & [c3] & "#"
  5.     If [e2] <> "" Then s = s & " and 内容一='" & [e2] & "'"
  6.     If s <> "" Then t = " where " & Mid(s, 5)
  7.     Set cnn = CreateObject("ADODB.Connection")
  8.     cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  9.     SQL = "select * from [Sheet2$B4:M]" & t & " union all select * from [Sheet3$B4:M]" & t
  10.     Range("A1").CurrentRegion.Offset(4).ClearContents
  11.     Range("b5").CopyFromRecordset cnn.Execute(SQL)
  12.     cnn.Close
  13.     Set cnn = Nothing
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-18 15:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2012-5-18 12:43
请看附件

谢谢老师,太感谢您啦!!!

不知老师,能否在您写的代码中,注释下~!?

TA的精华主题

TA的得分主题

发表于 2012-5-18 16:08 | 显示全部楼层
xm2012 发表于 2012-5-18 15:15
谢谢老师,太感谢您啦!!!

不知老师,能否在您写的代码中,注释下~!?
  1. Sub Macro1()
  2.     Dim cnn As Object, SQL$, s$, t$
  3.     If [c2] <> "" Then s = s & " and 日期>=#" & [c2] & "#" '如果c2不为空,写第一个条件,如:s=" and 日期>=#2012-1-1#"
  4.     If [c3] <> "" Then s = s & " and 日期<=#" & [c3] & "#" '如果c3不为空,写第二个条件,如:s=" and 日期>=#2012-1-1# and 日期<=#2012-1-2#"
  5.     If [e2] <> "" Then s = s & " and 内容一='" & [e2] & "'" '如果e2不为空,写第三个条件,s=" and 日期>=#2012-1-1# and 日期<=#2012-1-2# and 内容一='类B'"
  6.     If s <> "" Then t = " where " & Mid(s, 5) '如果s不等于空,t=where 日期>=#2012-1-1# and 日期<=#2012-1-2# and 内容一='类B'"
  7.     Set cnn = CreateObject("ADODB.Connection") '创建连接对象
  8.     cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName '连接数据库
  9.     SQL = "select * from [Sheet2$B4:M]" & t & " union all select * from [Sheet3$B4:M]" & t 'SQL语句,如果t为空,则全部显示
  10.     Range("A1").CurrentRegion.Offset(4).ClearContents '清除原数据
  11.     Range("b5").CopyFromRecordset cnn.Execute(SQL) '复制查询结果
  12.     cnn.Close '关闭连接
  13.     Set cnn = Nothing '释放内存
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-18 17:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xm2012 于 2012-5-18 17:39 编辑
zhaogang1960 发表于 2012-5-18 16:08


谢谢老师,一次一次的指导,真的很感谢您。

有个问题想再麻烦一下老师您!
我用您写的代码增加了1个工作表查询,我想让SHEET4中的( J 列 )不被筛选过来。

不知道我这样修改对不对,请老师指正!


Sub Macro1()
    Dim cnn As Object, SQL$, s$, t$
    If [c2] <> "" Then s = s & " and 日期>=#" & [c2] & "#" '如果c2不为空,写第一个条件,如:s=" and 日期>=#2012-1-1#"
    If [c3] <> "" Then s = s & " and 日期<=#" & [c3] & "#" '如果c3不为空,写第二个条件,如:s=" and 日期>=#2012-1-1# and 日期<=#2012-1-2#"
    If [e2] <> "" Then s = s & " and 内容一='" & [e2] & "'" '如果e2不为空,写第三个条件,s=" and 日期>=#2012-1-1# and 日期<=#2012-1-2# and 内容一='类B'"
    If s <> "" Then t = " where " & Mid(s, 5) '如果s不等于空,t=where 日期>=#2012-1-1# and 日期<=#2012-1-2# and 内容一='类B'"
    Set cnn = CreateObject("ADODB.Connection") '创建连接对象
    cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName '连接数据库
    SQL = "select 编号,日期,经手人,内容一,内容二,内容三,数值一,数值二,内容四,内容五,内容六,内容七 from [Sheet2$B4:N]" & t & " union all select 编号,日期,经手人,内容一,内容二,内容三,数值一,数值二,内容四,内容五,内容六,内容七 from [Sheet3$B4:N]" & t & " union all select 编号,日期,经手人,内容一,内容二,内容三,数值一,数值二,内容四,内容五,内容六,内容七 from [Sheet4$B4:N]" & t 'SQL语句,如果t为空,则全部显示
    Range("A1").CurrentRegion.Offset(4).ClearContents '清除原数据
    Range("b5").CopyFromRecordset cnn.Execute(SQL) '复制查询结果
    cnn.Close '关闭连接
    Set cnn = Nothing '释放内存
End Sub

72949.jpg
按时间段查询俩表数据SQL (2).rar (22.69 KB, 下载次数: 90)

TA的精华主题

TA的得分主题

发表于 2012-5-18 17:51 | 显示全部楼层
xm2012 发表于 2012-5-18 17:32
谢谢老师,一次一次的指导,真的很感谢您。

有个问题想再麻烦一下老师您!

SQL = "select * from [Sheet2$B4:M]" & t & " union all select * from [Sheet3$B4:M]" & t & " union all select 编号,日期,经手人,内容一,内容二,内容三,数值一,数值二,内容四,内容五,内容六,内容七 from [Sheet4$B4:n]" & t 'SQL语句,如果t为空,则全部显示
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 16:46 , Processed in 0.054893 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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