ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA多表汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-9 20:59 | 显示全部楼层 |阅读模式
大佬!求助! 将多个文件里面的工作表中的指定sheet里面的内容,汇总到一个sheet里面!

问题文件.rar

31.88 KB, 下载次数: 25

问题文件

TA的精华主题

TA的得分主题

发表于 2019-11-9 21:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
http://club.excelhome.net/forum. ... 6orderby%3Dlastpost     这里那么多,总有适合你的吧

TA的精华主题

TA的得分主题

发表于 2019-11-10 12:03 | 显示全部楼层
  1.     Dim i&, sc&
  2. Sub SumAllexFile()
  3.     Dim fileArr, sBook As Workbook, endRow&
  4.     With ThisWorkbook.ActiveSheet.UsedRange
  5.         If .Rows.Count > 1 Then
  6.             .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete   '清除数据
  7.         End If
  8.     End With

  9.     endRow = 1
  10.     Call getFileList(ThisWorkbook.Path, fileArr, "*.xls*", True)            '获取所有xls文件列表
  11.     For i = 1 To UBound(fileArr)
  12.         If fileArr(i) <> ThisWorkbook.Path & "" & ThisWorkbook.Name Then
  13.             Set sBook = Workbooks.Open(fileArr(i))                          '遍历所有薄
  14.             With sBook
  15.               For sc = 1 To 2                                               '遍历所有表
  16.                 With .Sheets(sc).UsedRange
  17.                     .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count) _
  18.                         .Copy ThisWorkbook.ActiveSheet.Cells(endRow + 1, 1)     '复制数据
  19.                 End With
  20.                 endRow = ThisWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
  21.               Next sc
  22.               .Close False
  23.             End With
  24.         End If
  25.     Next i
  26.     ThisWorkbook.ActiveSheet.Columns.AutoFit
  27. End Sub
  28. Sub getFileList(p$, fileArr, ftype$, ctnSub As Boolean)
  29.     If ctnSub Then
  30.         Call getSubDirFileList(p, fileArr, ftype)
  31.     Else
  32.         Call getCurDirFileList(p, fileArr, ftype)
  33.     End If
  34. End Sub
  35. Sub getCurDirFileList(p$, fileArr, ftype$)
  36.     Dim fullName$, fileName$
  37.     Dim fileListColl As New Collection
  38.     fileName = Dir(p & "" & ftype)
  39.     Do While fileName <> ""
  40.         fileListColl.Add p & "" & fileName
  41.         fileName = Dir
  42.     Loop
  43.     Call Collection2Arr(fileListColl, fileArr) '转换集合为数组
  44. End Sub
  45. Sub getSubDirFileList(sFolderPath As String, fileArr, ftype$)
  46.     On Error Resume Next
  47.     Dim f As String
  48.     Dim file() As String
  49.     Dim i, k, x
  50.     x = 1
  51.     i = 1
  52.     k = 1
  53.     ReDim file(1 To i)
  54.     file(1) = sFolderPath & ""
  55.     '-- 获得所有子目录
  56.     Do Until i > k
  57.         f = Dir(file(i), vbDirectory)
  58.         Do Until f = ""
  59.             If InStr(f, ".") = 0 Then
  60.                 k = k + 1
  61.                 ReDim Preserve file(1 To k)
  62.                 file(k) = file(i) & f & ""
  63.             End If
  64.             f = Dir
  65.         Loop
  66.         i = i + 1
  67.     Loop
  68.     '-- 获得所有子目录下的所有文件
  69.     Dim fileListColl As New Collection
  70.     For i = 1 To k
  71.         f = Dir(file(i) & ftype)
  72.         Do Until f = ""
  73.             fileListColl.Add (file(i) & f)
  74.             x = x + 1
  75.             f = Dir
  76.         Loop
  77.     Next
  78.     Call Collection2Arr(fileListColl, fileArr)  '转换集合为数组
  79. End Sub
  80. Sub Collection2Arr(coln, arr)
  81.     ReDim arr(1 To coln.Count)
  82.     For i = 1 To coln.Count
  83.         arr(i) = coln.Item(i)
  84.     Next
  85. End Sub
复制代码

2019-11-9问题文件.zip

50.27 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2019-11-10 20:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好久没写过这么有意思的代码了,附件就不上传了
Sub AA()
    a = ThisWorkbook.Path
    Dim ar(1 To 100)
    b = Dir(a & "\*", 16)
    n = 0
    While b <> ""
        If GetAttr(a & "\" & b) = vbDirectory And b <> "." And b <> ".." Then
            n = n + 1
            ar(n) = a & "\" & b
        End If
        b = Dir
    Wend
    ReDim br(1 To n * 100)
    Application.ScreenUpdating = False
    For i = 1 To n
        a1 = Dir(ar(i) & "\*.xls*")
        While a1 <> ""
            Set wb = GetObject(ar(i) & "\" & a1)
            For Each sh In wb.Sheets
                If InStr(sh.Name, "不需要") = 0 Then
                    s = s + 1
                    rw = sh.Cells(Rows.Count, 2).End(3).Row
                    If s = 1 Then brr = sh.Range("a1:i1")
                    br(s) = sh.Range("a2:i" & rw)
                End If
            Next
            wb.Close 0
            a1 = Dir
        Wend
    Next
   
    Sheet1.Range("a1").Resize(, 9) = brr
    x = 2
    For i = 1 To s
        Sheet1.Range("a" & x).Resize(UBound(br(i)), 9) = br(i)
        x = x + UBound(br(i))
    Next
    Application.ScreenUpdating = True
End Sub

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 03:01 , Processed in 0.035248 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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