ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-28 14:49 | 显示全部楼层
本帖最后由 brother 于 2014-12-28 15:05 编辑
zhaogang1960 发表于 2014-12-22 23:02
请测试附件

赵老师,非常感谢您的解答,可否以窗体的形式,获取某一文件夹的路径,然后合并此文件夹下的工作薄呢?请赐教!
北京地区数据汇总.rar (102.04 KB, 下载次数: 21)

TA的精华主题

TA的得分主题

发表于 2014-12-28 18:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  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.     With Application.FileDialog(msoFileDialogFolderPicker)
  5.         .InitialFileName = ThisWorkbook.Path & ""
  6.         If .Show = False Then Exit Sub
  7.         p = .SelectedItems(1)
  8.     End With
  9.     Application.ScreenUpdating = False
  10.     Application.DisplayAlerts = False
  11.     a = Array(4, 5, 3, 2)
  12.     b = Array("基本情况(填表)", "老干部情况", "医务人员", "医疗设备")
  13.     For i = 1 To 4
  14.         Sheets(i).[a1].CurrentRegion.Offset(a(i - 1)).Clear
  15.     Next
  16.     Set Fso = CreateObject("Scripting.FileSystemObject")
  17.     With ThisWorkbook
  18.         For Each SubFolder In Fso.GetFolder(p).SubFolders
  19.             n = 0
  20.             For Each File In SubFolder.Files
  21.                 n = n + 1
  22.                 Set wb = Workbooks.Open(File)
  23.                 For i = 0 To 3
  24.                     wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy .Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  25.                 Next
  26.                 If n = 1 Then
  27.                     wb.Sheets(b).Copy
  28.                     Set wb2 = ActiveWorkbook
  29.                 Else
  30.                     For i = 0 To 3
  31.                         wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy wb2.Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  32.                     Next
  33.                 End If
  34.                 wb.Close False
  35.             Next
  36.             wb2.Close True, p & "" & SubFolder.Name & "汇总表.xls"
  37.         Next
  38.     End With
  39.     Set Fso = Nothing
  40.     Application.ScreenUpdating = True
  41.     MsgBox "ok"
  42. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-12-28 18:46 | 显示全部楼层
11楼附件仅是原来的一部分,下面附件还是原来的,只能指定存放各省文件夹的总文件夹
全国汇总.rar (333.44 KB, 下载次数: 88)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-28 19:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2014-12-28 18:46
11楼附件仅是原来的一部分,下面附件还是原来的,只能指定存放各省文件夹的总文件夹

zhaogang1960老师您好,可能是我没说明白,现在的要求是只汇总一个目录下的所有工作薄,不再有多级目录。具体要求:点击“汇总”按钮后,提示查找工作薄所在目录,将所在目录下的工作薄数据汇总到当前的工作薄中,例如:“北京”目录下有7个工作薄,点击当前工作薄的“汇总”按钮,将目录下的7个工作薄数据汇总至当前工作薄。因要求没说明白,给您添麻烦了,非常感谢您!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-28 19:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2014-12-28 18:44

zhaogang1960老师您好:如果工作薄中有5个表,是不是代码要改成:

  • Sub Macro1()
  •     Dim Fso As Object, Folder As Object
  •     Dim i&, n&, a, b, wb As Workbook, wb2 As Workbook, p$
  •     With Application.FileDialog(msoFileDialogFolderPicker)
  •         .InitialFileName = ThisWorkbook.Path & "\"
  •         If .Show = False Then Exit Sub
  •         p = .SelectedItems(1)
  •     End With
  •     Application.ScreenUpdating = False
  •     Application.DisplayAlerts = False
  •     a = Array(4, 5, 5, 3, 2)
  •     b = Array("基本情况(填表)", "老干部情况", "遗属情况", "医务人员", "医疗设备")
  •     For i = 1 To 5
  •         Sheets(i).[a1].CurrentRegion.Offset(a(i - 1)).Clear
  •     Next
  •     Set Fso = CreateObject("Scripting.FileSystemObject")
  •     With ThisWorkbook
  •         For Each SubFolder In Fso.GetFolder(p).SubFolders
  •             n = 0
  •             For Each File In SubFolder.Files
  •                 n = n + 1
  •                 Set wb = Workbooks.Open(File)
  •                 For i = 0 To 4
  •                     wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy .Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  •                 Next
  •                 If n = 1 Then
  •                     wb.Sheets(b).Copy
  •                     Set wb2 = ActiveWorkbook
  •                 Else
  •                     For i = 0 To 4
  •                         wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy wb2.Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  •                     Next
  •                 End If
  •                 wb.Close False
  •             Next
  •             wb2.Close True, p & "\" & SubFolder.Name & "汇总表.xls"
  •         Next
  •     End With
  •     Set Fso = Nothing
  •     Application.ScreenUpdating = True
  •     MsgBox "ok"
  • End Sub

点评

一试便知  发表于 2014-12-28 20:06

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-28 20:38 | 显示全部楼层
zhaogang1960 发表于 2014-12-28 18:46
11楼附件仅是原来的一部分,下面附件还是原来的,只能指定存放各省文件夹的总文件夹

zhaogang1960老师您好,可能是我没说明白,现在的要求是只汇总一个目录下的所有工作薄,不再有多级目录。具体要求:点击“汇总”按钮后,提示查找工作薄所在目录,将所在目录下的工作薄数据汇总到当前的工作薄中,例如:“北京”目录下有7个工作薄,点击当前工作薄的“汇总”按钮,将目录下的7个工作薄数据汇总至当前工作薄。因要求没说明白,给您添麻烦了,非常感谢您!

TA的精华主题

TA的得分主题

发表于 2014-12-28 21:19 | 显示全部楼层
brother 发表于 2014-12-28 20:38
zhaogang1960老师您好,可能是我没说明白,现在的要求是只汇总一个目录下的所有工作薄,不再有多级目录。 ...
  1. Sub Macro1()
  2.     Dim Fso As Object, Folder As Object
  3.     Dim i&, n&, a, b, wb As Workbook, p$
  4.     With Application.FileDialog(msoFileDialogFolderPicker)
  5.         .InitialFileName = ThisWorkbook.Path & ""
  6.         If .Show = False Then Exit Sub
  7.         p = .SelectedItems(1)
  8.     End With
  9.     Application.ScreenUpdating = False
  10.     Application.DisplayAlerts = False
  11.     a = Array(4, 5, 3, 2)
  12.     b = Array("基本情况(填表)", "老干部情况", "医务人员", "医疗设备")
  13.     For i = 1 To 4
  14.         Sheets(i).[a1].CurrentRegion.Offset(a(i - 1)).Clear
  15.     Next
  16.     Set Fso = CreateObject("Scripting.FileSystemObject")
  17.     With ThisWorkbook
  18.         For Each File In Fso.GetFolder(p).Files
  19.             If File.Name Like "*.xls" Then
  20.                 n = n + 1
  21.                 Set wb = Workbooks.Open(File)
  22.                 For i = 0 To 3
  23.                     wb.Sheets(b(i)).[a1].CurrentRegion.Offset(a(i)).Copy .Sheets(b(i)).[a65536].End(xlUp).Offset(1)
  24.                 Next
  25.                 wb.Close False
  26.             End If
  27.         Next
  28.     End With
  29.     Set Fso = Nothing
  30.     Application.ScreenUpdating = True
  31.     MsgBox "ok"
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-12-28 21:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请测试附件

北京地区数据汇总.rar (96.92 KB, 下载次数: 168)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

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

非常感谢,正是,正是!

TA的精华主题

TA的得分主题

发表于 2015-7-20 23:23 来自手机 | 显示全部楼层
请问赵老师,要是原来的表最下边有填表说明,該怎么把填表说明去掉了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-30 02:25 , Processed in 0.035996 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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