Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
123
返回列表 发新帖
楼主: 绝峰

[已解决]VBA求助:材料申购计划

[复制链接]
发表于 2011-10-24 17:57 | 显示全部楼层
本帖最后由 mxg825 于 2011-10-24 20:15 编辑

加了2003 2007版自动识别!
申购数量,以系统日期为准!(当天)

材料申购计划(2).rar

22.58 KB, 下载次数: 13

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2011-10-25 09:04 | 显示全部楼层
谢谢!
还欠:“申购单打印”只要输入某一天日期,这一日所需申购的材料及数量都要显示出来
回复

使用道具 举报

 楼主| 发表于 2011-10-25 14:23 | 显示全部楼层
回复 mxg825 的帖子

“申购单打印”只要输入某一天日期,这一日所需申购的材料及数量都要显示出来
材料申购计划(2).rar (25.11 KB, 下载次数: 11)
回复

使用道具 举报

发表于 2011-10-25 22:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 mxg825 于 2011-10-26 16:40 编辑

回复 绝峰 的帖子

有了这个按日期生成申请查询单,
第一个程序本人认为没有意义了!

昨晚花了2个小时 才把代码写好!
2011-10-26 17:00代码更正好请重新下载!


  1. Sub 当天申购单()
  2. Dim D As New Dictionary '建立字典 (主键 key 值(产品名称&类别),Item值(D数组的行号字符串)
  3. Dim ID As New Dictionary '建立字典(主键 key 值(材料代码),Item值(CARR 列号)
  4. Dim Aarr, Barr, Carr(), Darr
  5. 'Aarr  :申购表 详细数据 (下简称A数组)
  6. 'Barr  :字典D 的 Item值 字符串转换成 数组 (下简称B数组)
  7. 'Carr():申购单打印 生成数据的数组,随需要可增加列数(也就是不够 就增加)(下简称C数组)
  8. 'Darr  :明细表 详细数据(产品用料 用量表)(下简称D数组)
  9. Dim X&, Y&, K& '循环体的变量
  10. Dim MYdate As Date '把[B2]的值交给一个日期变量
  11. Dim CCOL&, DCOL& 'C数组 的行号,D 数组的行号
  12. If Not IsDate([B2]) Then MsgBox "[B2]输入非日期格式", , "中止": Exit Sub
  13. Application.ScreenUpdating = False '关闭刷新 提高速度
  14. Sheets("申购单打印").Range("a4:F" & Sheets("申购单打印").Range("a65536").End(xlUp).Row + 1).Clear '清空旧数据
  15. On Error Resume Next '忽略出错
  16. Aarr = Sheets("申购表").Range("a4:D" & Sheets("申购表").Range("a65536").End(xlUp).Row) 'A数组 赋值
  17. Darr = Sheets("明细表").Range("a3:G" & Sheets("明细表").Range("a65536").End(xlUp).Row) 'D数组 赋值
  18. MYdate = [B2] '日期变量赋值
  19. For X = 1 To UBound(Darr) '循环D数组 建立D字典,
  20.     D(Darr(X, 1) & Darr(X, 2)) = D(Darr(X, 1) & Darr(X, 2)) & X & ","
  21.     '主键 key 值(产品名称&类别)=Item值(该主健对应的D数组行号串联,也就是每个产品用料的行号 字符串 【,】分隔符号)
  22. Next
  23. For X = 1 To UBound(Aarr) '循环A数组
  24. If Aarr(X, 1) = MYdate Then '对比日期
  25.    Barr = Split(D(Aarr(X, 2) & Aarr(X, 3)), ",") '字典D 的 Item值 字符串转换成 数组 (每个产品对应的 材料的行号)
  26.    For Y = 0 To UBound(Barr) - 1 '循环B数组
  27.       DCOL = Barr(Y) '每个产品对应的 材料的行号 交给变量
  28.       If ID.Exists(Darr(DCOL, 3)) Then '查看 ID 字典 是否 存在这个 【材料代码】
  29.          CCOL = ID(Darr(DCOL, 3)) '存在: 取这个材料在 C 数组中的列号!
  30.          Carr(5, CCOL) = Carr(5, CCOL) + Darr(DCOL, 7) * Aarr(X, 4) '材料数量 累加
  31.          Carr(6, CCOL) = Carr(6, CCOL) & "/" & Aarr(X, 2) & Left(Aarr(X, 3), 1) & "=" & _
  32.                          Darr(DCOL, 7) * Aarr(X, 4) & Darr(DCOL, 6) '备注信息(串联了 下方 备注信息)
  33.       Else '不存在
  34.         K = K + 1 '加一列
  35.         ID(Darr(DCOL, 3)) = K '字典ID 新添一个!'主键 key 值(材料代码)=Item值(C数组所在列号)
  36.         ReDim Preserve Carr(1 To 6, 1 To K) 'Carr数组增加一列
  37.         Carr(1, K) = Darr(DCOL, 3) '材料代码
  38.         Carr(2, K) = Darr(DCOL, 4) '材料名称
  39.         Carr(3, K) = Darr(DCOL, 5) '规格
  40.         Carr(4, K) = Darr(DCOL, 6) '单位
  41.         Carr(5, K) = Darr(DCOL, 7) * Aarr(X, 4) '材料用量* 产品套数
  42.         Carr(6, K) = Aarr(X, 2) & Left(Aarr(X, 3), 1) & "=" & Darr(DCOL, 7) * Aarr(X, 4) & Darr(DCOL, 6)
  43.                '备注信息= 产品名称 &产品规格("单人位",截取为“单”) & "=" & 材料用量* 产品套数 & 单位
  44.       End If
  45.     Next Y
  46.     End If
  47.     Next X
  48. With Sheets("申购单打印").Range("A4").Resize(K, 6)
  49.     .Value = Application.Transpose(Carr) 'C数组 导到工作表
  50.     .Sort key1:=Columns("A") '排序
  51.     .Borders.LineStyle = 1 '加网格线
  52. End With
  53. Application.ScreenUpdating = True '开启刷新
  54. MsgBox "需要申购材料共有" & K & "种", , "MXG825提示"
  55. End Sub
复制代码
注释写这么清楚 应该能看懂了吧?

材料申购计划4.rar

27.68 KB, 下载次数: 50

评分

参与人数 1 +3 收起 理由
yangkd + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-10-26 09:27 | 显示全部楼层
非常感谢!!
回复

使用道具 举报

 楼主| 发表于 2011-10-26 09:29 | 显示全部楼层
能否帮我把每段代码写上标注?以便学习之用!
回复

使用道具 举报

发表于 2011-10-26 09:51 | 显示全部楼层
非常感谢!!
回复

使用道具 举报

发表于 2011-10-26 12:03 | 显示全部楼层
绝峰 发表于 2011-10-26 09:29
能否帮我把每段代码写上标注?以便学习之用!

24楼 补上了 注释说明!

回复

使用道具 举报

发表于 2011-10-26 13:11 | 显示全部楼层
回复 mxg825 的帖子

老师辛苦了,虽然不懂代码,看看设计运算结果,
费心了。{:35:}
回复

使用道具 举报

 楼主| 发表于 2011-10-26 18:02 | 显示全部楼层
辛苦了,谢谢!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-4 11:07 , Processed in 0.374696 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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