ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > VBA 汇总不同工作簿的数据

VBA 汇总不同工作簿的数据

作者:绿色风 分类: 时间:2022-08-18 浏览:91
楼主
wise
如何用VBA 汇总不同工作簿的数据?
  1. Sub 汇总()
  2.   Dim mypath As String, myname  As String, Dname As String, sh As Worksheet
  3.   Set sh = ActiveSheet
  4.   mypath = ThisWorkbook.Path
  5.   myname = ThisWorkbook.Name
  6.   Dname = Dir(mypath & "\*.xls")
  7.   Application.ScreenUpdating = False
  8.   sh.UsedRange.Offset(1, 0).Clear
  9.   Do While Dname <> ""
  10.      If Dname <> myname Then
  11.        With GetObject(mypath & "\" & Dname)
  12.          .Sheets(1).UsedRange.Offset(1, 0).Copy sh.[A65536].End(xlUp).Offset(1)
  13.          .Close False
  14.        End With
  15.       End If
  16.      Dname = Dir
  17. Loop
  18. Application.ScreenUpdating = True
  19. MsgBox "OK!"
  20. End Sub


汇总不同工作簿所有记录.rar
2楼
ljx63426
谢谢分享
3楼
ljx63426

4楼
ggsmart
谢谢分享
5楼
kklivtre
我见到最好用的汇总,谢谢分享!
6楼
lrlxxqxa
收藏备用,谢谢楼主!
7楼
sam.tan
好东东值得收藏,谢谢啦!
8楼
yncxxmj
非常实用,收藏。
9楼
ljx63426
非常实用

10楼
开心萝卜
收藏慢慢学习!
11楼
wise


都忘记当初怎么想出来的
12楼
wise


以前弄的帖子现在用到了,哈哈,看来还是社区好
13楼
DayWalker
14楼
亮少
VBA学习中、、、、、谢谢!
15楼
oceaner
我怎么用不了啊!
16楼
kszcs
收藏
17楼
qinhuan66
好好学习天天向上
18楼
ljx63426
最好用的汇总,谢谢分享!
19楼
jimmyfung
这个是很好用了,你们那历害了, 如果能指定一下区域将会更完美,因为一般的表A列都是序号列,所以没有指定区域的话,汇总后在汇总表里的A列(序号列)将不是连续的,各位大虾位改进一下吧! 我弄了半天也没有改好!
20楼
ljx63426
最好用的汇总,谢谢分享!
21楼
ljx63426
最好用的汇总,谢谢分享!
22楼
bluexuemei
优秀代码,学习!
23楼
ych405
应该叫“合并”
24楼
zhangjinsong
很好的内容********!
25楼
LOGO
好像把       .Close False 去掉代码也是可以完成任务的。
想请教一下在这里       .Close False 这句代码的作用是什么?
26楼
wise
关闭
27楼
LOGO
明白了,小七应该是把除了汇总工作簿外该文件夹中还有其他工作簿是处于打开状态这种情况考虑进去了
而我测试时除了汇总代码所在工作簿外该文件夹中的其他工作簿是处于关闭状态的,所以有没有这句都没影响。
  根据自己的实际工作需要,修改了一下代码,把文件夹中除了汇总 工作簿以外的其他所有工作簿所有工作表的数据都复制到汇总工作簿的汇总表上。
  1. Sub 汇总2()
  2.   Dim mypath As String, myname  As String, Dname As String, sh As Worksheet, i As Integer
  3.   Set sh = ActiveSheet
  4.   mypath = ThisWorkbook.Path
  5.   myname = ThisWorkbook.Name
  6.   Dname = Dir(mypath & "\*.xls")
  7.   Application.ScreenUpdating = False
  8.   sh.UsedRange.Offset(1, 0).Clear
  9.   Do While Dname <> ""
  10.      If Dname <> myname Then
  11.      For i = 1 To Worksheets.Count
  12.        With GetObject(mypath & "\" & Dname)
  13.          .Sheets(i).UsedRange.Offset(1, 0).Copy sh.[A65536].End(xlUp).Offset(1)
  14.          .Close False
  15.        End With
  16.         Next
  17.       End If
  18.            Dname = Dir
  19. Loop
  20. Application.ScreenUpdating = True
  21. MsgBox "已经完成复制任务了!"
  22. End Sub
但是我没有加判断各表否为空表
现在我想向小七请教一个问题:要不要加这个判断,在网上看一些相关的代码的时候,经常会看到有加这个判断的,但是我在测试的时候发现加不加都不影响我最终的汇总结果
。谢谢!
28楼
E林好汉
有点意思!
29楼
kszcs
谢谢,收藏

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap