做数据汇总遇到的问题,请大家帮帮忙!
时间:2011-08-11
来源:互联网
各位大侠:
因为我们的产品是模块组合式制造,因此在做bom表时要根据总成的名称一个一个到文件夹中寻找然后在拷贝,工作量非常大,能否请高手按附件中的要求帮谢一段程序?请大家帮帮忙!
[ 本帖最后由 kuilinq 于 2011-8-11 12:55 编辑 ]
数据汇总(感觉太难).rar(39.06 KB)
因为我们的产品是模块组合式制造,因此在做bom表时要根据总成的名称一个一个到文件夹中寻找然后在拷贝,工作量非常大,能否请高手按附件中的要求帮谢一段程序?请大家帮帮忙!
[ 本帖最后由 kuilinq 于 2011-8-11 12:55 编辑 ]
附件

2011-8-11 10:35, 下载次数: 9
作者: kuilinq 发布时间: 2011-08-11
短信收到,请测试:
Sub Macro1()
Dim MyPath$, MyName$, sh As Worksheet, sht As Worksheet, arr, d As Object, ds As Object, dic As Object, lr&
Set d = CreateObject("scripting.dictionary")
Set ds = CreateObject("scripting.dictionary")
Set dic = CreateObject("scripting.dictionary")
With Sheets("Sheet1")
arr = .Range("a3:a" & [a65536].End(3).Row)
End With
For i = 1 To UBound(arr)
d(Left(arr(i, 1), 4)) = i
ds(arr(i, 1) & ".xls") = i
Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sht In Sheets
If sht.Name <> ActiveSheet.Name Then sht.Delete
Next
MyPath = ThisWorkbook.Path & "\明细表数据\"
MyName = Dir(MyPath & "*.xls")
Do While MyName <> ""
If d.Exists(Left(MyName, 4)) Then
If Not dic.Exists(Left(MyName, 4)) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Left(MyName, 4)
Set dic(Left(MyName, 4)) = ActiveSheet
End If
With GetObject(MyPath & MyName)
Set sht = dic(Left(MyName, 4))
For Each sh In .Sheets
If IsSheetEmpty = IsEmpty(sh.UsedRange) Then
If ds.Exists(MyName) Then
sh.[a1].CurrentRegion.Copy sht.[a65536].End(3).Offset(1)
Else
lr = sht.[a65536].End(3).Row
sh.[a1].CurrentRegion.Copy sht.Cells(lr + 3, 1)
sht.Cells(lr + 2, 2) = Split(MyName, ".")(0)
End If
End If
Next
.Close False
End With
End If
MyName = Dir
Loop
Application.ScreenUpdating = True
MsgBox "ok"
End Sub
Sub Macro1()
Dim MyPath$, MyName$, sh As Worksheet, sht As Worksheet, arr, d As Object, ds As Object, dic As Object, lr&
Set d = CreateObject("scripting.dictionary")
Set ds = CreateObject("scripting.dictionary")
Set dic = CreateObject("scripting.dictionary")
With Sheets("Sheet1")
arr = .Range("a3:a" & [a65536].End(3).Row)
End With
For i = 1 To UBound(arr)
d(Left(arr(i, 1), 4)) = i
ds(arr(i, 1) & ".xls") = i
Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sht In Sheets
If sht.Name <> ActiveSheet.Name Then sht.Delete
Next
MyPath = ThisWorkbook.Path & "\明细表数据\"
MyName = Dir(MyPath & "*.xls")
Do While MyName <> ""
If d.Exists(Left(MyName, 4)) Then
If Not dic.Exists(Left(MyName, 4)) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = Left(MyName, 4)
Set dic(Left(MyName, 4)) = ActiveSheet
End If
With GetObject(MyPath & MyName)
Set sht = dic(Left(MyName, 4))
For Each sh In .Sheets
If IsSheetEmpty = IsEmpty(sh.UsedRange) Then
If ds.Exists(MyName) Then
sh.[a1].CurrentRegion.Copy sht.[a65536].End(3).Offset(1)
Else
lr = sht.[a65536].End(3).Row
sh.[a1].CurrentRegion.Copy sht.Cells(lr + 3, 1)
sht.Cells(lr + 2, 2) = Split(MyName, ".")(0)
End If
End If
Next
.Close False
End With
End If
MyName = Dir
Loop
Application.ScreenUpdating = True
MsgBox "ok"
End Sub
作者: zhaogang1960 发布时间: 2011-08-11
思路有所不同,每个大类占用一张工作表,请看附件
数据汇总(感觉太难).rar (45.31 KB)

作者: zhaogang1960 发布时间: 2011-08-11
非常感谢!我看看先。。。
作者: kuilinq 发布时间: 2011-08-11
感谢版主的帮忙!意思是对的,OK!
另外在问问:
1、要是每个大类都是放置在同一个工作表中如何修改程序;
2、问题我重新发出,见复件
数据汇总(感觉太难1).rar(53.4 KB)
另外在问问:
1、要是每个大类都是放置在同一个工作表中如何修改程序;
2、问题我重新发出,见复件
附件

2011-8-11 18:36, 下载次数: 0
作者: kuilinq 发布时间: 2011-08-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28