MRP(VBA系列):1.检查生产计划中的设备是否有BOM

文章讲述了如何使用VBA在Excel中检查生产计划表格与BOM列表的对应关系,若发现有设备缺少BOM,程序会给出警告。提供了两种解决方案,包括使用`Dim`数组和字典来存储数据并进行比较。
摘要由CSDN通过智能技术生成

在所有运行的前面,我需要先做一个检查:生产计划中的设备是否有BOM,如果有的设备没有BOM,我不希望程序继续!


Tips:所有代码都是为目前任职公司编写,极大概率不适合其他公司,在这里发布:首先是记录;其次才是分享,望理解!

这里用两个方案,选择其中一种就可以了!

方案一:

Dim arr, brr
Dim i, j, k
Dim str
Dim d As New Dictionary     'the "Microsoft scripting runtime" need to be ticked if you want to define a new dictiory
Dim t

t = Timer
arr = Sheets("Plan").UsedRange
brr = Sheets("BOM").UsedRange

For i = 2 To UBound(brr)
    str = CStr(brr(i, 1))
    If Not d.Exists(str) Then
        d(str) = i
    End If
Next

k = 0
str = ""
For i = 2 To UBound(arr)
    If Not d.Exists(CStr(arr(i, 2))) Then
        str = str & CStr(arr(i, 2)) & "----" & i & "行" + vbLf
        k = k + 1
    End If
Next

If k > 0 Then
    MsgBox "存在以下设备没有找到BOM:" & vbLf & vbLf & str, vbOKCancel, "Warning"
    Exit Sub
End If

REQ.REQ


MsgBox "所有程序运行完毕,耗时" & Format(Timer - t, "#00.00") & " secords", vbOKOnly


End Sub

方案二:

Sub secondV()


Dim i, j, k
Dim arr, brr, crr()
Dim str
Dim d

Set d = CreateObject("scripting.dictionary")
arr = Sheets("Plan").UsedRange
brr = Sheets("BOM").UsedRange

For i = 2 To UBound(brr)
    str = brr(i, 1)
    If d(str) = "" Then
        d(str) = i
    End If
Next
'这样d.keys,和d.items就出来了
k = 0
For i = 2 To UBound(arr)
    If Not d.Exists(arr(i, 1)) Then
        k = k + 1
        ReDim Preserve crr(1 To 2, 1 To k)
        crr(1, k) = arr(i, 1)
        crr(2, k) = i
    End If
Next
Debug.Print k

'Q:i会到ubound(arr)+1才结束,那么i到达ubound(arr)+1的时候,循环主体的语句还实施吗?
str = ""

If k > 0 Then
    For i = 1 To k
        str = str & crr(1, i) & " : " & crr(2, i) & vbLf
    Next
    MsgBox str & vbLf & "以上SKU没有BOM,请检查", vbOKCancel
End If
End Sub

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值