|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
用dir遍历同文件夹的所有xls文档,利用选择性粘贴+功能实现对应累加
~~~我们分公司的报表就是利用这个功能实现的,代码我已经写好了- Sub 汇总(区域 As String) '区域参数以样式 "A1:B1-C3:D8"
- If MsgBox("亲,是否对 (" & ActiveSheet.Name & ") 进行汇总?", vbYesNo, "问问您老人家") = vbYes Then
- Dim str As String, Rng1 As Range, Rng() As String
- Rng = Split(区域 & "-", "-") '将参数劈开得到区域地址数组
- Application.ScreenUpdating = False '关闭屏幕刷新加快速度
- N = ActiveSheet.Index '取得活动工作表序号
- Mypath = ThisWorkbook.Path '汇总工作簿文档路径
- On Error Resume Next '跳过错误往下执行
- For i = 0 To UBound(Rng) '获得参数指定汇总表格中的区域方便清空跟后面清除0值
- If Rng1 Is Nothing Then
- Set Rng1 = ThisWorkbook.Sheets(N).Range(Rng(i))
- Else
- Set Rng1 = Union(Rng1, ThisWorkbook.Sheets(N).Range(Rng(i)))
- End If
- Next
- Rng1.ClearContents '清空单元格区域
- Application.ScreenUpdating = True
- strName = Dir(Mypath & "" & "*.xls") '获得路径下第一个Excel表文件名
- Application.ScreenUpdating = False
- Do While strName <> "" '运行到最后一个文件名称
- If strName <> ThisWorkbook.Name Then '判断为非汇总工作表
- Count = Count + 1 '计数次数
- With Workbooks.Open(Mypath & "" & strName) '打开工作簿
- str = str & Chr$(13) & strName
- For i = 0 To UBound(Rng) '循环设置的区域
- .Sheets(N).Range(Rng(i)).Copy '从打开文档中copy指定区域
- ThisWorkbook.Sheets(N).Range(Rng(i)).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
- :=False, Transpose:=False '选择性粘贴到汇总表格对应区域使用数值"加"运算
- Next i
- .Close False '关闭工作簿不保存修改
- End With
- End If
- strName = Dir '读取下一个Excel表文件名
- Loop
- For Each cell In Rng1 '清除区域中为0的单元格值
- If cell < 0.001 And cell >= 0 Then
- cell.ClearContents
- End If
- Next
- Application.ScreenUpdating = True '恢复屏幕刷新
- MsgBox "工作表-" & ActiveSheet.Name & Chr$(13) & "共汇总" & Count & "个工作簿金额" & Chr$(13) & str, Title:="哈哈!" '提示
- Rng1.Select
- Else
- Exit Sub
- End If
- End Sub
复制代码 |
评分
-
1
查看全部评分
-
|