ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何将多个工作簿中的工作表合并到新的工作簿中?

如何将多个工作簿中的工作表合并到新的工作簿中?

作者:绿色风 分类: 时间:2022-08-17 浏览:137
楼主
omnw
Q:如何将多个工作簿中的工作表合并到新的工作簿中?
A:用如下代码可以实现将指定路径下多个工作簿中的第一个工作表合并成一个新的工作簿。
  1. Private Sub 合并工作薄()
  2.     Dim f_name As String
  3.     Dim bok1 As Workbook, bok2 As Workbook
  4.     Set bok2 = Nothing
  5.     f_name = Dir(ThisWorkbook.Path & "\*.*") '获得该目录下的所有EXCEL文件
  6.     Do While f_name <> "" '开始执行循环
  7.         If f_name <> ThisWorkbook.Name Then '如果当前的文件不是代码所在文件,执行合并操作
  8.             Set bok1 = Workbooks.Open(f_name) '打开被合并的文件
  9.             If bok2 Is Nothing Then '合并后的文件是否存在
  10.                 bok1.Sheets(1).Copy '如果合并后的文件不存在,则创建一个
  11.                 Set bok2 = ActiveWorkbook
  12.             Else
  13.                 bok1.Sheets(1).Copy Before:=bok2.Sheets(1) '如果合并后的文件存,在则将被合并文件的第一个工作表复制到合并文件中。
  14.             End If
  15.             bok1.Close '关闭被合并文件
  16.         End If
  17.         f_name = Dir() '获取下一个被合并文件名
  18.     Loop
  19. End Sub

记录.rar
2楼
gfp12345678
谢谢楼主,下载学习
3楼
yncxxmj
谢谢楼主,一个非常实用的技术。
4楼
xiatide334
请问版主,是不是在工作簿中第一个工作表中的工作表名必须跟工作簿名称一样才能合并呢?
5楼
biaotiger1
不是
一楼代码中第一个工作表使用sheets(1)表达的
6楼
xiatide334
但是根据版主的代码,修改文件路径后,总是得不到合并的工作簿,这是为什么呢?麻烦版主给看下,多谢。

新建文件夹 (2).zip
7楼
biaotiger1
匆忙改了一下
在当前目录中新建一个文件(文件名无所谓)→“插入”→“模块”,在代码窗口中输入如下代码
  1. Private Sub 合并工作薄()
  2.     Dim f_name As String
  3.     Dim bok1 As Workbook, bok2 As Workbook
  4.     Set bok2 = ThisWorkbook
  5.     f_name = Dir(ThisWorkbook.Path & "\*.*")
  6.     Do While f_name <> ""
  7.         Debug.Print f_name
  8.         Set bok1 = Workbooks.Open(ThisWorkbook.Path & "\" & f_name)
  9.         If bok2 Is Nothing Then
  10.             bok1.Sheets(1).Copy
  11.             Set bok2 = ActiveWorkbook
  12.         Else
  13.             bok1.Sheets(1).Copy Before:=bok2.Sheets(1)
  14.         End If
  15.         bok1.Close
  16.         f_name = Dir()
  17.     Loop
  18. End Sub
运行可得到sheet1的合并工作簿

xiatide334 试下 ?
8楼
yncxxmj
楼主,用你提供的代码合并工作簿出现错误。现将文本上传,请指导。谢谢。




记录.rar
9楼
omnw
出现什么样的错误?请附图或给出详细说明。
10楼
omnw
代码已经完善请测试。
11楼
yncxxmj
楼主,你好,经过我的测试,可以将每个工作簿的第一张表合并到有代码的新表中。

  现在我继续问一个问题就是:将多个工作簿中的多张表同时合并到新的工作簿中。请指教。附件见8楼。
12楼
lpzxhjp
很实用,但还是有弊端
13楼
ljx63426
一个非常实用的技术。
14楼
OO血腥玛丽OO
收藏了
15楼
潜水的懒猫
楼主额2.jpg
 
1.jpg
 
16楼
O我是笨猪
楼主,下载“记录”这个附件,解压后,打开“新建 Microsoft Excel 工作表”,查看代码,插入模块,黏贴代码,运行,每次都提示:运行时错误1004.2012-07-25_21-54-25.jpg
 
17楼
tzwxshuai128
我和楼上碰到一模一样的问题
18楼
Cycyz
楼主麻烦可以弄一个gif图片吗? 这个对于初学者比较难
19楼
jellyn
那么多个工作簿中将名为"sheet1"和"结果"的工作表合并到一个新工作表上呢?我在社区上找了好多帖子,好像也达不到我的要求,谢谢!
20楼
lintingni
很实用  谢谢LZ
21楼
1042363772
学习学习
22楼
东写西读
非常实用的一段VBA代码
23楼
yellowhx
谢楼主,一个非常实用的技术。
24楼
kszcs
在你的机器上能运行吗?
25楼
caicai9966
学习
26楼
芐雨
27楼
yaoyao11111
谢谢楼主!,好赞!
28楼
hustclm
最近有很多人问多工作簿汇总的问题,这个帖子很好嘛,大家可以学习学习
29楼
poper_t
为什么运行结束后,会提示是否reopen当前工作簿呢?
如果选yes,合并内容就没有了;如果选no,会出来error 1004,提示是否调试代码
好奇怪呀
30楼
3a3a3a848
thanks a lot!
31楼
omnw
Q:如何将多个工作簿中的工作表合并到新的工作簿中?
A:用如下代码可以实现将指定路径下多个工作簿中的第一个工作表合并成一个新的工作簿。
  1. Private Sub 合并工作薄()
  2.     Dim f_name As String
  3.     Dim bok1 As Workbook, bok2 As Workbook
  4.     Set bok2 = Nothing
  5.     f_name = Dir(ThisWorkbook.Path & "\*.*") '获得该目录下的所有EXCEL文件
  6.     Do While f_name <> "" '开始执行循环
  7.         If f_name <> ThisWorkbook.Name Then '如果当前的文件不是代码所在文件,执行合并操作
  8.             Set bok1 = Workbooks.Open(f_name) '打开被合并的文件
  9.             If bok2 Is Nothing Then '合并后的文件是否存在
  10.                 bok1.Sheets(1).Copy '如果合并后的文件不存在,则创建一个
  11.                 Set bok2 = ActiveWorkbook
  12.             Else
  13.                 bok1.Sheets(1).Copy Before:=bok2.Sheets(1) '如果合并后的文件存,在则将被合并文件的第一个工作表复制到合并文件中。
  14.             End If
  15.             bok1.Close '关闭被合并文件
  16.         End If
  17.         f_name = Dir() '获取下一个被合并文件名
  18.     Loop
  19. End Sub

记录.rar
32楼
gfp12345678
谢谢楼主,下载学习
33楼
yncxxmj
谢谢楼主,一个非常实用的技术。
34楼
xiatide334
请问版主,是不是在工作簿中第一个工作表中的工作表名必须跟工作簿名称一样才能合并呢?
35楼
biaotiger1
不是
一楼代码中第一个工作表使用sheets(1)表达的
36楼
xiatide334
但是根据版主的代码,修改文件路径后,总是得不到合并的工作簿,这是为什么呢?麻烦版主给看下,多谢。

新建文件夹 (2).zip
37楼
biaotiger1
匆忙改了一下
在当前目录中新建一个文件(文件名无所谓)→“插入”→“模块”,在代码窗口中输入如下代码
  1. Private Sub 合并工作薄()
  2.     Dim f_name As String
  3.     Dim bok1 As Workbook, bok2 As Workbook
  4.     Set bok2 = ThisWorkbook
  5.     f_name = Dir(ThisWorkbook.Path & "\*.*")
  6.     Do While f_name <> ""
  7.         Debug.Print f_name
  8.         Set bok1 = Workbooks.Open(ThisWorkbook.Path & "\" & f_name)
  9.         If bok2 Is Nothing Then
  10.             bok1.Sheets(1).Copy
  11.             Set bok2 = ActiveWorkbook
  12.         Else
  13.             bok1.Sheets(1).Copy Before:=bok2.Sheets(1)
  14.         End If
  15.         bok1.Close
  16.         f_name = Dir()
  17.     Loop
  18. End Sub
运行可得到sheet1的合并工作簿

xiatide334 试下 ?
38楼
yncxxmj
楼主,用你提供的代码合并工作簿出现错误。现将文本上传,请指导。谢谢。




记录.rar
39楼
omnw
出现什么样的错误?请附图或给出详细说明。
40楼
omnw
代码已经完善请测试。

免责声明

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

评论列表
sitemap