ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 多工作薄数据汇总及如何实现记录追加

多工作薄数据汇总及如何实现记录追加

作者:绿色风 分类: 时间:2022-08-18 浏览:74
楼主
huangwei0king
加班统计.rar

  1. Sub 追加记录()
  2.     Dim afolder, cent, s, i
  3.     Dim pt As String
  4.     Dim arr, l
  5.     Dim brr() As String, crr() As String
  6.     Dim p, m, n, ct, i1, i2, i3, i4
  7.     Dim dic
  8.     Application.ScreenUpdating = False
  9.     On Error Resume Next
  10.     Set dic = CreateObject("scripting.dictionary")
  11.     Set cent = CreateObject("Scripting.FileSystemObject")
  12.     pt = ThisWorkbook.Path & "\加班统计"
  13.     Set s = cent.GetFolder(pt)
  14.     '第一步判断SHEET2是否已经有文件名记录,如果有,存入字典,如果没有(字典记录为空);
  15.     If Workbooks(1).Sheets(2).Cells(1, 1) <> "" Then
  16.         arr = Workbooks(1).Sheets(2).UsedRange
  17.         For l = 1 To UBound(arr)
  18.             dic(arr(l, 1)) = 1
  19.         Next
  20.     End If
  21.     '第二步,将加班统计子文件夹里所有的文件名存入数组brr;
  22.     For Each i In s.Files
  23.         p = p + 1
  24.         ReDim Preserve brr(1 To p)
  25.         brr(p) = i.Name
  26.     Next
  27.     '第三步进行比较,如果数组brr中文件名不存在于字典中,则该文件名存入数组crr;
  28.     For m = 1 To UBound(brr)
  29.         If Not dic.exists(brr(m)) Then
  30.             n = n + 1
  31.             ReDim Preserve crr(1 To n)
  32.             crr(n) = brr(m)
  33.         End If
  34.     Next
  35.     '第四步,将数组crr中的文件名写入SHEET2工作表;
  36.     If UBound(crr) < 0 Then
  37.         MsgBox "没有需要更新的文件"
  38.     Else
  39.         If Workbooks(1).Sheets(2).Cells(1, 1) = "" Then
  40.             Workbooks(1).Sheets(2).Cells(1, 1).Resize(UBound(crr), 1) = Application.Transpose(crr)
  41.         Else
  42.             i1 = Workbooks(1).Sheets(2).Range("a65536").End(xlUp).Row
  43.             Workbooks(1).Sheets(2).Cells(i1 + 1, 1).Resize(UBound(crr), 1) = Application.Transpose(crr)
  44.         End If
  45.     '第五步,将数组crr中的文件名中的记录存入表中
  46.         For i2 = 1 To UBound(crr)
  47.             Workbooks.Open Filename:=pt & "\" & crr(i2)
  48.             i3 = Workbooks(1).Sheets(1).Range("a65536").End(xlUp).Row    '汇总统计表的行数末尾标记
  49.             i4 = Workbooks(2).Sheets(1).Range("a65536").End(xlUp).Row    '打开的需要录入信息的表的行数末尾标记
  50.             Workbooks(2).Sheets(1).Range("2:" & i4 - 1).Copy Destination:=Workbooks(1).Sheets(1).Range("a" & i3 + 1)
  51.             Workbooks(1).Sheets(1).Range(Workbooks(1).Sheets(1).Cells(i3 + 1, 12), Workbooks(1).Sheets(1).Cells(i3 + i4 - 2, 12)).Value = Left(crr(i2), 3)
  52.             Workbooks(2).Close SaveChanges:=False
  53.         Next
  54.     End If
  55.     Application.ScreenUpdating = True
  56.     Erase arr
  57.     Erase brr
  58.     Erase crr
  59.     MsgBox "记录更新完成"
  60. End Sub



这里要讨论下实现记录追加的方法,数据汇总方面的资料已经很多了,学生就不献丑了!
我采用的方式是,在带宏的工作薄中,保存一份已经进行过数据汇总的工作薄的文件名,然后在打开工作薄运行宏的时候自动对文件夹里的所有工作薄的文件名和之前保存过得工作薄文件名的备份进行比较,筛选出新的文件,然后只把这一部分的数据汇总到总表里面去,并把这部分文件的文件名添加到汇总表中。
不知道大家觉得这种方式如何,如果有更好的方式,更简洁的代码,希望大家发出来,一起学习学习,谢谢!
2楼
xmyjk
建议给问题写一些详细的描述,还算一个较好的案例。
3楼
JOYARK1958
较好的案例。
4楼
vigossdawn
不错

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap