ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 我是小黑屋

[求助] 多工作簿数据汇总指定条件的数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-7 08:42 | 显示全部楼层
  1. Sub 刷新资料()
  2.     Dim vDir As Variant, nDir As Integer
  3.     Dim vFile As Variant, nFile As Integer
  4.     Dim vFill As Variant
  5.     Dim nCol As Integer
  6.    
  7.     Application.ScreenUpdating = False
  8.    
  9.     ReDim vDir(1 To 1)
  10.     vDir(1) = ThisWorkbook.Path
  11.     获取文件夹 vDir, 1
  12.    
  13.     ReDim vFile(1 To 1)
  14.     For nDir = 2 To UBound(vDir)
  15.         获取文件名 vFile, vDir(nDir)
  16.     Next
  17.    
  18.     If vFile(1) <> "" Then
  19.         ReDim vFill(1 To 3, 1 To 1)
  20.         For nFile = 1 To UBound(vFile)
  21.             With Workbooks.Open(vFile(nFile))
  22.                 vDir = .Sheets(1).UsedRange.Value
  23.                 .Close False
  24.             End With
  25.             For nDir = 2 To UBound(vDir)
  26.                 If vDir(nDir, 3) = "C店" Then
  27.                     nFill = nFill + 1
  28.                     ReDim Preserve vFill(1 To 3, 1 To nFill)
  29.                     For nCol = 1 To 3
  30.                         vFill(nCol, nFill) = vDir(nDir, nCol)
  31.                     Next
  32.                 End If
  33.             Next
  34.         Next
  35.         With Sheets("sheet1")
  36.             .UsedRange.Offset(1).ClearContents
  37.             .[A2].Resize(nFill, 3) = Application.WorksheetFunction.Transpose(vFill)
  38.         End With
  39.     End If
  40.    
  41.     Application.ScreenUpdating = True
  42. End Sub

  43. Sub 获取文件夹(vDir As Variant, nSearchDir As Integer)
  44.     Dim sDir As String, nDir As Integer
  45.    
  46.     sDir = Dir(vDir(nSearchDir) & "\*.*", vbDirectory)
  47.     Do While sDir <> ""
  48.         If Not (sDir = "." Or sDir = "..") And GetAttr(vDir(nSearchDir) & "" & sDir) = vbDirectory Then
  49.             nDir = 1 + UBound(vDir)
  50.             ReDim Preserve vDir(1 To nDir)
  51.             vDir(nDir) = vDir(nSearchDir) & "" & sDir
  52.         End If
  53.         sDir = Dir
  54.     Loop
  55.     If nSearchDir < UBound(vDir) Then
  56.         nSearchDir = nSearchDir + 1
  57.         获取文件夹 vDir, nSearchDir
  58.     End If
  59. End Sub

  60. Sub 获取文件名(vFile As Variant, ByVal sDir As String)
  61.     Dim sFile As String
  62.    
  63.     sFile = sDir & "\*.xls*"
  64.     Do While sFile <> ""
  65.         ReDim Preserve vFile(1 To UBound(vFile) - (Trim(vFile(1)) <> ""))
  66.         vFile(UBound(vFile)) = sDir & "" & sFile
  67.         sFile = Dir
  68.     Loop
  69. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-3-7 08:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附上附件以供参考

查找(By.Micro).rar

54.4 KB, 下载次数: 191

TA的精华主题

TA的得分主题

发表于 2017-3-7 08:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我是小黑屋 发表于 2017-3-7 00:13
老师您好,我想将您代码中第14行这一句 With .Worksheets("sheet1")改为指定工作表名称,例如 With .Work ...

可能是有的工作簿中不存在“测试"工作表引起的错误。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-7 08:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2017-3-7 08:44
可能是有的工作簿中不存在“测试"工作表引起的错误。

那有什么办法解决吗,因为有会出现工作簿中没有"测试"工作表的存在

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-7 08:52 | 显示全部楼层
chxw68 发表于 2017-3-7 08:44
可能是有的工作簿中不存在“测试"工作表引起的错误。

如其中一个文件夹中有2个工作簿,只有其中一个工作簿有"测试"这个工作表,而没有“测试”工作表这个工作簿就可以忽略了

TA的精华主题

TA的得分主题

发表于 2017-3-7 08:56 | 显示全部楼层
On Error Resume Next
Set wSH=Sheets("测试")
If Not wSH is Nothing Then'说明表是存在的
Endif

TA的精华主题

TA的得分主题

发表于 2017-3-7 08:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
修改好了。

Desktop (2).rar

59.24 KB, 下载次数: 204

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-3-7 16:28 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-3-8 13:54 | 显示全部楼层
kzg2013 发表于 2017-3-6 21:15
解压后,有一个"宏表格",点击,即可

要是汇总B店的话,以下宏代码是怎么修改?修改哪里?求指教

Sub findfile()
ActiveSheet.Cells.ClearContents
Application.ScreenUpdating = False
Dim fso, fd, fd1, fl, WB As Object
Dim ar As Variant
Dim r, R1 As Long
Dim s As String
s = ActiveWorkbook.Path

Set fso = CreateObject("scripting.filesystemobject")

Set fd = fso.getfolder(s) 'first grade

    For Each fl In fd.Files
     
     If UCase(fso.getextensionname(fl)) = "XLS" Or UCase(fso.getextensionname(fl)) = "XLSX" Then
     
        Set WB = GetObject(fl)
          r = ActiveSheet.Range("a1048576").End(xlUp).Row
          R1 = WB.Sheets(1).UsedRange.Rows.Count
          ar = WB.Sheets(1).Range("A2:C" & R1)
              For m = 1 To UBound(ar)
                If UCase(ar(m, 3)) Like "A*" Then
               WB.Sheets(1).Range("a" & m + 1 & ":" & "c" & m + 1).Copy ActiveSheet.Range("A" & r)
               r = r + 1
                 End If
              Next m
       WB.Close
      
     End If
      Set fl = Nothing
     Next fl
   
        For Each fd1 In fd.subfolders 'second grade
        
              For Each fl In fd1.Files
                 If UCase(fso.getextensionname(fl)) = "XLS" Or UCase(fso.getextensionname(fl)) = "XLSX" Then
                 Set WB = GetObject(fl)
                 R1 = WB.Sheets(1).Range("a1048576").End(xlUp).Row
                 ar = WB.Sheets(1).Range("A2:C" & R1)
                 For m = 1 To UBound(ar)
                 If UCase(ar(m, 3)) Like "A*" Then
                 WB.Sheets(1).Range("a" & m + 1 & ":" & "c" & m + 1).Copy ActiveSheet.Range("A" & ActiveSheet.Range("a1048576").End(xlUp).Row + 1)
               
                 End If
                 Next m
                 WB.Close
                  End If
                   Set fl = Nothing
                  Next fl

                         For Each fd2 In fd1.subfolders ' third grade
                                
                          For Each fl In fd2.Files
                          If UCase(fso.getextensionname(fl)) = "XLS" Or UCase(fso.getextensionname(fl)) = "XLSX" Then
                          Set WB = GetObject(fl)
                        r = ActiveSheet.Range("a1048576").End(xlUp).Row
                          R1 = WB.Sheets(1).Range("a1048576").End(xlUp).Row
                          ar = WB.Sheets(1).Range("A2:C" & R1)
                          For m = 1 To UBound(ar)
                          If UCase(ar(m, 3)) Like "A*" Then
                         WB.Sheets(1).Range("a" & m + 1 & ":" & "c" & m + 1).Copy ActiveSheet.Range("A" & ActiveSheet.Range("a1048576").End(xlUp).Row + 1)
                        
                          End If
                          Next m
                         WB.Close
        
                          End If
                        Set fl = Nothing
                         Next fl
                         Next fd2
               
     Next fd1
    Application.ScreenUpdating = True
    Set fso = Nothing
    Set fd1 = Nothing
    Set fd2 = Nothing
    Set WB = Nothing
End Sub


TA的精华主题

TA的得分主题

发表于 2017-3-8 15:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
河阳小子 发表于 2017-3-8 13:54
要是汇总B店的话,以下宏代码是怎么修改?修改哪里?求指教

Sub findfile()

把代码中的 If UCase(ar(m, 3)) Like "A*" Then改成
If UCase(ar(m, 3)) Like "B*" Then
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 03:44 , Processed in 0.049349 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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