ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 遍历文件夹下的工作簿、工作表进行取数,无需打开文件,求助。

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-4-16 19:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下面附件中有24个文件,工作表数超过49个:
HelpSample.rar (210.18 KB, 下载次数: 348)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-16 21:41 | 显示全部楼层
zhaogang1960 发表于 2012-4-16 19:25
下面附件中有24个文件,工作表数超过49个:

我就简单复制了文件进行测试,是否实质为工作表数量问题还不知道
这个文件,我执行宏怎么文件就关了?反复多次还是这样。
有时候是不是EXCEL、电脑问题呢?因为曾经有一个文件,我在办公室的电脑EXCEL2010有些宏就运行没问题,但是家里的电脑也是EXCEL2010就出现问题,提示错误。

TA的精华主题

TA的得分主题

发表于 2012-4-16 22:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
whggwu 发表于 2012-4-16 21:41
我就简单复制了文件进行测试,是否实质为工作表数量问题还不知道
这个文件,我执行宏怎么文件就关了?反 ...

应该是电脑的问题,我这里运行正常

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-17 12:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2012-4-16 22:00
应该是电脑的问题,我这里运行正常

嗯,是电脑问题,在办公室就可以,没问题

谢谢!

TA的精华主题

TA的得分主题

发表于 2012-6-25 10:16 | 显示全部楼层
zhaogang1960 发表于 2012-4-16 19:25
下面附件中有24个文件,工作表数超过49个:

赵老师,如果要对数据分类求和,用SQL代码要怎么写

TA的精华主题

TA的得分主题

发表于 2012-6-25 11:06 | 显示全部楼层
XUYUJING2007 发表于 2012-6-25 10:16
赵老师,如果要对数据分类求和,用SQL代码要怎么写

这个题目不好修改,请上传附件

TA的精华主题

TA的得分主题

发表于 2012-6-25 11:14 | 显示全部楼层
zhaogang1960 发表于 2012-6-25 11:06
这个题目不好修改,请上传附件

HelpSample.rar (210.19 KB, 下载次数: 41) 就是对文件夹里的表格中的数据按日期进行分类汇总

TA的精华主题

TA的得分主题

发表于 2012-6-25 12:52 | 显示全部楼层
XUYUJING2007 发表于 2012-6-25 11:14
就是对文件夹里的表格中的数据按日期进行分类汇总
  1. Sub Macro1()
  2. '引用Microsoft AD0 Ext 2.8 for DDL and Security
  3. '引用Microsoft ActiveX Data Objects 2.x Library
  4.     Dim cnn As New ADODB.Connection
  5.     Dim rs As ADODB.Recordset
  6.     Dim cat  As New ADOX.Catalog, tb1 As Table
  7.     Dim d As Object
  8.     Dim SQL$, MyFile$, m%, i%, temp$, strField$, s$, t$, t2$, n%
  9.     Application.ScreenUpdating = False
  10.     Set d = CreateObject("scripting.dictionary")
  11.     Sheets("项目取数").[a1].CurrentRegion.Offset(3).ClearContents
  12.     Sheets("基础信息").[a1].CurrentRegion.Offset(3).ClearContents
  13.     Mypath = ThisWorkbook.Path & ""
  14.     MyFile = Dir(Mypath & "*.xlsx")
  15.     Do While MyFile <> ""
  16.         If MyFile <> ThisWorkbook.Name Then
  17.             n = n + 1
  18.             If n > 1 Then
  19.                 t = "[Excel 12.0;Database=" & Mypath & MyFile & "]."
  20.             Else
  21.                 cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath & MyFile
  22.             End If
  23.             t2 = "[Excel 12.0;HDR=No;Database=" & Mypath & MyFile & "]."
  24.             cat.ActiveConnection = "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=No';Data Source=" & Mypath & MyFile
  25.             For Each tb1 In cat.Tables
  26.                 If tb1.Type = "TABLE" Then
  27.                     s = Replace(tb1.Name, "'", "")
  28.                     If Right(s, 1) = "$" Then
  29.                         m = m + 1
  30.                         If m = 1 Then
  31.                             Set rs = cnn.Execute("[" & s & "a5:d]")
  32.                             For i = 0 To rs.Fields.Count - 1
  33.                                 temp = temp & rs.Fields(i).Name & ","
  34.                             Next
  35.                         End If
  36.                         SQL = "select * from " & t & "[" & s & "a5:d]"
  37.                         d(SQL) = ""
  38.                         If m Mod 49 = 0 Then
  39.                             SQL = Join(d.Keys, " UNION ALL ")
  40.                             Sheets("项目取数").[a65536].End(3).Offset(1).CopyFromRecordset cnn.Execute(SQL)
  41.                             d.RemoveAll
  42.                         End If
  43.                     End If
  44.                 End If
  45.             Next
  46.         End If
  47.         MyFile = Dir()
  48.     Loop
  49.     If d.Count > 0 Then
  50.         SQL = Join(d.Keys, " UNION ALL ")
  51.         Sheets("项目取数").[a65536].End(3).Offset(1).CopyFromRecordset cnn.Execute(SQL)
  52.     End If
  53.     With Sheets("项目取数")
  54.         SQL = "select 日期,sum(项目1),sum(项目2),sum(项目3) from [Excel 12.0;Database=" & ThisWorkbook.FullName & "].[项目取数$a3:d] group by 日期"
  55.         Set rs = New ADODB.Recordset
  56.         rs.Open SQL, cnn, 1, 3
  57.         .Range("a4").CopyFromRecordset rs
  58.         .Range("a1").CurrentRegion.Offset(rs.RecordCount + 3).ClearContents
  59.     End With
  60.     rs.Close
  61.     cnn.Close
  62.     Set rs = Nothing
  63.     Set cnn = Nothing
  64.     Set cat = Nothing
  65.     Set tb1 = Nothing
  66.     Application.ScreenUpdating = True
  67. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-6-25 12:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请看附件
HelpSample.rar (210.72 KB, 下载次数: 270)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-6-25 13:23 | 显示全部楼层
zhaogang1960 发表于 2012-6-25 12:53
请看附件

谢谢赵老师的解答
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 19:36 , Processed in 0.045873 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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