ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 合并不同文件夹下相同名称的工作簿内的工作表到同一个工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-5-31 16:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
       各位EH的老师们,由于工作需要, 需要将不同文件夹下的相同名称的工作簿合并成一个工作簿,工作簿内的工作表也按照名字合并起来(只保留一个表头),由于工作簿数量过多,复制粘贴很耗时间,我查了论坛上一些老师提供的合并方法,其中找到一个要求和我一样的,地址是http://club.excelhome.net/forum.php?mod=viewthread&tid=1171780&page=1#pid8689355,但是下载附件后好像有错也用不了(也可能是我不会用)因为比较着急,所以就发帖子了。
附件提供了一个工作簿的例子和从那个帖子里下载的程序。 麻烦各位老师帮我看一下。      谢谢!
       刚注册发帖,所有有不符合论坛规矩的地方,请通知我一下,立马修改哈~


汇总.rar

692.21 KB, 下载次数: 98

TA的精华主题

TA的得分主题

发表于 2016-5-31 22:44 | 显示全部楼层
本帖最后由 zhaogang1960 于 2016-5-31 22:47 编辑

请参考:
Sub ADO法()
    Dim cnn As Object, rs As Object, SQL$, Fso As Object, Folder As Object, arr$(), m&, i&, wb As Workbook
    Application.ScreenUpdating = False
    Set cnn = CreateObject("adodb.connection")
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set Folder = Fso.GetFolder(ThisWorkbook.Path & "\数据")
    Call GetFiles(Folder, arr, m)
    Set wb = Workbooks.Add(xlWBATWorksheet)
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=excel 12.0;Data Source=" & arr(1)
    SQL = "select * from [Sheet1$]"
    Set rs = cnn.Execute(SQL)
    With wb.Sheets(1)
        For i = 1 To rs.Fields.Count
            .Cells(1, i) = rs.Fields(i - 1).Name
        Next
        .[a2].CopyFromRecordset rs
        For i = 2 To m
            SQL = "select * from [Excel 12.0;Database=" & arr(i) & "].[Sheet1$]"
            .Range("a" & .Rows.Count).End(xlUp).Offset(1).CopyFromRecordset cnn.Execute(SQL)
        Next
    End With
    Application.DisplayAlerts = False
    wb.SaveAs ThisWorkbook.Path & "\需要得到的结果\001 Personal Wash.xlsx"
    wb.Close
    Set Folder = Nothing
    Set Fso = Nothing
    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
    Application.ScreenUpdating = True
    MsgBox "ok"
End Sub

Sub GetFiles(ByVal Folder As Object, arr$(), m&)
    Dim SubFolder As Object
    Dim File As Object
    For Each File In Folder.Files
        If File.Name Like "*.xlsx" Then
            m = m + 1
            ReDim Preserve arr(1 To m)
            arr(m) = File
        End If
    Next
    For Each SubFolder In Folder.SubFolders
        Call GetFiles(SubFolder, arr, m)
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2016-5-31 22:47 | 显示全部楼层
请测试附件
汇总.rar (425.54 KB, 下载次数: 552)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-6-1 09:13 | 显示全部楼层
汇总.rar (432.32 KB, 下载次数: 252)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-6-1 11:10 | 显示全部楼层
正在找多文件夹中相同文件汇总,真的是学习了,太好用了,省了不少时间

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-2 12:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 vince鑫15 于 2016-6-2 12:25 编辑

谢谢老师的回答!
老师我有按照您的附件去跑了一下,发现出来的结果似乎含有中文的列都会出现信息丢失,想问一下是什么原因呢?  
另外我尝试合并超过一个工作簿时程序似乎没办法完成(就是每个文件夹内有多个同名工作簿001,002,003等)

附件是结果以及我更新的数据源
刚手动贴了60多个工作簿,觉得为了工作效率,真是急需提升办公技能T-T

汇总2.rar

1.17 MB, 下载次数: 57

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-2 12:32 | 显示全部楼层

完美! 老师我测试过了,没有问题哈
不过我刚有尝试多个工作簿的情况,发现还是只能合并001的工作簿,对其他的工作簿没有操作,我想问一下是需要进行怎样的改动或设置才可以让它对文件内的所有工作簿都进行同样的操作呢?
附件是测试的结果以及新的数据   
我一定好好学习争取日后成为您这样的大神T-T

TA的精华主题

TA的得分主题

发表于 2016-6-2 14:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

  1. '*********************************
  2. '*******  北极狐工作室出品  ******
  3. '*******  QQ:14885553      ******
  4. '*********************************

  5. Sub Opiona()

  6. 'On Error Resume Next    '// 发生错误,自动执行下一句,就是忽略错误
  7. Application.ScreenUpdating = False '//关闭屏幕刷新
  8. Application.DisplayAlerts = False '//关闭系统提示
  9. t = Timer   '//开始时间
  10.    
  11.     PathG = ThisWorkbook.Path & "\需要得到的结果.xlsx" '//先删除以前的结果
  12.     Set FSO = CreateObject("Scripting.FileSystemObject")
  13.     If FSO.FileExists(PathG) = True Then
  14.         Kill PathG
  15.     End If
  16.    
  17.     FileArr = FileAllArr(ThisWorkbook.Path, "*.xls?", ThisWorkbook.Name, True, False)   '//获得文件列表,见函数解释
  18.     Set WB = Workbooks.Add  '新建一个工作簿
  19.     Set SHX = WB.Sheets(1)

  20.     For I = 0 To UBound(FileArr)
  21.         Rem  '//工作簿的问题,无法使用SQL,而且还要以修复形式打开
  22.         Set WBOPEN = Workbooks.Open(Filename:=FileArr(I), CorruptLoad:=xlExtractData)
  23.         Set SHOPEN = WBOPEN.Sheets(1)
  24.         If I = 0 Then '//粘贴标题
  25.             SHOPEN.Range("A1:CZ1").Copy SHX.Range("A1")
  26.         End If
  27.         If InStr(FileArr(I), ".xlsx") > 0 Then  '//2007和2003最大行数有区别
  28.             MAXROW = 1048576
  29.         Else
  30.             MAXROW = 65536
  31.         End If
  32.         
  33.         IROW = SHX.Range("A" & MAXROW).End(3).Row + 1
  34.         LASTROW = SHOPEN.Range("A" & MAXROW).End(3).Row
  35.         SHOPEN.Range("A2:CZ" & LASTROW).Copy SHX.Range("A" & IROW)  '//复制数据,假设标题顺序一致
  36.         
  37.         WBOPEN.Close False
  38.     Next I

  39.     WB.SaveAs ThisWorkbook.Path & "\需要得到的结果.xlsx"    '另存为指定文件名
  40.     WB.Close True
  41.    
  42. Application.ScreenUpdating = True '//恢复屏幕刷新
  43. Application.DisplayAlerts = True '//恢复系统提示
  44. MsgBox "见文件:需要得到的结果.xlsx" & vbCrLf & "用时:" & Format(Timer - t, "#0.0000") & " 秒", , "北极狐提示!!"  '//提示所用时间
  45. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-6-2 15:38 | 显示全部楼层
vince鑫15 发表于 2016-6-2 12:32
完美! 老师我测试过了,没有问题哈
不过我刚有尝试多个工作簿的情况,发现还是只能合并001的工作簿,对 ...

本程序会合并所有子文件夹中的.xlsx文件中的Sheet1中的数据,与文件名无关,你可以仔细查看程序,没有出现任何具体文件名信息
如果有疑问,请上传出错附件,并模拟想要的效果

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-2 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2016-6-2 15:38
本程序会合并所有子文件夹中的.xlsx文件中的Sheet1中的数据,与文件名无关,你可以仔细查看程序,没有出 ...

老师,我再尝试了下,您的程序似乎是把所有工作簿都合并到了一个工作簿内哈,我希望的结果是by相同名称的工作簿进行合并,希望的结果如附件所示,辛苦您了!谢谢

汇总v2.rar

1.06 MB, 下载次数: 58

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 13:34 , Processed in 0.040662 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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