ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量文件获取指定数据生成一个文件对应工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-15 20:21 | 显示全部楼层 |阅读模式
如附件,N文件,每个文件只有一个工作表,一个汇总文件按指定格式对应每个文件只提取部分数据然后新建N个工作表,并对工作加边框,添加相应公式,可是我的vba ,处理后 为什么我的汇总文件只有第一个工作表是对的,第二个就不对,第二个工作表多出了第一个的数据,第三个又是多了第一个和第二个的数据,,,,求帮忙看看

批量文件获取指定数据生成对应表格.rar

101.5 KB, 下载次数: 22

TA的精华主题

TA的得分主题

发表于 2019-10-15 20:38 | 显示全部楼层
本帖最后由 网海遨游 于 2019-10-15 21:11 编辑

每打开一个文件,操作完成,关闭后,将n值用结束后,要初始化n的值,同时清空数组br。在loop之前,加一句n=0:erase br'清空数组

TA的精华主题

TA的得分主题

发表于 2019-10-15 20:43 | 显示全部楼层
本帖最后由 网海遨游 于 2019-10-15 21:12 编辑

在你代码基础上,略有改动。不知是这样吗?


Sub LCQ()
Dim Mp$, Mf
Dim acount
Application.DisplayAlerts = False
Mp = ThisWorkbook.Path & "\"
Mf = Dir(Mp & "*.xls")
Set D = CreateObject("scripting.dictionary")
For Each sht In Sheets
        If sht.Name <> "模板" Then sht.Delete '此处删除是为了后面改名不因重名而报错
Next sht
Do While Mf <> ""
ReDim br(1 To 1000, 1 To 6)
    If Mf <> ThisWorkbook.Name Then
    S = Split(Mf, "(三供一业)审核确认表")
   If Not D.EXISTS(S(0)) Then
    Sheets("模板").Copy AFTER:=Sheets(Sheets.Count)
   D(S(0)) = 1
    ActiveSheet.Name = S(0)
    ActiveSheet.[A2] = "工程名称:" & S(0)
    End If
   Set WB = Workbooks.Open(Mp & Mf)
    For i = 7 To Cells(65536, 7).End(xlUp).Row
     With ThisWorkbook.Sheets(S(0))
    ar = WB.Worksheets(1).UsedRange
            n = n + 1
            br(n, 1) = n
            br(n, 2) = ar(i, 3)
            br(n, 3) = ar(i, 7)
            br(n, 4) = ar(i, 9)
            br(n, 6) = ar(i, 10)
             If br(n, 6) > 0 Then
             br(n, 5) = ar(i, 8)
              Else
            br(n, 5) = -ar(i, 8)
             End If
            br(n + 1, 2) = "合计"
            br(n + 1, 6) = "=sum(F5:F" & n + 4 & ")"
        End With
        Next
        WB.Close
    End If
    Range("a3:k" & (n + 5)).Borders.LineStyle = 1
    Cells(n + 5, "H") = "=sum(H5:H" & n + 4 & ")"
    Cells(n + 5, "J") = "=sum(J5:J" & n + 4 & ")"
   Range("H5:H" & n + 4).Formula = "=round(D5*G5,2)"
   Range("I5:I" & n + 4).Formula = "=G5-E5"
   Range("j5:j" & n + 4).Formula = "=h5-f5"
Mf = Dir()
Range("a5").Resize(n + 1, 6) = br
n = 0: Erase br
Loop
Application.DisplayAlerts = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-15 20:45 | 显示全部楼层
做了微调,看看是否满足需求吧

tttttt.zip

100.61 KB, 下载次数: 26

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-15 20:47 | 显示全部楼层
本帖最后由 网海遨游 于 2019-10-15 20:52 编辑

代码在审核中。上图片吧

image.png



image.png

TA的精华主题

TA的得分主题

发表于 2019-10-15 21:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub LCQ()
Dim Mp$, Mf
Dim acount
On Error Resume Next
Mp = ThisWorkbook.Path & "\"
Mf = Dir(Mp & "*.xls")
'ReDim br(1 To 1000, 1 To 6)'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'ReDim cr(1 To 1000, 1 To 3)
'ReDim br(1 To 1000, 1 To 10)
'ReDim mr(1 To 1, 1 To 1)
Set D = CreateObject("scripting.dictionary")
Do While Mf <> ""
    If Mf <> ThisWorkbook.Name Then
    S = Split(Mf, "(三供一业)审核确认表")
   If Not D.EXISTS(S(0)) Then
    Sheets("模板").Copy AFTER:=Sheets(Sheets.Count)
   D(S(0)) = 1
    ActiveSheet.Name = S(0)
    ActiveSheet.[A2] = "工程名称:" & S(0)
    End If
   ReDim br(1 To 1000, 1 To 6) '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   n = 0 '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   Set WB = Workbooks.Open(Mp & Mf)
    For i = 7 To Cells(65536, 7).End(xlUp).Row
     With ThisWorkbook.Sheets(S(0))
      
    ar = WB.Worksheets(1).UsedRange
   
      'ar = Sheets(1).UsedRange
        
        'For i = 7 To UBound(ar)
      
            n = n + 1
            br(n, 1) = n
            br(n, 2) = ar(i, 3)
            br(n, 3) = ar(i, 7)
            br(n, 4) = ar(i, 9)
            br(n, 6) = ar(i, 10)
            'Cells(n, 6) = ar(i, 10)
            'br(n, 5) = if(br(n, 6)>,ar(i, 6),-ar(i, 6))
             If br(n, 6) > 0 Then
             br(n, 5) = ar(i, 8)
              Else
            br(n, 5) = -ar(i, 8)
             End If
            'br(n, 8) = br(n, 4) * br(n, 7)
            'br(n, 8) = "="
            'cr(n, 1) = br(n, 4) * br(n, 5)
            'mr(1, 1) = "工程名称:" & ar(4, 3)
            'mr(1, 1) = Mid(ar(3, 7), 3, 100)
            br(n + 1, 2) = "合计"
            'acount = acount + br(n, 6)
            'br(n + 1, 6) = acount
            'Cells(n + 5, "F") = "=sum(F5:F" & n + 4 & ")"
            br(n + 1, 6) = "=sum(F5:F" & n + 4 & ")"
         
        'ar.ClearContents
        '.Close 0
        End With
        Next
        WB.Close
    End If

     ActiveSheet.Shapes("Button 1").Select '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     Selection.Cut
     ActiveSheet.Shapes("Button 2").Select
     Selection.Cut
     ActiveSheet.Shapes("Button 3").Select
     Selection.Cut '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   
   
   
    Range("a3:k" & (n + 5)).Borders.LineStyle = 1
    'For m = 1 To (n + 4)
    'Cells(m, "h") = "d"&m&"*m"&m&""
    'Next m
    'Cells(n + 6, "h") = "=sum(H5:H" & n & ")"
   
    Cells(n + 5, "H") = "=sum(H5:H" & n + 4 & ")"
    Cells(n + 5, "J") = "=sum(J5:J" & n + 4 & ")"
    'br(n + 1, 5) = "合计"
   'Range(5, 8) = "sum()"
   'r = [a65536].End(3).Row
   
   Range("H5:H" & n + 4).Formula = "=round(D5*G5,2)"
   Range("I5:I" & n + 4).Formula = "=G5-E5"
   Range("j5:j" & n + 4).Formula = "=h5-f5"
Mf = Dir()
Range("a5").Resize(n + 1, 6) = br
Loop
'Range("a5:f1000").ClearContents

'Range("h5").Resize(n + 1, 3) = cr
'Range("a5").Resize(n + 1, 10) = br
'Range("a2").Resize(1, 1) = mr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-16 09:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liulang0808 发表于 2019-10-15 20:45
做了微调,看看是否满足需求吧

可以,非常感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-16 09:46 | 显示全部楼层
liulang0808 发表于 2019-10-15 20:45
做了微调,看看是否满足需求吧

可以了,非常感谢,不好意思还想实现一个功能,就是把每个工作表中 把有几行材料名称和单价 都一致的合并成一行

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-16 09:47 | 显示全部楼层
清风竹- 发表于 2019-10-15 21:09
Sub LCQ()
Dim Mp$, Mf
Dim acount

可以了,非常感谢,不好意思还想实现一个功能,就是把每个工作表中 把有几行材料名称和单价 都一致的合并成一行

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-16 09:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liulang0808 发表于 2019-10-15 20:45
做了微调,看看是否满足需求吧

可以了,非常感谢,不好意思还想实现一个功能,就是把每个工作表中 把有几行材料名称和单价 都一致的合并成一行
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 15:08 , Processed in 0.039144 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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