ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 帮忙修改一下代码,改成可以合并子文件夹里的所有工作簿

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-21 10:06 | 显示全部楼层 |阅读模式
现在的代码只能合并“数据”文件夹下的工作簿,不能合并子文件夹里的工作簿。我想要的效果是能自动合并“数据”文件夹下所有子文件夹里的所有工作簿,子文件夹数量不确定可能很多几十个或者一百多个,每个子文件夹里的工作簿可能也会有几百个或几十个。请问这个代码如何修改呢?

合并子文件夹里的所有工作簿.zip

85.98 KB, 下载次数: 43

TA的精华主题

TA的得分主题

发表于 2017-3-21 10:19 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
近几天都有类似的求助帖,找找其中的答案参考。

TA的精华主题

TA的得分主题

发表于 2017-3-21 11:16 | 显示全部楼层
如果你原来提取数据代码合适,现在就可以提取所有合并子文件夹里的所有工作簿数据了。你试试。

合并子文件夹里的所有工作簿.rar

90.92 KB, 下载次数: 65

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-21 15:08 | 显示全部楼层
lsc900707 发表于 2017-3-21 10:19
近几天都有类似的求助帖,找找其中的答案参考。

是遍历文件夹吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-21 15:09 | 显示全部楼层
乐乐2006201505 发表于 2017-3-21 11:16
如果你原来提取数据代码合适,现在就可以提取所有合并子文件夹里的所有工作簿数据了。你试试。

谢谢帮助,使用正常

TA的精华主题

TA的得分主题

发表于 2017-3-21 16:11 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-3-21 16:42 | 显示全部楼层
本帖最后由 lsc900707 于 2017-3-21 19:33 编辑
  1. Sub lsc()
  2.     Dim tim1 As Date, tim2 As Date: tim1 = Timer
  3.     Dim mypath, myfile, m, j, wb, arr()
  4.     Application.ScreenUpdating = False
  5.     Sheet1.UsedRange.Offset(1, 0).ClearContents
  6.     mypath = ThisWorkbook.Path & "\数据"
  7.     myfile = Dir(mypath, vbDirectory)
  8.     Do While myfile <> ""
  9.         If myfile <> "." And myfile <> ".." Then
  10.             If (GetAttr(mypath & myfile) And vbDirectory) = vbDirectory Then
  11.                 m = m + 1
  12.                 ReDim Preserve arr(m)
  13.                 arr(m) = mypath & myfile & ""
  14.             End If
  15.         End If
  16.         myfile = Dir
  17.     Loop
  18.     For j = 1 To m
  19.         myfile = Dir(arr(j) & "*.xls*")
  20.         While myfile <> ""
  21.             Set wb = CreateObject(arr(j) & myfile)
  22.             With CreateObject(arr(j) & myfile)
  23.             k = .Sheets(1).UsedRange.Rows.Count + 3
  24.                 a = .Sheets(1).Range("A5:G" & k)
  25.                 s = Split(myfile, ".")(0)
  26.                 .Close False
  27.             End With
  28.             With Sheet1
  29.                 .Range("A" & [b65536].End(3).Row + 1).Resize(UBound(a), UBound(a, 2)) = a
  30.                 .Range("H" & .[h65536].End(3).Row + 1).Resize(UBound(a)) = s
  31.             End With
  32.             myfile = Dir()
  33.         Wend
  34.     Next
  35.     Set wb = Nothing
  36.     Application.ScreenUpdating = True
  37.     tim2 = Timer
  38.     MsgBox Format(tim2 - tim1, "合并完成,耗时:0.00秒"), 64, "温馨提示"
  39. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-3-21 19:05 | 显示全部楼层

谢谢,
If (GetAttr(mypath & myfile) And vbDirectory) = vbDirectory Then无法运行。
麻烦老师看看

TA的精华主题

TA的得分主题

发表于 2017-3-21 19:29 | 显示全部楼层
jjmysjg 发表于 2017-3-21 19:05
谢谢,
If (GetAttr(mypath & myfile) And vbDirectory) = vbDirectory Then无法运行。
麻烦老师看看

win10+office2013环境下测试正常>>>>>>>>

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-22 12:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 海底拾贝 于 2017-3-22 13:10 编辑
jjmysjg 发表于 2017-3-21 19:05
谢谢,
If (GetAttr(mypath & myfile) And vbDirectory) = vbDirectory Then无法运行。
麻烦老师看看

这句添加一个斜杠 mypath = ThisWorkbook.Path & "\数据\"
这句添加一个斜杠 arr(m) = mypath & myfile & "\"

他写的代码没问题,只是这个系统保存代码会丢失数据,我刚才插入了好几次代码只要保存提交,系统都会把这两个斜杠丢失,看附件吧。

合并子文件夹里的所有工作簿.zip

95.05 KB, 下载次数: 38

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-2 04:50 , Processed in 0.048789 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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