ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 求助:VBA多工作薄多工作表合并,保留表头

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-21 20:03 | 显示全部楼层 |阅读模式
本帖最后由 brother 于 2014-12-22 23:13 编辑

各位老师好:
1、总文件夹中又有若干个以省份命名的文件夹,每个省份下又有若干工作薄,每个工作薄中有6个表。
2、要将每个省份文件夹中的所有工作薄进行合并。合并到一个以此省份命名的工作薄中。并存放在总文件夹中。
3、每个工作薄中前两个表不参与合并,后4个表中数据进行合并,并保留表头。这4个表的表头分别为4、5、3、2行。
4、最后将各个省份中的所有工作薄合并为“全国汇总”的工作薄。请问如何用VBA实现此功能?详见附件,先行谢过!

全国汇总.rar

387.57 KB, 下载次数: 143

TA的精华主题

TA的得分主题

发表于 2014-12-21 20:27 | 显示全部楼层
http://club.excelhome.net/thread-1165866-1-1.html
参考一下这个吧,看看是否能帮到你的

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 23:42 | 显示全部楼层
liulang0808 发表于 2014-12-21 20:27
http://club.excelhome.net/thread-1165866-1-1.html
参考一下这个吧,看看是否能帮到你的

没看懂啊,我是个菜鸟,求各位老师能直接给个代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-22 07:00 | 显示全部楼层
请哪位大师关注一下,帮帮菜鸟啊!急需要用,谢啦!

TA的精华主题

TA的得分主题

发表于 2014-12-22 08:12 | 显示全部楼层
请参考:
  1. Sub Macro1()
  2.     Dim Fso As Object, Folder As Object
  3.     Dim i&, n&, a, b, wb As Workbook, wb2 As Workbook, p$
  4.     Application.ScreenUpdating = False
  5.     Application.DisplayAlerts = False
  6.     a = Array(4, 5, 3, 2)
  7.     b = Array("基本情况(填表)", "老干部情况", "医务人员", "医疗设备")
  8.     For i = 1 To 4
  9.         Sheets(i).[a1].CurrentRegion.Offset(a(i - 1)).Clear
  10.     Next
  11.     Set Fso = CreateObject("Scripting.FileSystemObject")
  12.     p = ThisWorkbook.Path & "\各省汇总"
  13.     With ThisWorkbook
  14.         For Each SubFolder In Fso.GetFolder(p).SubFolders
  15.             n = 0
  16.             For Each File In SubFolder.Files
  17.                 n = n + 1
  18.                 Set wb = Workbooks.Open(File)
  19.                 For i = 0 To 3
  20.                     wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy .Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  21.                 Next
  22.                 If n = 1 Then
  23.                     wb.SaveAs p & "" & SubFolder.Name & "汇总表.xls"
  24.                     Set wb2 = ActiveWorkbook
  25.                 Else
  26.                     For i = 0 To 3
  27.                         wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy wb2.Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  28.                     Next
  29.                     wb.Close False
  30.                 End If
  31.             Next
  32.             wb2.Close True
  33.         Next
  34.     End With
  35.     Set Fso = Nothing
  36.     Application.ScreenUpdating = True
  37.     MsgBox "ok"
  38. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-12-22 08:14 | 显示全部楼层
请测试附件
全国汇总.rar (335.15 KB, 下载次数: 334)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-22 22:45 | 显示全部楼层
zhaogang1960 发表于 2014-12-22 08:14
请测试附件

太棒了,基本达到我要的结果,若是每个省份的汇总也不要汇总前两个表,即不要“打印封面(自动生成)”和“打印基本情况(自动生成)”,该如何改动代码?

TA的精华主题

TA的得分主题

发表于 2014-12-22 23:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
brother 发表于 2014-12-22 22:45
太棒了,基本达到我要的结果,若是每个省份的汇总也不要汇总前两个表,即不要“打印封面(自动生成)”和“ ...
  1. Sub Macro1()
  2.     Dim Fso As Object, Folder As Object
  3.     Dim i&, n&, a, b, wb As Workbook, wb2 As Workbook, p$
  4.     Application.ScreenUpdating = False
  5.     Application.DisplayAlerts = False
  6.     a = Array(4, 5, 3, 2)
  7.     b = Array("基本情况(填表)", "老干部情况", "医务人员", "医疗设备")
  8.     For i = 1 To 4
  9.         Sheets(i).[a1].CurrentRegion.Offset(a(i - 1)).Clear
  10.     Next
  11.     Set Fso = CreateObject("Scripting.FileSystemObject")
  12.     p = ThisWorkbook.Path & "\各省汇总"
  13.     With ThisWorkbook
  14.         For Each SubFolder In Fso.GetFolder(p).SubFolders
  15.             n = 0
  16.             For Each File In SubFolder.Files
  17.                 n = n + 1
  18.                 Set wb = Workbooks.Open(File)
  19.                 For i = 0 To 3
  20.                     wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy .Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  21.                 Next
  22.                 If n = 1 Then
  23.                     wb.Sheets(b).Copy
  24.                     Set wb2 = ActiveWorkbook
  25.                 Else
  26.                     For i = 0 To 3
  27.                         wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy wb2.Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  28.                     Next
  29.                 End If
  30.                 wb.Close False
  31.             Next
  32.             wb2.Close True, p & "" & SubFolder.Name & "汇总表.xls"
  33.         Next
  34.     End With
  35.     Set Fso = Nothing
  36.     Application.ScreenUpdating = True
  37.     MsgBox "ok"
  38. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-22 23:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请测试附件
全国汇总.rar (335.01 KB, 下载次数: 288)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-22 23:10 | 显示全部楼层
zhaogang1960 发表于 2014-12-22 23:01

正是我想要的,非常非常棒!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 05:41 , Processed in 0.046848 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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