Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 9890b

[已解决]以下代码只能统计一个工作表,我要统计所有表,怎么修改

[复制链接]
发表于 2013-12-13 12:33 | 显示全部楼层
9890b 发表于 2013-12-13 12:31
我运行了你的代码,第一个工作表变成了9个工作簿相加,第二个表变成了6个工作簿相加,第三个工作表变成了 ...

早干嘛去了,不说明白,下次提问要注意下。


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2013-12-13 12:33 | 显示全部楼层
hwc2ycy 发表于 2013-12-13 12:27
早要说明白嘛,绕一大圈。

不好意思,辛苦了

我运行了你的代码,第一个工作表变成了9个工作簿相加,第二个表变成了6个工作簿相加,第三个工作表变成了9个工作簿相相,我的要求是有几个工作簿就是几个工作簿相加。
回复

使用道具 举报

发表于 2013-12-13 12:42 | 显示全部楼层
  1. Sub 汇总()
  2.     Dim strFileName As String, xlApp, xlBook, xlSheet
  3.     Dim i As Integer, arr, temp(1 To 28, 1 To 10), j As Integer, k As Integer, arrTemp
  4.     Dim arr2(1 To 3) As Variant
  5.     For i = 1 To UBound(arr2)
  6.         arr2(i) = temp
  7.     Next

  8.     strFileName = Dir(ActiveWorkbook.Path & "")
  9.     Set xlApp = CreateObject("Excel.Application")
  10.     Application.ScreenUpdating = False
  11.     Do While strFileName <> ""
  12.         If strFileName <> ThisWorkbook.Name And InStr(strFileName, ".xls") > 0 Then
  13.             Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.Path & "" & strFileName)
  14.             Set xlSheet = xlBook.Worksheets
  15.             For i = 1 To xlSheet.Count
  16.                 arr = xlSheet(i).Range("d6:m33")
  17.                 arrTemp = arr2(i)
  18.                 For j = 1 To 28
  19.                     For k = 1 To 10
  20.                         arrTemp(j, k) = arrTemp(j, k) + arr(j, k)
  21.                     Next
  22.                 Next
  23.                 arr2(i) = arrTemp
  24.             Next
  25.             xlApp.DisplayAlerts = False
  26.             xlBook.Close
  27.         End If
  28.         strFileName = Dir
  29.     Loop
  30.     xlApp.Quit
  31.     For i = 1 To UBound(arr2)
  32.         Sheets(i).Range("d6:m33") = arr2(i)
  33.     Next
  34.     Application.ScreenUpdating = True
  35. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-12-13 12:52 | 显示全部楼层
hwc2ycy 发表于 2013-12-13 12:42

谢谢您喔,这是我所要的结果。
追问:

如果,我在book1里(也就是汇总工作簿里)每个工作表中都是空白表,也要达到你代码要求,怎么更改代码



回复

使用道具 举报

 楼主| 发表于 2013-12-13 12:55 | 显示全部楼层
9890b 发表于 2013-12-13 12:52
谢谢您喔,这是我所要的结果。
追问:

[tr][/tr]
编制单位:
科目编号
预算科目名称
 
 
教育经费支出合计
1
 
财政统发工资
 
1
岗位工资
 
2
薪级工资
 
3
工标10%部分
 
4
级别工资
 
5
职务工资
 
6
艰苦边远地区津贴
 
7
女职工卫生费
 
8
教龄津贴
 
9
特级教师津贴
 
10
补发工资
2
 
经费补助
把这些项目(也就是文字的项目)自动取上去
回复

使用道具 举报

 楼主| 发表于 2013-12-13 12:57 | 显示全部楼层
hwc2ycy 发表于 2013-12-13 12:42

[tr][/tr]
编制单位:
科目编号
预算科目名称
 
 
教育经费支出合计
1
 
财政统发工资
 
1
岗位工资
 
2
薪级工资
 
3
工标10%部分
 
4
级别工资
 
5
职务工资
 
6
艰苦边远地区津贴
 
7
女职工卫生费
 
8
教龄津贴
 
9
特级教师津贴
 
10
补发工资
2
 
经费补助
把文字的项目取到汇总表里,
回复

使用道具 举报

发表于 2013-12-13 13:30 | 显示全部楼层
9890b 发表于 2013-12-13 12:57
[/td][/tr]

第一次的时候,直接复制工作表过来吧,数据清除就成了。


回复

使用道具 举报

发表于 2013-12-13 13:50 | 显示全部楼层    本楼为最佳答案   
  1. Sub 汇总()
  2.     Dim strFileName As String
  3.     Dim temp(1 To 28, 1 To 10), arr, arrTemp
  4.     Dim i As Integer, j As Integer, k As Integer
  5.     Dim arr2(1 To 3) As Variant
  6.     Dim blCopy As Boolean
  7.    
  8.     For i = 1 To UBound(arr2)
  9.         arr2(i) = temp
  10.     Next

  11.     strFileName = Dir(ActiveWorkbook.Path & "\*.xls")
  12.     With Application
  13.         .ScreenUpdating = False
  14.         .DisplayAlerts = False
  15.         .EnableEvents = False
  16.         .Calculation = xlCalculationManual
  17.     End With

  18.     Do While strFileName <> ""
  19.         If strFileName <> ThisWorkbook.Name Then
  20.             With GetObject(ActiveWorkbook.Path & "" & strFileName)
  21.                 For i = 1 To .Worksheets.Count
  22.                     If Not blCopy Then
  23.                         .Worksheets(i).Copy before:=Worksheets(i)
  24.                     End If

  25.                     arr = .Worksheets(i).Range("d6:m33")
  26.                     arrTemp = arr2(i)
  27.                     For j = 1 To 28
  28.                         For k = 1 To 10
  29.                             arrTemp(j, k) = arrTemp(j, k) + arr(j, k)
  30.                         Next
  31.                     Next
  32.                     arr2(i) = arrTemp
  33.                 Next
  34.                 Windows(.Name).Visible = True
  35.                 blCopy = True
  36.                 .Close False
  37.             End With
  38.         End If
  39.         strFileName = Dir
  40.     Loop

  41.     For i = Worksheets.Count To UBound(arr2) + 1 Step -1
  42.         Worksheets(i).Delete
  43.     Next
  44.     For i = 1 To UBound(arr2)
  45.         With Worksheets(i)
  46.             .Range("d6:m33") = arr2(i)
  47.             .Name = "sheet" & i
  48.         End With
  49.     Next
  50.     With Application
  51.         .ScreenUpdating = True
  52.         .DisplayAlerts = True
  53.         .EnableEvents = True
  54.         .Calculation = xlCalculationAutomatic
  55.     End With
  56.     MsgBox "汇总完成", vbInformation
  57. End Sub
复制代码
只要格式相同,都是3个表就成了。
回复

使用道具 举报

 楼主| 发表于 2013-12-13 14:43 | 显示全部楼层
hwc2ycy 发表于 2013-12-13 13:50
只要格式相同,都是3个表就成了。

对头,多谢了,以后有问题向你请教
回复

使用道具 举报

发表于 2013-12-13 15:31 | 显示全部楼层
9890b 发表于 2013-12-13 14:43
对头,多谢了,以后有问题向你请教

问题解决了就记得设置最佳答案。


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 12:56 , Processed in 0.277393 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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