国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用VB.NET和Excel排生產計劃--企業信息化探討之一

2024-07-10 13:01:21
字體:
來源:轉載
供稿:網友
用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分鐘就解決,這也是屬于企業信息化。
  昨天用了一個晚上時間寫了以上代碼,一個晚上只是一個晚上而已,以后可以省下多少時間?老總是經濟第一的,要他掏腰包聘專業開發人員,或外委軟件公司開發,總是要讓老總割血,也是不太可能的事。我是管理人員,本身也懂一點編程,信息化從自身工作開始,不用老總多花一分錢,反而可以提高工作效率。而且,原來公司里只有極少懂產品的人有排計劃的能力,現在用程序來實現,人人都會。
   中國的企業信息化,要么華而不實,更多企業是根本不知并不用。我在公司內進行企業信息化探索受諸多因素限制。無論如何,我會將我的經驗與大家分享,大家共同來探索有中國特色的企業信息化之路。

,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特左旗| 巴南区| 巴塘县| 上思县| 万安县| 台南县| 罗定市| 射洪县| 依安县| 三江| 客服| 防城港市| 枣庄市| 南通市| 南宫市| 韩城市| 岢岚县| 丰城市| 天峨县| 土默特右旗| 海丰县| 康乐县| 林西县| 襄城县| 美姑县| 郸城县| 临泉县| 石景山区| 龙井市| 缙云县| 闻喜县| 新龙县| 桂东县| 莫力| 玉环县| 茶陵县| 陆川县| 南城县| 茶陵县| 黄山市| 台北县|