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

在所有运行的前面,我需要先做一个检查:生产计划中的设备是否有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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468457.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 11

目录 1. 统一的列表初始化 1.1 {}初始化 1.2 std::initializer_list 2. decltype 3. 右值引用和移动语义 3.1 左值引用和右值引用 3.2 左值引用与右值引用比较 3.3 右值引用使用场景和意义 3.4 右值引用引用左值及其一些更深入的使用场景分析 3…

长安链开源社区发布2023年度长安链优秀应用案例

1月27日结束的“长安链发布三周年庆暨生态年会”上,在国家区块链技术创新中心的指导下,长安链开源社区联合长安链生态联盟正式发布2023年度长安链行业示范案例、领域精品案例及特色创新案例。 本次评选面向2023年度应用长安链上线并取得应用成效的案例&…

国内ip地址范围多大?ip地址容易切换吗?

随着互联网的蓬勃发展,IP地址成为连接每一台设备和服务的纽带。对于一个庞大的网络市场而言,了解国内IP地址的范围及其背后的技术细节显得尤为重要。虎观代理小二将深入剖析国内IP地址的范围,带您走进这个庞大而复杂的网络世界。 什么是IP地…

BlenderGIS 快捷键E 报错问题 Report: Error

最新版的Blender4.0 对于 BlenderGIS2.28版本的插件不兼容,BlenderGIS2.28兼容Blender3.6.9及之前的版本,应该是BlenderGIS插件很久没更新了导致的。

Pytorch详细应用基础(全)

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.安装pytorch以及anaconda配置 尽量保持默认的通道,每次写指令把镜像地址写上就行。 defaults优先级是最低的&#…

【LeetCode 算法刷题笔记-路径篇】

1.0112. 路径总和 1.1 题目大意 描述:给定一个二叉树的根节点 root 和一个值 targetSum。 要求:判断该树中是否存在从根节点到叶子节点的路径,使得这条路径上所有节点值相加等于 targetSum。如果存在,返回 True;否则…

GPT-SoVITS语音合成服务器部署,可远程访问(全部代码和详细部署步骤)

GPT-SoVITS 是一个开源项目,它使用大约一分钟的语音数据便可以训练出一个优秀的TTS模型。 项目的核心技术是 Zero-shot TTS 和 Few-shot TTS。 Zero-shot TTS 可以让用户输入5秒钟的语音样本并立即体验转换后的语音,而 Few-shot TTS 则可以通过使用仅一…

《论文阅读》EmpDG:多分辨率交互式移情对话生成 COLING 2020

《论文阅读》EmpDG:多分辨率交互式移情对话生成 COLING 2020 前言简介模型架构共情生成器交互鉴别器损失函数前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《EmpDG: Multi-resolution Interactive E…

Java 面向对象编程进阶三(封装)

目录 封装(encapsulation) 封装的作用和含义 封装的实现—使用访问控制符 public 访问权限修饰符: protected 访问权限修饰符: 默认访问权限修饰符 private 访问权限修饰符 封装的一些处理 封装(encapsulation) 封装是面向对象三大特征之一。对于…

蓝牙耳机哪个品牌最好?2024口碑绝佳蓝牙耳机推荐分享

​随着生活水平的不断提高,蓝牙耳机已成为我们生活中不可或缺的一部分。它为我们提供了极大的便利,无论是在听音乐、观看视频还是进行电话通话时。面对市场上种类繁多的蓝牙耳机,我为你整理了几款表现很不错的耳机产品,希望能帮助…

亚信安慧AntDB数据库分布式架构剖析之snapshot receiver进程

本文主要介绍亚信安慧AntDB数据库的分布式架构下的特有进程之snapshot receiver的设计,这也是分布式架构的核心进程之一。 进程简介 该进程的作用从逻辑上解释包含两个方面: 同步快照,并且是作为通信的client端存在 同步事务号,…

【博客7.4】缤果Qt5_TWS串口调试助手V2.0 (高级篇)

超级好用的Qt5_TWS耳机串口调试助手 开发工具: qt-opensource-windows-x86-5.14.2 (编程语言C) 目录 前言 一、软件概要: 二、软件界面: 1.App演示 三、获取 >> 源码以及Git记录: 总结 前言 串口调试助手支持常用的50bps - 10M…

MyBatisPlus 之四:MP 的乐观锁和逻辑删除、分组、排序、链式的实现步骤

乐观锁 乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。 乐观锁适用…

WannierTools安装教程

wanniertools简单介绍 开源软件包WannierTools,是一个用于研究新型拓扑材料的软件。此代码在紧束缚模型中工作,可以由另一个软件包Wannier90生成。 它可以通过计算Wilson loop来帮助对给定材料的拓扑相进行分类,通过角分辨光电发射(ARPES)和…

掘根宝典之C++正向迭代器和反向迭代器详解

简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式,使程序员可以对容器中的元素进行逐个访问和操作,而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器,这迭代器的名字就叫容器迭代器 迭代器的作用类…

后端系统开发之——创建注册接口

原文地址:后端系统开发之——创建注册接口 - Pleasure的博客 下面是正文内容: 前言 这是一篇SpringBoot项目的实践篇。 主要用于介绍如何从零开始搭建某一种类型的系统。 个人认为,只要后端逻辑完善了,纵使前端页面千变万化都可…

硬件基础:带缓启动MOS管电源开关电路

电源开关电路,经常用在各“功能模块”电路的电源通断控制,是常用电路之一。 本文要讲解的电源开关电路,是用MOS管实现的,且带缓开启功能,非常经典。 一、电路说明 电源开关电路,尤其是MOS管电源开关电路…

2024-3-18-C++day6作业

1>思维导图 2>试编程 要求: 封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪 再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数&a…

蓝桥杯-24点-搜索

题目 思路 --暴力递归全组合的方法。只有4个数,4种计算方式,共有4 * 3 * 2 * 1 * 4种不同的情况,可以写递归来实现。 --每次计算都是两个数之间的运算,因此4个数需要3次计算,第一次计算前有4个数,第二次有…

Mysql与MyBatis

1 Sql语句 增删改查 1.1 建表 -- cmd展示数据库 show databases ; -- cmd登录数据库 mysql localhost -u root -p-- auto_increment 自动增长,每添加一个表项id自动增1 -- char定长字符串 0-255,不足十个字符按十个字符算, varchar变长字符串…