ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 将【测试】这个文件夹下所有的文件内同文件名的全部汇总在这个汇总表内

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-15 10:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kuangben8 发表于 2019-10-15 09:34
啥意思?没明白?

微信图片_20191015095847.png

就是根据文件夹内的表格增加或减少,汇总表内的各个表也随着变化!这样就不用再新增表格的时候,还要在汇总表新增一个表格。。。。

TA的精华主题

TA的得分主题

发表于 2019-10-15 11:20 | 显示全部楼层
hmc530 发表于 2019-10-15 10:00
就是根据文件夹内的表格增加或减少,汇总表内的各个表也随着变化!这样就不用再新增表格的时候,还要 ...

哦,明白了。稍等。

TA的精华主题

TA的得分主题

发表于 2019-10-15 14:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit
Sub test()
Dim Sht As Worksheet, Cnn As Object, Rst As Object, Dic As Object, Fso As Object, Sql$, fld, fil, s$, i%
Set Cnn = CreateObject("ADODB.Connection")
Set Rst = CreateObject("ADODB.Recordset")
Set Dic = CreateObject("Scripting.Dictionary")
Set Fso = CreateObject("Scripting.FileSystemObject")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    For Each Sht In Worksheets
        If Sht.Name <> ActiveSheet.Name Then Sht.Delete
    Next
Application.DisplayAlerts = True
Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
For Each fld In Fso.GetFolder(ThisWorkbook.Path).SubFolders
    For Each fil In fld.Files
        s = fil.Name
        If Left(s, 2) <> "~$" Then
            s = Split(s, ".xls")(0)
            Sql = "SELECT * FROM [" & fil & "].[Sheet1$A1:T] WHERE 物料 IS NOT NULL"
            Rst.Open Sql, Cnn, 1, 3
            If Not Dic.Exists(s) Then
                Sheets.Add after:=Sheets(Sheets.Count)
                With ActiveSheet
                    For i = 0 To Rst.Fields.Count - 1
                        .[a1].Offset(0, i) = Rst.Fields(i).Name
                    Next
                    .[a2].CopyFromRecordset Rst
                    .Name = s
                End With
                Dic(s) = ""
            Else
                With Sheets(s)
                    .Cells(.Rows.Count, 3).End(xlUp).Offset(1, -2).CopyFromRecordset Rst
                End With
            End If
            If Rst.State = 1 Then Rst.Close
        End If
    Next
Next
Sheets(1).Activate
Cnn.Close
Set Cnn = Nothing
Set Rst = Nothing
Set Dic = Nothing
Set Fso = Nothing
Application.ScreenUpdating = True
MsgBox "ok!", 64
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-15 14:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
………………

附件测试.rar

323.2 KB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-15 15:02 | 显示全部楼层
本帖最后由 kuangben8 于 2019-10-15 15:12 编辑
  1. Sub 汇总()
  2.     Dim PathStr As String, Fil As String
  3.     Dim Wbook As Workbook, Sht As Worksheet
  4.     Dim dic As Object
  5.     Dim dic02 As Object
  6.     Dim m%, n%, k&
  7.     Dim arr, crr, brr(1000)    '直接定义一个大数组装文件
  8.     Set dic = CreateObject("Scripting.Dictionary")
  9.     Set dic02 = CreateObject("Scripting.Dictionary")
  10.     Application.ScreenUpdating = False
  11.     With ThisWorkbook
  12.         For m = 1 To .Worksheets.Count
  13.             dic02(.Worksheets(m).Name) = ""      '将工作表名写入字典中,方便后续查找
  14.         Next
  15.     End With
  16.     PathStr = ThisWorkbook.Path & ""
  17.     dic(PathStr) = ""
  18.     m = 0
  19.     Do While m < dic.Count
  20.         arr = dic.keys
  21.         Fil = Dir(arr(m), vbDirectory)
  22.         Do While Fil <> ""
  23.             If Fil <> "." And Fil <> ".." And Fil <> ThisWorkbook.Name Then      '获取的代码工作簿名称不用统计。
  24.                 If (GetAttr(arr(m) & Fil) And vbDirectory) = vbDirectory Then
  25.                     dic(arr(m) & Fil & "") = ""
  26.                 Else
  27.                     n = n + 1
  28.                     brr(n - 1) = Mid(Fil, 1, InStrRev(Fil, ".") - 1)    '提取去除文件扩展名的文件名称
  29.                     If Not dic02.exists(brr(n - 1)) Then    '如果该工作簿名称不在字典dic02中,则先添加工作表,后对应汇总。
  30.                         With ThisWorkbook
  31.                             .Worksheets.Add after:=.Sheets(.Sheets.Count)     '添加一个新工作表并放在最后
  32.                             .Sheets(.Sheets.Count - 1).Rows("1:1").Copy        '复制前一个工作表的第一行
  33.                             With .Sheets(.Sheets.Count)
  34.                                 .Name = brr(n - 1)                           '修改工作表名
  35.                                 dic02(brr(n - 1)) = ""              '将新建的工作表名写入dic02中,防止后续重复创建!
  36.                                 .Range("A1").PasteSpecial Paste:=xlPasteColumnWidths    '先选择性粘贴列宽
  37.                                 .Paste                                                  '后粘贴内容
  38.                             End With
  39.                             Application.CutCopyMode = False      '清除蚂蚁线
  40.                         End With
  41.                     End If
  42.                     Set Wbook = GetObject(arr(m) & Fil)     '后台打开对应的工作簿
  43.                     Set Sht = Wbook.Worksheets(1)
  44.                     With Sht                                 'Workbooks(Fil).Worksheets(1)对应工作簿打开好使,不打开直接引用不好使!    '提取对应工作簿的第一个工作表数据
  45.                         crr = .Range("A1").CurrentRegion.Offset(1, 0)        '会多引用一行空行。
  46.                     End With
  47.                     Wbook.Close False    '提取数据之后必须关闭工作簿,防止下次打开同名工作簿出错!
  48.                     With ThisWorkbook.Worksheets(brr(n - 1))
  49.                         k = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row '获取目标工作表的第一个空行行号
  50.                         .Range("A" & k).Resize(UBound(crr, 1), UBound(crr, 2)) = crr
  51.                         .Cells(k, UBound(crr, 2) + 1).Resize(UBound(crr, 1) - 1, 1) = WorksheetFunction.Substitute(arr(m), PathStr, "") & Fil '将对应工作簿含路径的名称写入目标工作表
  52.                     End With
  53.                 End If
  54.             End If
  55.             Fil = Dir
  56.         Loop
  57.         m = m + 1
  58.     Loop
  59.     Application.ScreenUpdating = True
  60.     MsgBox "提取文件夹中对应文件数据完毕!"
  61. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-15 15:03 | 显示全部楼层
本帖最后由 kuangben8 于 2019-10-15 15:12 编辑

参考看看吧。
多文件夹多工作簿数据汇总.zip (422.56 KB, 下载次数: 15)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-1 01:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

https://club.excelhome.net/thread-1629331-1-1.html
帮我看看这个问题咯!谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 22:51 , Processed in 0.038441 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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