作者:绿色风
分类:
时间:2022-08-18
浏览:107
楼主 huangwei0king |
加班统计.rar
- Sub 追加记录()
- Dim afolder, cent, s, i
- Dim pt As String
- Dim arr, l
- Dim brr() As String, crr() As String
- Dim p, m, n, ct, i1, i2, i3, i4
- Dim dic
- Application.ScreenUpdating = False
- On Error Resume Next
- Set dic = CreateObject("scripting.dictionary")
- Set cent = CreateObject("Scripting.FileSystemObject")
- pt = ThisWorkbook.Path & "\加班统计"
- Set s = cent.GetFolder(pt)
- '第一步判断SHEET2是否已经有文件名记录,如果有,存入字典,如果没有(字典记录为空);
- If Workbooks(1).Sheets(2).Cells(1, 1) <> "" Then
- arr = Workbooks(1).Sheets(2).UsedRange
- For l = 1 To UBound(arr)
- dic(arr(l, 1)) = 1
- Next
- End If
- '第二步,将加班统计子文件夹里所有的文件名存入数组brr;
- For Each i In s.Files
- p = p + 1
- ReDim Preserve brr(1 To p)
- brr(p) = i.Name
- Next
- '第三步进行比较,如果数组brr中文件名不存在于字典中,则该文件名存入数组crr;
- For m = 1 To UBound(brr)
- If Not dic.exists(brr(m)) Then
- n = n + 1
- ReDim Preserve crr(1 To n)
- crr(n) = brr(m)
- End If
- Next
- '第四步,将数组crr中的文件名写入SHEET2工作表;
- If UBound(crr) < 0 Then
- MsgBox "没有需要更新的文件"
- Else
- If Workbooks(1).Sheets(2).Cells(1, 1) = "" Then
- Workbooks(1).Sheets(2).Cells(1, 1).Resize(UBound(crr), 1) = Application.Transpose(crr)
- Else
- i1 = Workbooks(1).Sheets(2).Range("a65536").End(xlUp).Row
- Workbooks(1).Sheets(2).Cells(i1 + 1, 1).Resize(UBound(crr), 1) = Application.Transpose(crr)
- End If
- '第五步,将数组crr中的文件名中的记录存入表中
- For i2 = 1 To UBound(crr)
- Workbooks.Open Filename:=pt & "\" & crr(i2)
- i3 = Workbooks(1).Sheets(1).Range("a65536").End(xlUp).Row '汇总统计表的行数末尾标记
- i4 = Workbooks(2).Sheets(1).Range("a65536").End(xlUp).Row '打开的需要录入信息的表的行数末尾标记
- Workbooks(2).Sheets(1).Range("2:" & i4 - 1).Copy Destination:=Workbooks(1).Sheets(1).Range("a" & i3 + 1)
- 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)
- Workbooks(2).Close SaveChanges:=False
- Next
- End If
- Application.ScreenUpdating = True
- Erase arr
- Erase brr
- Erase crr
- MsgBox "记录更新完成"
- 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总版主之一