ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] (求助)工作簿指定名称表汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-12 10:33 | 显示全部楼层 |阅读模式
工作簿指定名称表汇总
(已经编辑部分VBA,下面的循环堵住了,或者可以重新帮忙写个新的VBA)
希望伟大的坛友出手相助

SC.zip

86.16 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2018-7-12 11:01 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim wb As Workbook
  5.   Dim ws As Worksheet
  6.   Dim mypath$, myname$
  7.   Dim d As Object
  8.   Set d = CreateObject("scripting.dictionary")
  9.   Set d1 = CreateObject("scripting.dictionary")
  10.   With Worksheets("统计汇总")
  11.     c = .Cells(2, .Columns.Count).End(xlToLeft).Column
  12.     arr = .Range("c2").Resize(1, c - 2)
  13.   End With
  14.   For j = 1 To UBound(arr, 2) Step 2
  15.     If Len(arr(1, j)) <> 0 Then
  16.       d1(arr(1, j)) = j + 1
  17.     End If
  18.   Next
  19.   ReDim brr(1 To 1000, 1 To UBound(arr, 2) + 2)
  20.   m = 0
  21.   mypath = ThisWorkbook.Path & "\一个工作簿存在多个表--- 汇总汇总表001"
  22.   myname = Dir(mypath & "*.xlsx")
  23.   Do While myname <> ""
  24.     If myname <> ThisWorkbook.Name Then
  25.       Set wb = GetObject(mypath & myname)
  26.       With wb
  27.         With .Worksheets("汇总")
  28.           r = .Cells(.Rows.Count, 1).End(xlUp).Row
  29.           arr = .Range("a3:e" & r)
  30.           m = m + 1
  31.           brr(m, 1) = arr(1, 2)
  32.           For i = 4 To UBound(arr)
  33.             If d1.exists(arr(i, 1)) Then
  34.               n = d1(arr(i, 1))
  35.               brr(m, n) = arr(i, 4)
  36.               brr(m, n + 1) = arr(i, 5)
  37.             End If
  38.           Next
  39.         End With
  40.         .Close False
  41.       End With
  42.     End If
  43.     myname = Dir
  44.   Loop
  45.   With Worksheets("统计汇总")
  46.     .Range("b3").Resize(m, UBound(brr, 2)) = brr
  47.   End With
  48. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-12 11:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
详见附件。

SC.rar

76.16 KB, 下载次数: 62

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-12 17:33 | 显示全部楼层

我对老师的敬仰之情,犹如滔滔江水,绵延不绝

感谢老师的孜孜不倦 感谢

TA的精华主题

TA的得分主题

发表于 2018-7-12 20:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-13 14:13 | 显示全部楼层
'=======================================================================
'03 递归后调用 统计
'=======================================================================
Sub jsjs汇总统计()
    Application.ScreenUpdating = False
    Dim i, i3, i6 As Long
    ReDim brr(1 To 10, 1 To 23)
    Dim SourceBook As Workbook
    Dim SourceSheet As Worksheet
    Dim ws As Worksheet
   '将对象引用赋给变量或属性。
    Set ws = Worksheets("统计汇总")
    'Set ws2 = Worksheets("汇总")
    '清空结果表
    'ThisWorkbook.Sheets("结果表").Range("a2:ci" & Sheets("结果表").UsedRange.Rows.Count).Clear
    '给变量赋值
    i6 = 3
    k = 1
   ' i2 = 2
    '判断是否导入文件
    If Len(Trim(ws.Cells(3, 25))) = 0 Then
       MsgBox ("请导入目标所在的文件夹!")
      Exit Sub
    End If
    Do
        If Len(Trim(ws.Cells(i6, 25))) = 0 Then Exit Do
        'Dim SourceBook As Workbook  打开导入的文件夹根路径下的文件
        Set SourceBook = Workbooks.Open(Trim(ws.Cells(i6, 25)), False) 'Open 打开一个工作簿
        'Dim SourceSheet As Worksheet 遍历打开的文件夹下的文件
        For Each SourceSheet In SourceBook.Worksheets
            '**************************************************************
            'If SourceSheet.Name <> "汇总" And SourceSheet.[B3] <> "" Then Else On Error GoTo ERROR1
            If Left(SourceSheet.Name, 2) <> "汇总" Then Else On Error GoTo ERROR1
            
            '**************************************************************
                    'If Len(SourceSheet.[b8]) <> 0 Then i3 = True Else On Error GoTo ERROR1
                    i3 = True
                    '激活文件夹
                    'SourceSheet.Activate
                    Do While i3
                        '返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。
                        '窗口表的品名项 看是不是为空
                        'If Len(Trim(SourceSheet.Cells(i3, 1))) = 0 Then Exit Do
                        
                            'r = SourceSheet.Cells(Rows.Count, 1).End(xlUp).Row
                            'If SourceSheet.[B3] <> "" Then
                            brr(k, 1) = SourceSheet.[B3] '模具号4
                           
                            'arr = SourceSheet.Range("a6:e" & r)
                            arr = SourceSheet.Range("a6:e" & 16)
                                For i = 1 To UBound(arr)
                                    If arr(i, 1) <> "" Then
                                        'n = n + 1
                                        'k = 3
                                        For n = 1 To 11
                                            If n = 1 Then
                                                brr(k, 2) = arr(n, 4) '件号6
                                                brr(k, 3) = arr(n, 5) '件号6
                                            End If
                                            If n = 2 Then
                                                brr(k, 4) = arr(n, 4) '件号6
                                                brr(k, 5) = arr(n, 5) '件号6
                                            End If
                                            If n = 3 Then
                                                brr(k, 6) = arr(n, 4) '件号6
                                                brr(k, 7) = arr(n, 5) '件号6
                                            End If
                                            If n = 4 Then
                                                brr(k, 8) = arr(n, 4) '件号6
                                                brr(k, 9) = arr(n, 5) '件号6
                                            End If
                                            If n = 5 Then
                                                brr(k, 10) = arr(n, 4) '件号6
                                                brr(k, 11) = arr(n, 5) '件号6
                                            End If
                                            If n = 6 Then
                                                brr(k, 12) = arr(n, 4) '件号6
                                                brr(k, 13) = arr(n, 5) '件号6
                                            End If
                                            If n = 7 Then
                                                brr(k, 14) = arr(n, 4) '件号6
                                                brr(k, 15) = arr(n, 5) '件号6
                                            End If
                                            If n = 8 Then
                                                brr(k, 16) = arr(n, 4) '件号6
                                                brr(k, 17) = arr(n, 5) '件号6
                                            End If
                                            If n = 9 Then
                                                brr(k, 18) = arr(n, 4) '件号6
                                                brr(k, 19) = arr(n, 5) '件号6
                                            End If
                                            If n = 10 Then
                                                brr(k, 20) = arr(n, 4) '件号6
                                                brr(k, 21) = arr(n, 5) '件号6
                                            End If
                                            If n = 11 Then
                                                brr(k, 22) = arr(n, 4) '件号6
                                                brr(k, 23) = arr(n, 5) '件号6
                                            End If
                                            '错误模板
'                                            If n = 11 And Len(SourceSheet.[a16]) = "扬州" Then
'                                                brr(k, 22) = arr(n, 4) '件号6
'                                                brr(k, 23) = arr(n, 5) '件号6
'                                            End If

                                         Next n
                                       
                                       
                                        End If
                                       
                                       
                                    Next i
                                    i3 = False
                               ' End If
                        Loop
            
            Next
             SourceBook.Close False
             Set SourceSheet = Nothing
             i6 = i6 + 1
             k = k + 1
    Loop
   
        Sheet1.[B3].Resize(k, 23) = brr '将数据表数据放入brr数组,在将brr数组赋值给查询表
        j = 1
        MsgBox ("汇总完成")
ERROR1:
        ' MsgBox "表格不能为空"
        Application.ScreenUpdating = True
End Sub

为什么我这句判断是否是汇总表没有用呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-13 14:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'**************************************************************
            'If SourceSheet.Name <> "汇总" And SourceSheet.[B3] <> "" Then Else On Error GoTo ERROR1
            If Left(SourceSheet.Name, 2) <> "汇总" Then Else On Error GoTo ERROR1
    就是这一句,为什么判断没有用呀

TA的精华主题

TA的得分主题

发表于 2018-7-13 16:01 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-9 00:14 , Processed in 0.027625 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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