Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 12934|回复: 10

[已解决]在不同工作簿中提取其中某一工作表的所有数据

[复制链接]
发表于 2017-9-4 10:23 | 显示全部楼层 |阅读模式
本帖最后由 zxl_8487 于 2017-9-4 13:29 编辑

    各位论坛老师,麻烦请教下,如何用VBA实现在不同工作簿中提取其中某一工作表的所有数据。如下图所示:
    1.文件夹中有11个文件,其中有10个店铺明细表(可能更多),一个汇总表(目前为空);
    2.每个店铺明细表中有3个工作表(有可能更多),其中一个工作表名称固定为“店铺汇总表”;
    3.汇总表中目前有一个工作表名称固定为“各店铺汇总表”。
    要求:
    使用VBA实现自动将文件夹内所有店铺明细表“店铺汇总表”中的有效数据自动提取至汇总表“各店铺汇总表”。
望各位大神不吝赐教,万分感谢!!!

最佳答案
2017-9-4 20:04
按要求作了修改。加了容错,子文件夹搜索。
另外重复提取的要求已经做过说明。是清除内容后“重新”提取,而不是“重复”提取。

文件夹

文件夹

明细表

明细表

汇总表

汇总表

问题求助—不同工作簿某一工作表数据提取.rar

131.12 KB, 下载次数: 53

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-9-4 13:35 | 显示全部楼层
见附件

问题求助—不同工作簿某一工作表数据提取.zip

142.21 KB, 下载次数: 77

回复

使用道具 举报

 楼主| 发表于 2017-9-4 14:04 | 显示全部楼层

非常感谢您的回复,有个问题想请教下是否可以调整下:按照您给的回复,10个明细表需要全部打开才能正确提取,若打开一个明细表,点击“按钮1”则是在原来的基础上又重复提取了遍打开的明细表。是否可以:1.不打开工作簿提取数据;2.重新点击提取数据的按钮时仅是对数据进行刷新,不要再重复提取。
再次感谢。
回复

使用道具 举报

发表于 2017-9-4 15:17 | 显示全部楼层
不打开工作簿,秒提取。
另外如果考虑不重新提取,而是刷新的话,反而会因为添加判断(需判断提取出来的内容是否已提取过)影响速度,不如全部清光后重新提取一遍。
QQ截图20170904151928.png

a.rar

140.67 KB, 下载次数: 148

回复

使用道具 举报

 楼主| 发表于 2017-9-4 16:15 | 显示全部楼层
本帖最后由 zxl_8487 于 2017-9-4 19:30 编辑
grf1973 发表于 2017-9-4 15:17
不打开工作簿,秒提取。
另外如果考虑不重新提取,而是刷新的话,反而会因为添加判断(需判断提取出来的内 ...

非常感谢,您现在做的完全符合我现在的想法如果大神有时间的话,麻烦能不能帮忙稍微改进下:1.如果当前文件夹的子文件夹中也有对应的明细表(子文件夹名称不固定,但是要提取的工作表的名称是一致的,如附件),可否一并取过来;
2.如果文件夹中某一工作簿没有目标工作表(没有工作表名称的为“门店汇总表”),能否自动跳过该工作簿,不提示错误,继续往下进行。
万分感谢。


更新后(要求改变).rar

205.79 KB, 下载次数: 49

回复

使用道具 举报

发表于 2017-9-4 17:17 | 显示全部楼层
  1. Sub test1()
  2. Application.ScreenUpdating = False
  3.   Set aw = ThisWorkbook
  4.       '以下遍历文件,提取各数据
  5.         aw.Sheets(1).[a2:p10000].ClearContents
  6.         n = 1
  7.         aw.Sheets(1).[a2:a10000].NumberFormatLocal = "yyyy-m-d"
  8.         p = aw.Path & ""
  9.         f = Dir(p & "*.xls")
  10.         Do While f <> ""
  11.           If f <> ThisWorkbook.Name Then
  12.             Set wk = GetObject(p & f)
  13.     wk.Sheets(1).Activate
  14.        lr = wk.Sheets(1).Cells(Rows.Count, 1).End(3).Row
  15.       n = n + 1
  16.         aw.Sheets("各店铺汇总").Range("a" & n).Resize(lr - 1, 16) = wk.Sheets(1).Range("a2").Resize(lr - 1, 16).Value
  17.         wk.Close False
  18.            End If
  19.            n = aw.Sheets("各店铺汇总").Cells(Rows.Count, 1).End(3).Row
  20.         f = Dir
  21.         Loop
  22.          Application.ScreenUpdating = True
  23.         MsgBox "汇总完毕!"
  24.         End Sub
复制代码

问题求助—不同工作簿某一工作表数据提取.rar (160.8 KB, 下载次数: 49)
回复

使用道具 举报

发表于 2017-9-4 17:22 | 显示全部楼层
问题求助—不同工作簿某一工作表数据提取.rar (153.68 KB, 下载次数: 45)
回复

使用道具 举报

发表于 2017-9-4 20:04 | 显示全部楼层    本楼为最佳答案   
按要求作了修改。加了容错,子文件夹搜索。
另外重复提取的要求已经做过说明。是清除内容后“重新”提取,而不是“重复”提取。
360截图20170904200036414.jpg

更新后(要求改变).rar

203.56 KB, 下载次数: 205

回复

使用道具 举报

 楼主| 发表于 2017-9-5 10:53 | 显示全部楼层
grf1973 发表于 2017-9-4 20:04
按要求作了修改。加了容错,子文件夹搜索。
另外重复提取的要求已经做过说明。是清除内容后“重新”提取, ...

收到,非常感谢大神指导
回复

使用道具 举报

发表于 2021-5-11 10:19 | 显示全部楼层
grf1973 发表于 2017-9-4 20:04
按要求作了修改。加了容错,子文件夹搜索。
另外重复提取的要求已经做过说明。是清除内容后“重新”提取, ...

你好,如果原始数据表的数据表头有多行,且有合并单元格还能用这个方法 吗?
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 07:22 , Processed in 0.291497 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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