Excel精英培训网

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

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

[复制链接]
发表于 2013-12-13 10:10 | 显示全部楼层 |阅读模式
Sub 汇总()
    Dim strFileName As String, xlApp, xlBook, xlSheet
    Dim i As Integer, arr, temp(1 To 28, 1 To 10), j As Integer, k As Integer
    strFileName = Dir(ActiveWorkbook.Path & "\")
    i = 1
    Set xlApp = CreateObject("Excel.Application")
    Application.ScreenUpdating = False
    Do While strFileName <> ""
        If strFileName <> "汇总.xls" And InStr(strFileName, ".xls") > 0 Then
            Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.Path & "\" & strFileName)
            Set xlSheet = xlBook.Worksheets
            arr = xlSheet(1).Range("d6:m33")
            For j = 1 To 28
                For k = 1 To 10
                    temp(j, k) = temp(j, k) + arr(j, k)
                Next
            Next
        xlApp.DisplayAlerts = False
        xlBook.Close
        End If
        i = i + 1
        strFileName = Dir
    Loop
    xlApp.Quit
    Sheets(1).Range("d6:m33") = temp
    Application.ScreenUpdating = True
End Sub
最佳答案
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个表就成了。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-13 10:19 | 显示全部楼层
xlSheet(1),这统计了一张表的。
改用循环吧。
回复

使用道具 举报

发表于 2013-12-13 10:21 | 显示全部楼层
  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
  4.     strFileName = Dir(ActiveWorkbook.Path & "")
  5.     i = 1
  6.     Set xlApp = CreateObject("Excel.Application")
  7.     Application.ScreenUpdating = False
  8.     Do While strFileName <> ""
  9.         If strFileName <> "汇总.xls" And InStr(strFileName, ".xls") > 0 Then
  10.             Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.Path & "" & strFileName)
  11.             For Each xlSheet In xlBook.Worksheets
  12.                 arr = xlSheet.Range("d6:m33")
  13.                 For j = 1 To 28
  14.                     For k = 1 To 10
  15.                         temp(j, k) = temp(j, k) + arr(j, k)
  16.                     Next
  17.                 Next
  18.             Next
  19.             xlApp.DisplayAlerts = False
  20.             xlBook.Close
  21.         End If
  22.         i = i + 1
  23.         strFileName = Dir
  24.     Loop
  25.     xlApp.Quit
  26.     Sheets(1).Range("d6:m33") = temp
  27.     Application.ScreenUpdating = True
  28. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-12-13 10:30 | 显示全部楼层
hwc2ycy 发表于 2013-12-13 10:21

老师,还是不行呢


回复

使用道具 举报

发表于 2013-12-13 10:32 | 显示全部楼层
代码是你的改的。
要么你发附件我来测。
回复

使用道具 举报

发表于 2013-12-13 10:33 | 显示全部楼层
是哪不行,你要么贴效果图。
是代码运行不了,还是执行结果不对,要讲清楚点。
回复

使用道具 举报

 楼主| 发表于 2013-12-13 10:36 | 显示全部楼层
这是附件,我要求汇总各个文件下的三个工作表到一个工作簿

新建文件夹.rar

21.3 KB, 下载次数: 11

回复

使用道具 举报

 楼主| 发表于 2013-12-13 10:38 | 显示全部楼层
执行结果不对,只能汇总一个工作表,而不是三个工作表。
回复

使用道具 举报

发表于 2013-12-13 11:11 | 显示全部楼层
9890b 发表于 2013-12-13 10:38
执行结果不对,只能汇总一个工作表,而不是三个工作表。

你尽里在别人的楼层里点回复。
strFileName <> "汇总.xls"
这里不对
  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

  4.     strFileName = Dir(ActiveWorkbook.Path & "")

  5.     i = 1

  6.     Set xlApp = CreateObject("Excel.Application")

  7.     Application.ScreenUpdating = False

  8.     Do While strFileName <> ""

  9.         If strFileName <> ThisWorkbook.Name And InStr(strFileName, ".xls") > 0 Then

  10.             Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.Path & "" & strFileName)

  11.             For Each xlSheet In xlBook.Worksheets

  12.                 arr = xlSheet.Range("d6:m33")

  13.                 For j = 1 To 28

  14.                     For k = 1 To 10

  15.                         temp(j, k) = temp(j, k) + arr(j, k)

  16.                     Next

  17.                 Next

  18.             Next

  19.             xlApp.DisplayAlerts = False

  20.             xlBook.Close

  21.         End If

  22.         i = i + 1

  23.         strFileName = Dir

  24.     Loop

  25.     xlApp.Quit

  26.     Sheets(1).Range("d6:m33") = temp

  27.     Application.ScreenUpdating = True

  28. End Sub
复制代码
回复

使用道具 举报

发表于 2013-12-13 11:12 | 显示全部楼层
另外,你不是每个工作簿的所有工作表汇总成一个工作表?
我看你的BOOKS1里有三个工作表。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 08:36 , Processed in 0.403164 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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