ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 根据多个工作簿内工作表名称合并到汇总工作簿对应的工作表中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-29 20:01 | 显示全部楼层 |阅读模式
根据多个工作簿内工作表名称合并到汇总工作簿对应的工作表中
1、汇总表格式包含3个工作表,分别是《行政机构人员信息》+《事业单位人员信息》+《数据输入说明》,
2、明细表则为《事业单位人员信息》+《数据输入说明》,或者《行政机构人员信息》+《数据输入说明》,
3、需要将明细表目录下的工作簿,按工作表名称,分别合并到汇总表中的工作表中。
4、即打开工作簿,如果包含《行政机构人员信息》工作表,则合并到汇总表《行政机构人员信息》中;如果包含《事业单位人员信息》,则合并到汇总表《事业单位人员信息》中。
      附件为模拟的部分数据, 请各位帮帮我,谢谢。

按工作表名称合并明细表.rar

44.53 KB, 下载次数: 82

TA的精华主题

TA的得分主题

发表于 2014-9-29 21:12 | 显示全部楼层
多个工作簿汇总  坛子里有很多例子啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-29 21:16 | 显示全部楼层
wq0804 发表于 2014-9-29 21:12
多个工作簿汇总  坛子里有很多例子啊

我找遍了,就是没有这种类型的,自己的水平有限,请大家帮忙。

TA的精华主题

TA的得分主题

发表于 2014-9-29 22:22 | 显示全部楼层
  1. Sub 汇总()
  2. Dim wb, mypath, myfile
  3. mypath = ThisWorkbook.Path & "\明细表"
  4. myfile = Dir(mypath & "*.xls")
  5. Do While myfile <> ""
  6.    Set wb = GetObject(mypath & myfile)
  7.    On Error Resume Next
  8.    With wb.Sheets("行政机构人员信息")
  9.       .Rows("3:" & .[a65536].End(xlUp).Row).Copy Sheets("行政机构人员信息").Rows([a65536].End(xlUp).Row + 1)
  10.    End With
  11.    On Error Resume Next
  12.    With wb.Sheets("事业单位人员信息")
  13.       .Rows("3:" & .[a65536].End(xlUp).Row).Copy Sheets("事业单位人员信息").Rows([a65536].End(xlUp).Row + 1)
  14.    End With
  15.    myfile = Dir
  16. Loop
  17. Set wb = Nothing

  18. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-29 22:46 | 显示全部楼层
本帖最后由 cqcbc 于 2014-9-29 22:55 编辑
战战如疯 发表于 2014-9-29 22:22


谢谢,运行后,有两处问题:
1、合并前要清除原有数据,不然重复运行宏会累加;
2、c人员信息表,合并过来,少了几行数据。
   还请继续帮忙修改一下。
  体会:两行代码On Error Resume Next,解决了工作表名称不匹配的问题,是吗?巧妙!!!!!

TA的精华主题

TA的得分主题

发表于 2014-9-30 08:55 | 显示全部楼层
本帖最后由 战战如疯 于 2014-9-30 08:58 编辑
cqcbc 发表于 2014-9-29 22:46
谢谢,运行后,有两处问题:
1、合并前要清除原有数据,不然重复运行宏会累加;
2、c人员信息表,合并 ...
  1.     Sub 汇总()
  2.     Dim wb, mypath, myfile
  3.     Sheets("行政机构人员信息").UsedRange.Offset(1, 0).ClearContents
  4.     Sheets("事业单位人员信息").UsedRange.Offset(1, 0).ClearContents
  5.     mypath = ThisWorkbook.Path & "\明细表"
  6.     myfile = Dir(mypath & "*.xls")
  7.     Do While myfile <> ""
  8.        Set wb = GetObject(mypath & myfile)
  9.        On Error Resume Next
  10.        With wb.Sheets("行政机构人员信息")
  11.           .Rows("3:" & .[a65536].End(xlUp).Row).Copy Sheets("行政机构人员信息").Rows(Sheets("行政机构人员信息").[a65536].End(xlUp).Row + 1)
  12.        End With
  13.        On Error Resume Next
  14.        With wb.Sheets("事业单位人员信息")
  15.           .Rows("3:" & .[a65536].End(xlUp).Row).Copy Sheets("事业单位人员信息").Rows(Sheets("事业单位人员信息").[a65536].End(xlUp).Row + 1)
  16.        End With
  17.        myfile = Dir
  18.     Loop
  19.     Set wb = Nothing

  20.     End Sub
复制代码

数据没有少,错位了,前面那个判断最后一行的代码有误

TA的精华主题

TA的得分主题

发表于 2014-9-30 08:57 | 显示全部楼层
Sub zz()
    Dim f$, p$, arr, brr
    Application.ScreenUpdating = False
    Sheet1.[a3:aj2000] = ""
    Sheet2.[a3:aj2000] = ""
    On Error Resume Next
    p = ThisWorkbook.Path & "\明细表\"
    f = Dir(p & "*.xls")
    Do While Len(f)
        If f <> ThisWorkbook.Name Then
            With GetObject(p & f)
                For i = 1 To .Sheets.Count
                    If .Sheets(i).Name = "行政机构人员信息" Then
                        arr = .Sheets(i).Range("A3:AJ" & .Sheets(i).[a65536].End(3).Row)
                    End If
                    If .Sheets(i).Name = "事业单位人员信息" Then
                        brr = .Sheets(i).Range("A3:AJ" & .Sheets(i).[a65536].End(3).Row)
                    End If
                Next
                .Close False
            End With
            With ThisWorkbook
                .Sheets("行政机构人员信息").Range("A" & .Sheets("行政机构人员信息").[a65536].End(3).Row + 1).Resize(UBound(arr), UBound(arr, 2)) = arr
                .Sheets("事业单位人员信息").Range("A" & .Sheets("事业单位人员信息").[a65536].End(3).Row + 1).Resize(UBound(brr), UBound(brr, 2)) = brr
            End With
            Erase arr: Erase brr
        End If
        f = Dir
    Loop
    Application.ScreenUpdating = True
End Sub



TA的精华主题

TA的得分主题

发表于 2014-9-30 08:58 | 显示全部楼层
>>>>>>>>>>>>>>>>>
按工作表名称合并明细表.rar (47.1 KB, 下载次数: 131)









TA的精华主题

TA的得分主题

发表于 2014-9-30 10:20 | 显示全部楼层
zax010 发表于 2014-9-30 08:58
>>>>>>>>>>>>>>>>>

zax010你好:
想把所有的工作簿中的表都汇总进来,修改了一下你的代码,但运行的效果没有实现--《事业单位人员信息》表汇总的信息是《数据输入说明》表里的信息。你看看错在哪?
谢谢!

按工作表名称合并明细表--汇总所有的表出错.rar

43.28 KB, 下载次数: 20

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-30 10:20 | 显示全部楼层
战战如疯 发表于 2014-9-30 08:55
数据没有少,错位了,前面那个判断最后一行的代码有误

再次谢谢,不错,可以汇总了。还有一点小问题:
1、我在实例中运行后,发现没关闭源表?
2、实例中,因两张人员信息表中引用了《数据输入说明》中的名称,导致运行宏的时候提示:名称已存在,更改或保持。这是我没想到的,看是不是有方法规避。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-6-17 15:30 , Processed in 0.047869 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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