应天论坛

 找回密码
 参与我们

QQ登录

只需一步,快速开始

搜索
查看: 1335|回复: 0

[Excel] 多工作簿汇总到一个表

[复制链接]

276

主题

303

帖子

3197

积分

管理员

湘南小侠客

Rank: 9Rank: 9Rank: 9

积分
3197

优质服务勋章论坛元老

QQ
发表于 2019-5-6 23:07:53 | 显示全部楼层 |阅读模式
多工作簿汇总到一个表

  1. Sub CltSheets()
  2.    Dim P$, Bookn$, Book$, Keystr1, Keystr2, Shtname$, K&
  3.   Dim Sht As Worksheet, Sh As Worksheet
  4.   Application.ScreenUpdating = False
  5.   Application.DisplayAlerts = False
  6.   On Error Resume Next
  7.   With Application.FileDialog(msoFileDialogFolderPicker)
  8.     .AllowMultiSelect = False
  9.     If .Show Then P = .SelectedItems(1) Else: Exit Sub
  10.   End With
  11.   If Right(P, 1) <> "" Then P = P & ""
  12.   Keystr1 = InputBox("请输入工作簿名称所包含的关键词" & vbCr & "关键词可以为空,如为空,则默认选择全部工作簿")
  13.   If StrPtr(Keystr1) = 0 Then Exit Sub '如果用户点击了取消或关闭按钮,则退出程序
  14.   Keystr2 = InputBox("请输入工作表名称所包含的关键词" & vbCr & "关键词可以为空,如为空,则默认选择符合条件工作簿的全部工作表")
  15.   If StrPtr(Keystr2) = 0 Then Exit Sub
  16.   Set Sh = ActiveSheet '当前工作表,赋值变量,代码运行完毕后,回到此表
  17.   Bookn = Dir(P & "*.xls*")
  18.   Do While Bookn <> ""
  19.     If Bookn = ThisWorkbook.Name Then
  20.       MsgBox "注意:指定文件夹中存在和当前表格重名的工作簿!!" & vbCr & "该工作簿无法打开,工作表无法复制"
  21.      '当出现重名工作簿时,提醒用户
  22.     Else
  23.       If InStr(1, Bookn, Keystr1, vbTextCompare) Then
  24.      '工作簿名称是否包含关键词,关键词不区分大小写
  25.         With GetObject(P & Bookn)
  26.           For Each Sht In .Worksheets
  27.             If InStr(1, Sht.Name, Keystr2, vbTextCompare) Then
  28.            '工作表名称是否包含关键词,关键词不区分大小写
  29.               If Application.CountIf(Sht.UsedRange, "<>") Then
  30.              '如果表格存在数据区域
  31.                 Shtname = Split(Bookn, ".xls")(0) & "-" & Sht.Name
  32.                '复制来的工作表以"工作簿-工作表"形式起名
  33.                 ThisWorkbook.Sheets(Shtname).Delete
  34.                '如果已存在相关表名,则删除
  35.                 Sht.Copy after:=ThisWorkbook.Worksheets(Sheets.Count)
  36.                 K = K + 1
  37.                '复制Sht到代码所在工作簿所有工作表的后面,并累计个数
  38.                 ActiveSheet.Name = Shtname
  39.                '工作表命名
  40.               End If
  41.             End If
  42.           Next
  43.           .Close False '关闭工作簿
  44.         End With
  45.       End If
  46.     End If
  47.     Bookn = Dir '下一个符合条件的文件
  48.   Loop
  49.   Sh.Select '回到初始工作表
  50.   MsgBox "工作表收集完毕,共收集:" & K & "个"
  51.   Application.ScreenUpdating = True
  52.   Application.DisplayAlerts = True
  53. End Sub
复制代码
每次见你穿短裤打领带,还穿个拖鞋,下次再这样穿不要从我家门口过了!
http://gsh.yzqz.cn/CassettePlayer/index.html

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 参与我们

本版积分规则

QQ|Archiver|手机版|小黑屋|应天社区 ( 湘ICP备17015224号 )

GMT+8, 2024-12-22 13:32 , Processed in 0.078125 second(s), 27 queries .

Powered by Discuz!

© 2001-2017 Comsenz Inc.


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@yzqz.cn

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