Excel精英培训网

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

[已解决]求同一文件夹内汇总表格复制模块

[复制链接]
发表于 2014-3-1 09:44 | 显示全部楼层 |阅读模式
本帖最后由 icenotcool 于 2014-3-6 15:40 编辑

各位老师,想请老师帮我写一个复制工作表的的模块,详情在附件内,谢谢老师了!附件 举例更新.rar (510.01 KB, 下载次数: 3)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-3-1 10:17 | 显示全部楼层
  1. Sub test()
  2.     Dim strPath As String, strFile As String
  3.     Dim wb As Workbook
  4.     Dim strSheet$
  5.     Dim strNewSheet$
  6.     Dim strMsg$
  7.     strSheet = "月度考勤簿"
  8.     strPath = ThisWorkbook.Path & Application.PathSeparator
  9.     strFile = Dir(strPath & "*.xls")
  10.     Application.ScreenUpdating = False
  11.     On Error GoTo errorhandle
  12.    
  13.     Do While Len(strFile)
  14.         If strFile <> ThisWorkbook.Name And strFile Like "*.xls" Then
  15.             '找到文件后执行的操作
  16.             Set wb = GetObject(strPath & strFile)
  17.             If SheetIsExist(wb, strSheet) Then
  18.                 strNewSheet = Replace(strFile, ".xls", "")
  19.                 If Not SheetIsExist(ThisWorkbook, strNewSheet) Then
  20.                     Worksheets.Add after:=Worksheets(Worksheets.Count)
  21.                     ActiveSheet.Name = strNewSheet
  22.                 End If
  23.                 wb.Worksheets(strSheet).UsedRange.Copy Worksheets(strNewSheet).Range("a1")
  24.             Else
  25.                 strMsg = strMsg & "工作簿 " & strFile & " 内没有工作表 " & strSheet
  26.             End If
  27.             wb.Close False
  28.         End If
  29.         strFile = Dir
  30.     Loop
  31.     Application.ScreenUpdating = True
  32.     If Len(strMsg) = 0 Then strMsg = "汇总完成"
  33.     MsgBox strMsg
  34.     Exit Sub
  35. errorhandle:
  36.     If MsgBox("错误代码:" & Err.Number & vbCr & _
  37.             "错误描述:" & Err.Description & vbCr & vbCr & _
  38.             "忽略错误,点击是,结束点击 否", vbYesNo + vbDefaultButton1, "出错了") = vbYes Then
  39.                 Resume Next
  40.     Else
  41.         On Error Resume Next
  42.         wb.Close False
  43.         Application.ScreenUpdating = True
  44.     End If
  45. End Sub

  46. Function SheetIsExist(wb As Workbook, index)
  47.     On Error Resume Next
  48.     SheetIsExist = Len(wb.Worksheets(index).Name) > 0
  49. End Function
复制代码
回复

使用道具 举报

发表于 2014-3-1 10:21 | 显示全部楼层
改了下。
  1. Sub test()
  2.     Dim strPath As String, strFile As String
  3.     Dim wb As Workbook
  4.     Dim strSheet$
  5.     Dim strNewSheet$
  6.     Dim strMsg$
  7.     strSheet = "月度考勤簿"
  8.     strPath = ThisWorkbook.Path & Application.PathSeparator
  9.     strFile = Dir(strPath & "*.xls")
  10.     Application.ScreenUpdating = False
  11.     On Error GoTo errorhandle
  12.    
  13.     Do While Len(strFile)
  14.         If strFile <> ThisWorkbook.Name And strFile Like "*.xls" Then
  15.             '找到文件后执行的操作
  16.             Set wb = GetObject(strPath & strFile)
  17.             With wb
  18.             If SheetIsExist(wb, strSheet) Then
  19.                 strNewSheet = Replace(strFile, ".xls", "")
  20.                 If Not SheetIsExist(ThisWorkbook, strNewSheet) Then
  21.                     Worksheets.Add after:=Worksheets(Worksheets.Count)
  22.                     ActiveSheet.Name = strNewSheet
  23.                 End If
  24.                 .Worksheets(strSheet).UsedRange.Copy Worksheets(strNewSheet).Range("a1")
  25.             Else
  26.                 strMsg = strMsg & "工作簿 " & strFile & " 内没有工作表 " & strSheet & vbCr
  27.             End If
  28.             Windows(.Name).Visible = True
  29.             .Close False
  30.             End With
  31.         End If
  32.         strFile = Dir
  33.     Loop
  34.     Application.ScreenUpdating = True
  35.     If Len(strMsg) = 0 Then strMsg = "汇总完成"
  36.     MsgBox strMsg
  37.     Exit Sub
  38. errorhandle:
  39.     If MsgBox("错误代码:" & Err.Number & vbCr & _
  40.             "错误描述:" & Err.Description & vbCr & vbCr & _
  41.             "忽略错误,点击是,结束点击 否", vbYesNo + vbDefaultButton1, "出错了") = vbYes Then
  42.             strMsg = strMsg & "工作表 " & strNewSheet & " 复制出错 " & vbCr
  43.                 Resume Next
  44.     Else
  45.         On Error Resume Next
  46.         wb.Close False
  47.         Application.ScreenUpdating = True
  48.     End If
  49. End Sub

  50. Function SheetIsExist(wb As Workbook, index)
  51.     On Error Resume Next
  52.     SheetIsExist = Len(wb.Worksheets(index).Name) > 0
  53. End Function
复制代码
回复

使用道具 举报

发表于 2014-3-1 10:30 | 显示全部楼层
进度在状态栏显示,显示改进下。
  1. Option Explicit

  2. Sub test()
  3.     Dim strPath As String, strFile As String
  4.     Dim wb As Workbook
  5.     Dim strSheet$
  6.     Dim strNewSheet$
  7.     Dim strMsg$
  8.     strSheet = "月度考勤簿"
  9.     strPath = ThisWorkbook.Path & Application.PathSeparator
  10.     strFile = Dir(strPath & "*.xls")
  11.     Application.ScreenUpdating = False
  12.     On Error GoTo errorhandle
  13.    
  14.     Do While Len(strFile)
  15.         If strFile <> ThisWorkbook.Name And strFile Like "*.xls" Then
  16.             '找到文件后执行的操作
  17.             Set wb = GetObject(strPath & strFile)
  18.             With wb
  19.             If SheetIsExist(wb, strSheet) Then
  20.                 strNewSheet = Replace(strFile, ".xls", "")
  21.                 If Not SheetIsExist(ThisWorkbook, strNewSheet) Then
  22.                     Worksheets.Add after:=Worksheets(Worksheets.Count)
  23.                     ActiveSheet.Name = strNewSheet
  24.                 End If
  25.                 Application.StatusBar = "正在处理工作簿 " & strPath & strFile
  26.                 .Worksheets(strSheet).UsedRange.Copy Worksheets(strNewSheet).Range("a1")
  27.             Else
  28.                 strMsg = strMsg & " 工作簿 " & strFile & " 内没有工作表 " & strSheet & vbCr
  29.             End If
  30.             Windows(.Name).Visible = True
  31.             .Close False
  32.             End With
  33.         End If
  34.         strFile = Dir
  35.     Loop
  36.     Worksheets("汇总").Activate
  37.     Application.ScreenUpdating = True
  38.     If Len(strMsg) = 0 Then
  39.         strMsg = "汇总完成"
  40.     Else
  41.         strMsg = "汇总完成" & vbCr & "出错情况如下:" & vbCr & strMsg
  42.     End If
  43.     Application.StatusBar = False
  44.     MsgBox strMsg, vbInformation
  45.     Exit Sub
  46. errorhandle:
  47.     If MsgBox("错误代码:" & Err.Number & vbCr & _
  48.             "错误描述:" & Err.Description & vbCr & vbCr & _
  49.             "忽略错误,点击是,结束点击 否", vbYesNo + vbDefaultButton1 + vbCritical, "出错了") = vbYes Then
  50.             strMsg = strMsg & " " & strNewSheet & " 复制出错" & vbCr
  51.                 Resume Next
  52.     Else
  53.         On Error Resume Next
  54.         wb.Close False
  55.         Application.ScreenUpdating = True
  56.     End If
  57. End Sub

  58. Function SheetIsExist(wb As Workbook, index)
  59.     On Error Resume Next
  60.     SheetIsExist = Len(wb.Worksheets(index).Name) > 0
  61. End Function
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-3-1 10:49 | 显示全部楼层
老师,在我原文件上改,好吗?提示出错啊
回复

使用道具 举报

发表于 2014-3-1 11:00 | 显示全部楼层
你把代码放在汇总表里执行就成了。
回复

使用道具 举报

发表于 2014-3-1 11:01 | 显示全部楼层    本楼为最佳答案   
汇总.rar (19.65 KB, 下载次数: 14)
回复

使用道具 举报

 楼主| 发表于 2014-3-1 11:51 | 显示全部楼层
老师,我想加2句进去该放哪里呢?  
.Sheets(st).[a1].PasteSpecial Paste:=xlPasteFormats
.Sheets(st).[a1].PasteSpecial Paste:=xlPasteColumnWidths,还有复制后不想要那2个按钮及公式,及有效性存在,但是保留原有报表结构一样
回复

使用道具 举报

发表于 2014-3-2 16:15 | 显示全部楼层
icenotcool 发表于 2014-3-1 11:51
老师,我想加2句进去该放哪里呢?  
.Sheets(st).[a1].PasteSpecial Paste:=xlPasteFormats
.Sheets(st ...

按钮复制过来了?我好像是复制的单元格,不是工作表。

如果你要复制格式,就在相对应的位置操作。

要删除按钮,可遍历工作表的shapes集合,根据类型判断。


回复

使用道具 举报

 楼主| 发表于 2014-3-2 18:34 | 显示全部楼层
老师,我只要数值形式内容复制过来,还含有格式,老师可以帮我再修改一下,好吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 07:38 , Processed in 0.354446 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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