ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 把文件夹所有子文件中excel的某一列提取到同一个统计表中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-14 23:11 | 显示全部楼层
#3将2,3两列数据搞反了,现已更改。

求助-2.rar

58.5 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2013-11-14 23:14 | 显示全部楼层
dengxiyin 发表于 2013-11-14 22:56
您好,版主,能否发一个excel附件及这个宏注释我。谢谢!
  1. Dim arrf(), mf& '模块级变量,主程序和子程序都可以使用

  2. Sub Macro1()
  3.     Dim Mypath$, Fso As Object, i&, m&, brr(1 To 60000, 1 To 3)
  4.     Dim cnn As Object, rs As Object, rst As Object
  5.     With Application.FileDialog(msoFileDialogFolderPicker) '指定文件夹
  6.         If .Show = False Then Exit Sub
  7.         Mypath = .SelectedItems(1)
  8.     End With
  9.     Application.ScreenUpdating = False '关闭屏幕刷新
  10.     Set Fso = CreateObject("Scripting.FileSystemObject") '创建Fso对象
  11.     sFileType = "*.xls" '文件类型
  12.     Call GetFiles(Mypath, sFileType, Fso) '调用查询所有子文件夹中的所有文件子程序
  13.     For i = 1 To mf '逐个xls文件
  14.         Set cnn = CreateObject("ADODB.Connection") '创建连接对象
  15.         cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no';Data Source=" & arrf(i) '连接该文件
  16.         Set rst = cnn.OpenSchema(20) 'adSchemaTables'查找工作表
  17.         Do Until rst.EOF '有工作表
  18.             If rst.Fields("TABLE_TYPE") = "TABLE" Then '判断是工作表
  19.                 s = Replace(rst("TABLE_NAME").Value, "'", "") '去掉多余的单引号
  20.                 If Right(s, 1) = "$" Then '去掉像打印区域等假工作表
  21.                     Set rs = cnn.Execute("[" & s & "a1:a1]") '先查A1单元格
  22.                     If rs.Fields(0).Value <> "" Then '如果有值
  23.                         m = m + 1 '加一行
  24.                         brr(m, 1) = m '序号
  25.                         brr(m, 2) = rs.Fields(0).Value 'A1值
  26.                         brr(m, 3) = cnn.Execute("[" & s & "a3:a3]").Fields(0).Value 'A3值
  27.                     End If
  28.                 End If
  29.             End If
  30.             rst.MoveNext '下一个工作表
  31.         Loop
  32.     Next
  33.     Range("A5:F65536").ClearContents '清除原数据
  34.     [a5].Resize(m, 3) = brr '写数据
  35.     rs.Close '下面是关闭连接,释放内存
  36.     rst.Close
  37.     cnn.Close
  38.     Set rs = Nothing
  39.     Set rst = Nothing
  40.     Set cnn = Nothing
  41.     mf = 0
  42.     Erase arrf
  43.     Set Fso = Nothing
  44.     Application.ScreenUpdating = True
  45. End Sub
复制代码
Private Sub GetFiles(ByVal sPath$, ByVal sFileType$, Fso As Object) '查询所有子文件夹中的所有文件子程序,原理不用管它

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-14 23:15 | 显示全部楼层
dengxiyin 发表于 2013-11-14 23:08
您好,版主,感谢你的解答,我在别的文件夹运用后提示:运行时错误'-2147217900(80040e14)':
无效的SQL ...


请上传出错文件夹和出错文件

TA的精华主题

TA的得分主题

发表于 2018-8-30 11:45 | 显示全部楼层
ADO+子文件夹,If rs.Fields(0).Value <> "" Then '如果有值
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 03:38 , Processed in 0.029718 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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