用VB.NET和Excel排生产计划--企业信息化探讨之一

小秘书的福音——使用Word VBA打造自动排版工具 使用Word VBA编写自动排版工具。正则表达式模式匹配识别各级标题,设置相应的字体、字形。 阅读详情

  用VB.NET和Excel排生产计划

           —企业信息化探讨之一

            SunHai

   开发工具:Microsoft Visual Studio .NET 2003
   操作系统:Windows XP

                 企业信息化失败原因探讨

  中国企业上线ERP的成功率是不高的。这是为什么呢?
  实用的ERP系统有两个特征:
    1. 要求具有高度的定制性
    2. 要能根据企业实际随时修改ERP系统

  而现在企业的ERP系统开发基本采用外包模式,开发人员虽然也可以深入公司各个部门,掌握各个方面信息,然后进行定制开发。但是开发人员毕竟不是企业实际从业人员,掌握信息的广度、深度毕竟是有限的,因此,通常情况下,所开发的ERP系统难以保证第一个特征:要求具有高度的定制性。
  
   另一方面,企业的实际情况随时都可能发生变化,ERP系统也要随时修改,才可能随时满足企业的需求。如果说一开始,ERP系统是满足企业需求的,那么一年以后呢?当然开发人员也可以跟踪企业需求,随时修改ERP系统,但总归是不太方便。

  
                  理想的企业信息化模式

  个人认为,理想的企业信息化模式是这样的:
    1.企业信息化系统的开发应由企业内部人员进行,而不是外包
    只有这样,实用的ERP系统所要求的两个特征:要求具有高度的定制性; 要能根据企业实际随时修改ERP系统就很可能两者都具备了。
    2.企业信息化要从实际工作需要出发,逐步推进
   公司实际从业人员(兼开发人员)从实际工作需要出发,开发出相应的信息化模块、功能,再逐步完善。
   现实中,许多企业开发的信息化系统功能很多,但又有多少人会用呢,最终是花架子而已。
  就象笔者所在单位,说大不大,说小不小,但要一开始推行信息化管理,是不可能的。企业各部门人员素质不一,是不可能被普遍接受的。

  要实现笔者所述理想的企业信息化模式,最大的困难是什么?
  最大的困难是是人才难得,特定管理人员要同时具备两种能力:管理能力和开发能力。这种人才并不是每个企业都能得到的。
  笔者虽然谈不上什么人才,但近几年从事的却是企业管理工作,并对信息化管理系统的开发亦略知一二。笔者就有可能亲身实践“理想的企业信息化模式”,并把有关经验与大家分享。

                  公司实际情况分析

  从2004年起,我主管公司的计划工作,包括制定并下发产品生产计划,自制件生产计划,外协件采购计划等。原来公司内一直用手写的方式,由于公司产品的型号较多,如果我也是用手工填写,计划一多,整天忙于机械式的写写算算,做不了什么事情。所以我考虑用电脑代替部分机械性的工作,我就可以腾出精力抓其他方面事情了。电脑可以辅助、代替我做哪些机械性的工作呢?
  比如,每一成品由零件组装而成,零件分自制件和外协件。每一产品由哪些零件组成是固定的。每个月的生产计划,都要分解成自制件生产计划和外协件采购计划,这个分解工作我决定交给电脑来完成。


                  程序开发模式分析   
                 
  用什么开发工具,用什么开发模式来实现所要求的功能呢?公司内暂时只有我自己运用,要实现的功能也不多,在一开始并没有必要用复杂的大型数据库系统。,为方便信息共享,我决定用VB.NET调用Excel来实现功能模块。
  为什么用VB.NET而不用C#,因为Excel中有个VBA,其语法和VB.NET是近似的。而且,VB.NET和C#的区别主要是语法,而非功能。
  我现在只要求实现用程序自动安排《自制件生产计划》,这个功能不用VB.NET,单用VBA也能轻易实现。但是,考虑到以后可能的功能扩充、升级,还是用VB.NET。VB.NET是面向一代的开发工具,功能强大,而且调用EXCEL也很方便。
  不推荐用VB6,VB.NET的入门及初级应用并不难,为何还要去用早期版本,而不用最新版本,掌握最新技术呢!  
  

               用VB.NET和Excel排生产计划

   软件构思是这样的:
  先在EXCEL里定制好《自制件生产计划》的样表(模板),保存为自制件生产计划.xls,其中只有一个sheet:样表。在样表中设置好各种格式,填写好固定项。再新建一空白workbook,保存为2004年自制件生产计划.xls。
   新建一VB.NET应用程序,命名为生产计划报表。在窗体上放很少几个控件,如:几个文本框,用来输入产品数量;checkbox用来先选择是正式生产计划还是增补生产计划;另外用二个文本框用来输入计划时间和计划编号。
  点击button,程序打开自制件生产计划.xls和2004年自制件生产计划.xls,把样表copy到2004年自制件生产计划.xls,并自动在目标sheet中填写各自制件需要生产的数量。
  
  下面是实现代码及详细注释。注意,要先添加com引用Microsoft Excel Object Library,我的是office 2003,引用Microsoft Excel 11.0 Object Library。

 

Private Sub producePlan()
  Call killEXCEL() '调用杀死EXCEL进程过程

  '以下代码判断用户填写信息是否完整,如不完整则提示信息并退出.
  If chkFormal.Checked = False And chkSubjoin.Checked = False Then
    MsgBox("是正式计划还是增补计划??", MsgBoxStyle.Critical, "请先选择计划性质")
    Exit Sub
  End If
  If txtDay.Text = "2004年月" Then
    MsgBox("什么月份的生产计划???", MsgBoxStyle.Critical, "请填写计划时间")
    Exit Sub
  End If
  If txt703.Text = Nothing Or txt909.Text = Nothing Or txt931.Text = Nothing Or txt932.Text = Nothing  Then
    MsgBox("请填写计划台数!", MsgBoxStyle.Critical, "计划台数填写不全")
    Exit Sub
  End If
  If chkFormal.Checked = True And chkSubjoin.Checked = True Then
    MsgBox("正式和增补两者只能选一!", MsgBoxStyle.Critical, "请重新选择计划性质")
    Exit Sub
  End If

  '以下代码即是计算各自制件的数量,用中文来命名是免去代码注释
  Dim 涂氟龙面板703 As Integer = CType(txt703.Text, Integer)
  Dim 钛金面板909 As Integer = CType(txt909.Text, Integer)
  Dim 油磨不锈钢面板931 As Integer = CType(txt931.Text, Integer)
  Dim 油磨不锈钢面板932 As Integer = CType(txt932.Text, Integer)
  Dim 底盘24 As Integer = 涂氟龙面板703
  Dim 底盘22 As Integer = 钛金面板909
  Dim 底盘41A As Integer = 油磨不锈钢面板931
  Dim 底盘41B As Integer = 油磨不锈钢面板931
  Dim 水盘25 As Integer = 涂氟龙面板703
  Dim 水盘24 As Integer = 涂氟龙面板703
  Dim 水盘22 As Integer = 钛金面板909 * 2
  Dim 中心支架2 As Integer = 涂氟龙面板703 + 钛金面板909
  Dim 长支架931 As Integer = (油磨不锈钢面板931 + 油磨不锈钢面板932) * 2
  Dim 支架931U As Integer = 油磨不锈钢面板931 * 2
  Dim 支架932U As Integer = 油磨不锈钢面板932 * 2
  Dim 磁头抱攀 As Integer = (钛金面板909 + 油磨不锈钢面板931 + 油磨不锈钢面板932) * 2
  Dim 电池抱攀 As Integer = (涂氟龙面板703 + 钛金面板909 + 油磨不锈钢面板931 + 油磨不锈钢面板932) * 2
  Dim 三通抱攀 As Integer = 电池抱攀 / 2
  Dim 炉头垫片 As Integer = 电池抱攀 * 3

  '定义一个数组,方便在EXCEL中循环写入数字,也可以放在EXCEL的VBA中实现
  Dim allNum() As Integer = _
  {涂氟龙面板703, 钛金面板909, 油磨不锈钢面板931, 油磨不锈钢面板932, _
  底盘24, 底盘22, 底盘41A, 底盘41B, _
  水盘25, 水盘24, 水盘22, _
  中心支架2, 长支架931, 支架931U, 支架932U, _
  磁头抱攀, 电池抱攀, 三通抱攀, 炉头垫片}

  Dim excelApp As New Excel.Application
  Dim excelBook As Excel.Workbook     '自制件生产计划.xls
  Dim excelbook2004 As Excel.Workbook   '2004自制件生产计划.xls
  Dim excelWorksheet As Excel.Worksheet
  Dim planProperty As String        '计划性质,是正式计划还是增补计划

  Try '建议用try方式捕捉错误,处理错误

    excelBook = excelApp.Workbooks.Open(Application.StartupPath & "/自制件生产计划.xls")

    excelbook2004 = excelApp.Workbooks.Open(Application.StartupPath & "/2004年自制件生产计划.xls")
    excelWorksheet = CType(excelBook.Worksheets("样表"), Excel.Worksheet)
    excelWorksheet.Copy(After:=excelbook2004.Sheets("sheet1"))
    '把样表copy到<2004年自制件生产计划>workbook中sheet1的后面

    excelApp.Visible = True '设置工作薄为可视

    If chkFormal.Checked = True Then
      planProperty = "正式"
    ElseIf chkSubjoin.Checked = True Then
      planProperty = "增补"
    End If

  With excelbook2004.ActiveSheet '用with 简化代码
    .Range("D1").Value = txtDay.Text '计划时间
    .Range("C2").Value = "laoban公司" & txtDay.Text & planProperty & "采购计划" '计划依据
    .Range("C25").Value = Now.Date.Today.ToShortDateString '这就是制表日期
    .Range("F2").Value = txtNO.Text '计划编号

  End With
  For i As Integer = 0 To 18 '共19种自制件
    excelbook2004.ActiveSheet.cells(4 + i, 4) = allNum(i)    '4+i是行号,第二个4是列号
  Next '循环把各自制件数填入<2004年自制件生产计划>中的活动工作表相应位置

  Catch ex As Exception '捕捉错误,并回收资源,显示错误
    excelBook = Nothing
    excelbook2004 = Nothing
    excelWorksheet = Nothing
    excelApp = Nothing
    GC.Collect(0)
    MsgBox(ex.ToString) '显示错误信息,以查找定位
  Exit Sub '出错就退出
  Finally '这里的代码一定会被执行到
    excelBook = Nothing
    excelbook2004 = Nothing
    excelWorksheet = Nothing  
    excelApp = Nothing
  GC.Collect(0)
  End Try
  MsgBox("已排好自制件生产计划,请查看")

  excelBook = Nothing
  excelbook2004 = Nothing
  excelWorksheet = Nothing
  excelApp = Nothing
  GC.Collect(0)

End Sub

 
  下面是杀死EXCEL进程的过程:

Private Sub killEXCEL() '为进程避免冲突,在调用EXCEL前先杀死现有EXCEL进程.
  Dim pProcess() As Process
  pProcess = Process.GetProcesses()
  Dim i As Integer
  For i = 0 To pProcess.Length() - 1
    If (pProcess(i).ProcessName = "EXCEL") Then
    pProcess(i).Kill() '关闭进程
    End If
  Next
End Sub

  以上代码非常简单,功能也很有限,但是很实用,以前都是用手工填写并计算的,现在全部自动实现。本来要半小时的工作,现在可以在5分钟内搞定。如果产品有变化,我可以随时修改程序,使程序始终满足企业需求。企业信息化就应该是这样,从很小的功能开始。
   也许老总一点不知道何为企业信息化,你可以展示给老总,看,以前要用半小时排计划,现在5分钟就解决,这也是属于企业信息化。
  昨天用了一个晚上时间写了以上代码,一个晚上只是一个晚上而已,以后可以省下多少时间?老总是经济第一的,要他掏腰包聘专业开发人员,或外委软件公司开发,总是要让老总割血,也是不太可能的事。我是管理人员,本身也懂一点编程,信息化从自身工作开始,不用老总多花一分钱,反而可以提高工作效率。而且,原来公司里只有极少懂产品的人有排计划的能力,现在用程序来实现,人人都会。
   中国的企业信息化,要么华而不实,更多企业是根本不知并不用。我在公司内进行企业信息化探索受诸多因素限制。无论如何,我会将我的经验与大家分享,大家共同来探索有中国特色的企业信息化之路。


我的QQ:  26624998
我的网站:http://blog.youkuaiyun.com/2066/
本文地址:http://www.youkuaiyun.com/Develop/read_article.asp?id=24505

                             2004年2月18日

 

VB.NET结合EXCEL统计生产报表 Untitled Document<!-- -->             VB.NET结合EXCEL统计生产报表          —企业信息化探讨之二          屠恩海    开发工具:Microsoft Visual Studio .NET 2003    操作系统:Windows XP 阅读详情

相关推荐

用友U8二次开发与集成实战:从数据库表结构到API对接的加强方案

ERP系统是企业信息化的核心支撑,用友U8作为国内中大型企业广泛部署的管理平台,其标准功能往往难以完全匹配个性化业务需求。针对U8的能力增强,通常涉及数据库层的表结构分析、SQL查询优化,以及基于API的接口集成开发。理解U8的账套结构、单据表和基础档案关系,是开展二次开发的基础。通过数据库直连查询、定时同步、WebService或RESTful API调用等技术手段,可以实现U8与MES、WMS等外围系统的数据打通与流程协同。在实际工程中,开发者需要关注数据一致性、事务控制、索引优化和异常补偿机制,以保障

weixin_34166847的博客 429

整机单板联动排产系统

VBA整机单板联动排产系统 按照父编码排产,父编码要生成100个,则该父编码的子编码都要生成100个,记录每次生成记录 排班生产父编码任务 生成父编码对应子编码所有生产工单 记录生产生成时间 存在任务编号时只修改计划量或者开工日期,任务号和父编码、子编码、工单号均不改变,按照原来有的数据,不存在任务编号即新建新的任务父编码对应子编号所有工单 Sub 运算表工令单生成() '字典 Set dic = CreateOb.

陈表达的博客 893

VBA:汇总不同生产线的生产计划

Background:公司有多条的生产线,生产计划员将不同的客户或者不同类别的产品的每日排产放在不同的Line中,我们需要把不同产线的产品汇总起来,方便我们后续转换为物料的每日需求(需要和BOM相乘 ...

Allen_tang的博客 3455

Excel中使用VBA自动生成排班表

在我们排班过程中,会有很多的问题,比如我们的有多少个人,从什么时候开始排班,节假日是否要进行排班等等一系列问题,手动排班的话会有很多的这样那样的问题,那我们为什么不能直接使用VBA代码进行排班呢,所以我们本篇文章就是基于这样的目的来展开的。以下就是我们的自动排班的代码了,让我们来使用一下吧。点击开发工具,点击我们的VBA。找到对应的位置,粘贴代码。如果对您有帮助,请您。

cheese的博客 1885

用VB写的ERP生产计划管理系统

参加一个项目,用VB写的ERP生产计划管理系统,将ERP管理模式转成可操作的系统,想当全面,不管对VB初学者,还有要深入了解的人都很有帮助

生产管理系统SQL+VB.NET

生产计划管理、车间管理、采购业务管理、销售业务管理、库存管理

用VB.NET和Excel排生产计划

开发工具:Microsoft Visual Studio .NET 2003   操作系统:Windows XP                 企业信息化失败原因探讨  中国企业上线ERP的成功率是不高的。这是为什么呢?  实用的ERP系统有两个特征:    1. 要求具有高度的定制性    2. 要能根据企业实际随时修改ERP系统  而现在企业的ERP系统开发基本采用外包模式,开发

1323

Excel生产计划自动排程教程

无标题文档

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 282

用VB做的生产排程

上海XX公司(装配车间-B線)生产排程系统--用VB做的生产排程

[VB.NET源码]生产管理系统sql

到我的博客去哦,有更多的源码下载的………… http://blog.csdn.net/mohongmao/

CnOpenData A股上市公司招聘数据

就业是经济的“晴雨表”,更是社会的“稳定器”。稳定和扩大就业一直是国家宏观调控的重要目标,2021年中央经济工作会议八次提到“就业”这一关键词。在新冠肺炎疫情蔓延、世界经济下行及人口老龄化加快等多重因素的叠加之下,稳就业保民生成为我国当前及今后一段时间内的工作重点。招聘最直接的目的就是弥补企业人力资源的不足,这是招聘工作的前提。

CnOpenData_wj的博客 369

生产计划自动排产表 生产计划自动排产表

生产计划自动排产表 生产计划自动排产表生产计划自动排产表生产计划自动排产表

vb.net统计机台产量_冲压工厂排单,计划及实际产出统计

应用场景这是一份冲压工厂(注塑工厂同理)所用的排单,计划及实际产出统计表Excel。我们在2018年在一个客户现场实现了类似的统计方式。这个Excel表由两类人共同编辑:计划员(负责每天排单),车间统计(负责录入实际产出量);管理员负责统计产出率(主要依靠公式得出)。表格浏览如上图。B列是设备名称,罗列出所有车间的冲压机。C-F是每月1号的内容,包括了排单产品(C),预计产量(D),实际产量(E)...

weixin_39522103的博客 483

生产管理系统VB SQL版.rar

生产管理系统VB SQL版,源代码中包括了通用部件、通用窗体、SQLServer数据库备份文件以及部分测试表格。在VB中编译前,请按要求准备好所需的OCX控件。本生产管理系统带启动画面,随后会进入主界面。

STM32_DAC

DAC(Digital-to-Analog Converter,数模转换器)是将数字信号转换为模拟信号的外设,广泛应用于音频输出、波形生成、电机控制等场景。STM32F407 系列芯片配备了 2 个 DAC 通道(DAC1 和 DAC2),支持 12 位分辨率,支持多种触发方式,可输出稳定的模拟电压。本文从 DAC 的基本原理出发,详细讲解 STM32F407 DAC 的配置方法、代码实现、波形生成以及实际应用案例,帮助你快速掌握 DAC 的使用技巧。

轩宇的博客 1242

vba 自动排序_Excel VBA(16) – VBA 按单击的标题列排序

这是基于昨天的 VBA 排序的进阶版:按鼠标单击的标题列位置,动态地排序。案例:我们还是用昨天这张表格来举例。当鼠标单击 B1:E1 区域时,鼠标单击哪一列标题行,就自动按照该列从大到小的顺序排序。方法:1. 按 Alt + F11 打开 VBE,输入以下代码:Sub Worksheet_SelectionChange(ByVal Target As Range) '选择的单元格发生变化后就会触发...

weixin_39895096的博客 1271

complier lab2

只需支持定义 main 函数即可不带参数 int main(){...}带参数 int main(int argc, int argv){...}

qq_43581843的博客 907
上一篇: 软件开发,创意是灵魂——用HttpWebRequest和正则表达式提取网页中的链接
下一篇: 用Socket类构建网页下载器
2066
博客等级 码龄23年 8粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值