ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: dilywee

[求助] 如何根据物料母子关系表得到某一母件的物料明细表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-7 22:09 | 显示全部楼层

回复 16楼 三坛老窖 的帖子

谢谢老弟挂念我的问题,这么巧今日再次看到你的佳作,
想的真的很周到,只是运行速度慢,错误同13楼,请
试试在OFFICE2003上编写程序,修正问题,
谢谢啦。

TA的精华主题

TA的得分主题

发表于 2011-1-7 22:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
'哈哈,好玩,看看是不是想这样:
Dim result As String
Dim resultrequery As String
Dim linecount
Sub calllsftest()
linecount = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
resultrequery = "77040023(1)" '在这里设定你要查询的母件编码和所需的数量(数量一定要填且需用括号括着)
'resultrequery = "987(3)"'我在楼主附件里想找测试的数据,结粗略找一下结果没找着,只好自己加测试数据
result = resultrequery
lsftest
End Sub
Sub lsftest()
gonext = 0
Dim a
a = Split(result, ",")
For b = 0 To UBound(a)
tempindex = Left(a(b), InStr(a(b), "(") - 1)
For Each c In Sheet1.Range(Cells(2, 1), Cells(linecount, 1))
If c.Text = Trim(tempindex) Then
gonext = 1
tempnum = Mid(a(b), InStr(a(b), "(") + 1, Len(a(b)) - InStr(a(b), "(") - 1)
tempstr = tempstr + Trim(Sheet1.Cells(c.Row, 2)) + "(" + Trim(Sheet1.Cells(c.Row, 4) * tempnum) + ")" + ","
End If
Next
If Len(tempstr) <> 0 Then
If Right(tempstr, 1) = "," Then tempstr = Left(tempstr, Len(tempstr) - 1)
result = Replace(result, a(b), tempstr)
tempstr = ""
End If
Next
If gonext = 1 Then
lsftest
Else
Debug.Print "=============================================="
Debug.Print "查询物品代码(数量):", resultrequery
Debug.Print "最终原材料代码(数量):", result
End If
End Sub

TA的精华主题

TA的得分主题

发表于 2011-1-7 23:07 | 显示全部楼层
22楼代码的一些说明:
1.调用方法:运行calllsftest,至于怎么把要查询的编码传递到变量resultrequery 里面去,楼主可以按自己的需要采用不同的方法,这里只是示例就干脆简单地随便找个编码直接写到resultrequery 里去了。
2.resultrequery 变量的格式是“待查编码(待查数目)”,以上面代码里resultrequery = "77040023(1)"为例,就是要查询制造1件77040023需要哪些原材料以及各原材料的数量是多少。。。查询的数量可以改变,如果写成resultrequery = "77040023(7)"就是要查询制造7件77040023需要哪些原材料以及各原材料的数量是多少。。。查询的数量改变,最后出来所需各原材料数量也会跟着变。但这个变量的格式一定不能搞错(包括括号,要用英文输入法的),否则查询会出问题。当然,如果看通了代码以后,自己设定自己的格式也可以。
3最终结果里的最终原材料只有编码,数量,没有单位(个、米、套之类),但这应该很轻松就能实现,就不写了,22楼的示例里得到的数据也只debug print,楼主得到结果后怎么应用就自己做一点处理吧。
4.22楼我自己添加了测试数据:
母件编码        子件编码        子件主计量单位        子件数量
987        456                7
987        889                7
456        345                6
889        867                2
456        232                5
456        111                3

代码输出结果:
==============================================
查询物品代码(数量):      987(3)
最终原材料代码(数量):    345(126),232(105),111(63),867(42)

[ 本帖最后由 lsftest 于 2011-1-7 23:25 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-7 23:46 | 显示全部楼层
找了个87060013试了一下,有结果出来(但没有验证是否正确):
==============================================
查询物品代码(数量):      87060013(1)
最终原材料代码(数量):   
73080017(4),75000005(4),75030655(4),75030723(17),75030939(16),75040142(4),75040214(4),75050115(4),75050116(16),75050139(17),75050171(16),75050172(17),75050173(8),75050174(1),77060009(1),77990000(1),77990016(1),77990017(1),77990018(4),77990019(1),77990020(1),77990021(1),77990022(1),77990154(8),77990156(1),78000017(1),80990022(1),80990144(1),10060219(1),10200299(1),10200370(1),60009222(1),71041719(1),73130102(1),75000017(4),75030645(8),75030647(4),75030658(2),75030661(4),75030662(4),75030787(4),75040136(4),75040138(2),75050052(4),75050111(10),75050113(4),75050115(12),75050119(12),75050120(4),75050123(10),75070047(1),75080221(1),75080222(1),75090003(4),76000038(1),76010001(1),77020003(1),77020020(1),77020038(2),77020004(1),77020005(1),77040000(2.13),77020000(1),77020001(1),77020004(1),77020008(1),77020009(1),77040000(1.2),77020004(1),77020005(1),77040000(1.68),77020002(1),77020006(1),77020007(1),77040001(1.1),77090000(1),80010045(1),80040700(1),71000311(24.68),80041001(1),71000308(12.0932),71030009(4.5039),10060011(3),60009618(1),60009619(1),60010040(1),75080226(1),75080300(3),75100015(3),77010000(1),77050003(1),98000293(1),71041415(5.0232),71020502(2.2627),98000292(1),98000291(1),80150001(2),80990120(1),76180001(1),10010002(1),75030652(4),75050116(4),75080229(5),71060015(.4988),71060014(6.8992),71030009(4.5039),71000318(8.8848),71000110(.9819),71000132(.8843),10090022(1),75030659(4),75030660(4),75040137(4),75050116(4),75050117(4),75050118(8),75050122(8),77080038(1),77080004(1),78000014(1)

但速度不行(大约10来20秒)。。。由于用的是字符串方法(其实这问题就是一历遍树的问题,网上已有很多算法、代码等。。但这里用字符串是因为觉得这种思路有趣想真的实现一下),vb的字符串处理速度那是出名的杯具,也只能这样了。。。
有空好好研究楼上那专家的代码。。。

[ 本帖最后由 lsftest 于 2011-1-7 23:54 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-8 00:08 | 显示全部楼层
汗。。。没考虑过同一原材料可生成不同种的中间件(估计是这原因)。。导致结果有75050115(4),之后又有另一75050115(12)这类情况。。
22楼的代码废了。。。呵呵。。。安心睡觉。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-10 15:50 | 显示全部楼层
原帖由 三坛老窖 于 2011-1-7 13:17 发表
估计是office版本问题,我是2010的。不久前也发生过数据有效性列表不能刷新的问题,至今也不知是啥原因。希望路过的大侠帮忙查找一下原因。
http://club.excelhome.net/viewth ... mp;page=3#pid453908 ...


用2007版运行正常了。调用几个产品进行测试,结构和物料明细与数量都正确。唯一的缺憾是运行较慢,不知道能不能进一步优化和改进。另外,我添加新数据进去也能运行吗(未测试)?还有,我想把编码格式改为数字格式,能否相应做下修改?

若能解决运行速度问题,老师的作品堪称完美。谢谢老师!我还需要不断加强学习,多多求教

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-10 15:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 honggexjq 于 2011-1-7 14:04 发表


修改了下,应该可以适用数字格式了


谢谢你的不吝赐教!很实用和好用

TA的精华主题

TA的得分主题

发表于 2011-1-12 01:32 | 显示全部楼层

回复 26楼 dilywee 的帖子

1、参照 honggexjq 大侠的方法,采用字典和数组来处理数据,运行速度比原来提到了十几倍。(PS:考虑到实际使用时,可能会把BOM表存放在数据库或其他工作簿中,所以在提取数据时还是使用ADO+SQL模式。字典太神了,第一次使用字典)
2、添加新数据进去能够运行
3、编码格式已改为数字格式
--------------------------------------------------------------------------------
物料母子关系数据库v3.rar (45.98 KB, 下载次数: 389)

[ 本帖最后由 三坛老窖 于 2011-1-12 01:33 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-12 01:46 | 显示全部楼层

回复 21楼 yangkd 的帖子

有效性下拉列表不能刷新,这个问题不解决,如鲠在喉啊!很遗憾,周围找不到安装有office2003的机子。
建议老兄升级到2010吧,用几天你就会感觉到2010比2003爽多了。

TA的精华主题

TA的得分主题

发表于 2011-1-12 01:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 25楼 lsftest 的帖子

老兄好潇洒哟。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 02:32 , Processed in 0.047027 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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