唐風(fēng)帆 陳小鵬
摘 要:對于小微企業(yè)的庫存管理來講,往往面臨大型定制化軟件不靈活且費用較高, 而用簡單的excel表格來記錄卻功能不足的情況。因此利用EXCEL ?VBA程序,量身定制一些小型的庫存系統(tǒng),具有一定的實用性。
關(guān)鍵詞:EXCEL;進(jìn)銷存;小微企業(yè);VBA
由于小微企業(yè)具有規(guī)模小、個性化程度高等特點,因此在倉庫管理過程中,大型定制化的庫存軟件往往并不適用,且費用不菲。而利用EXCEL VBA編程功能,開發(fā)出適用小微企業(yè),既靈活且高效的庫存軟件,具有一定的現(xiàn)實意義。本文用EXCEL VBA編程功能,為某小微企業(yè)的物料倉庫,量身定制了一套庫存系統(tǒng)。經(jīng)該單位一年多的使用,取得了較好的應(yīng)用效果。因此將該設(shè)計方案代碼予以公開,給各位企業(yè)財務(wù)人員參考,并歡迎大家批評指正。
一、系統(tǒng)架構(gòu)介紹
本系統(tǒng)最大的特點為:不需出入庫單等一系列復(fù)雜的EXCEL表格,直接用一個物料清單加一個彈出窗口,就完成了物料的出入庫核算工作。
如圖1所示,物料清單表包括了該倉庫所有物料名稱。操作員只需在找到被操作物料,即可彈出一個操作窗口,其中可以錄入出入庫等信息。待信息錄入完成后,在窗口中點擊“確認(rèn)輸入”,就可以把錄入的信息保持到專門的表格中(圖2)進(jìn)行統(tǒng)一保存。
二、系統(tǒng)的具體設(shè)計
1.彈出窗體設(shè)計
彈出窗體是整個系統(tǒng)的核心,所有庫存操作都是在該窗體中實現(xiàn)。因此首先需要在VBA編輯器中插入一個窗體,并在窗體上安置各種控件。該彈出窗體的具體布局見圖3,具體的控件類型和控件名稱見表1。
2. 彈出窗體初始化程序設(shè)計
接下來為該窗體設(shè)計的設(shè)計初始化程序,其主要目的是為窗體上的控件賦予初始值,其中操作類型的初始值為“領(lǐng)用、入庫、退貨”; 領(lǐng)用人和使用地點的初始值,分別來自特定的工作表區(qū);年月日的初始值默認(rèn)取當(dāng)天系統(tǒng)日期。具體代碼如下:
Private Sub UserForm_Activate()
'對操作類型下拉框的數(shù)值設(shè)置
cmb操作類型.AddItem "領(lǐng)用"
cmb操作類型.AddItem "入庫"
cmb操作類型.AddItem "退貨"
'對物料明細(xì)文字框填充數(shù)據(jù)
txb明細(xì).Text = ActiveSheet.Cells(Selection.Row, 1) & "-" & ActiveSheet.Cells(Selection.Row, 2)
'添加領(lǐng)用人的下拉框數(shù)據(jù)
For i = 2 To Worksheets("人物地點").Cells(Rows.Count, 1).End(xlUp).Row
cmb領(lǐng)用人.AddItem Worksheets("人物地點").Cells(i, 1)
Next i
'添加使用地點的下拉框數(shù)據(jù)
For i = 2 To Worksheets("人物地點").Cells(Rows.Count, 3).End(xlUp).Row
cmb使用地點.AddItem Worksheets("人物地點").Cells(i, 3)
Next i
'添加年月日的下拉框數(shù)據(jù)
For i = 2016 To 2030
cmb年.AddItem i
Next i
For i = 1 To 12
cmb月.AddItem i
Next i
For i = 1 To 31
cmb日.AddItem i
Next i
cmb年.Value = Year(Date)
cmb月.Value = Month(Date)
cmb日.Value = Day(Date)
End Sub
3. 命令按鈕代碼設(shè)計
按照系統(tǒng)的設(shè)計邏輯,用戶只需要在窗體上輸入庫存操作信息,然后點擊“確認(rèn)輸入”,就可把輸入的信息,導(dǎo)入到個名為“數(shù)據(jù)庫”的EXCEL表進(jìn)行統(tǒng)一保存?!按_認(rèn)輸入”按鈕具體代碼如下:
Private Sub cmd確認(rèn)輸入_Click()
Dim x As Integer
x = Worksheets("數(shù)據(jù)庫").Cells(Rows.Count, 1).End(xlUp).Row + 1 ?'找到最新空白行
Worksheets("數(shù)據(jù)庫").Cells(x, 1) = cmb年.Value ? '導(dǎo)入年
Worksheets("數(shù)據(jù)庫").Cells(x, 2) = cmb月.Value ? '導(dǎo)入月
Worksheets("數(shù)據(jù)庫").Cells(x, 3) = cmb日.Value ? '導(dǎo)入日
Worksheets("數(shù)據(jù)庫").Cells(x, 4) = cmb操作類型.Value ? '導(dǎo)入操作類型
Worksheets("數(shù)據(jù)庫").Cells(x, 5) = Left(txb明細(xì).Value, 5) '導(dǎo)入物料編碼
Worksheets("數(shù)據(jù)庫").Cells(x, 6) = Mid(txb明細(xì).Value, 7, 20) '導(dǎo)入物料名稱
Worksheets("數(shù)據(jù)庫").Cells(x, 7) = txb數(shù)量.Value ? ? '導(dǎo)入數(shù)量
Worksheets("數(shù)據(jù)庫").Cells(x, 8) = cmb領(lǐng)用人.Value ? ? '導(dǎo)入領(lǐng)用人
Worksheets("數(shù)據(jù)庫").Cells(x, 9) = cmb使用地點.Value ? ? '導(dǎo)入使用地點
Worksheets("數(shù)據(jù)庫").Cells(x, 10) = txb其他說明.Value ? ? '導(dǎo)入其他說明
Unload frm錄入
End Sub
4. 窗體調(diào)用代碼設(shè)計
窗體調(diào)用方式是該系統(tǒng)的最大的創(chuàng)新點,傳統(tǒng)的庫存系統(tǒng)都在操作窗口輸入物料名稱,而該系統(tǒng)是直接在物料表上點擊彈出操作窗口,同時自動把物料名稱等信息帶出來,這樣極大的方便了倉庫人員的操作,具體代碼如下:
Sub 調(diào)用窗體()
If Selection.Cells.Count > 1 Then ? ? ' 檢查是否只選擇了一個單元格
MsgBox "只能選擇一個單元格", vbCritical, "警告"
Exit Sub
End If
Dim x As Integer ? ? ? ? ? ? ? ? ? ? ?'檢查是否選擇了有效行
x = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
If Selection.Row = 1 Or Selection.Row > x Then
MsgBox "選擇有效行", vbCritical, "警告"
Exit Sub
End If
frm錄入.Show ? '顯示窗體
End Sub
三、系統(tǒng)總結(jié)
由于篇幅的限制,該文只闡述了庫存系統(tǒng)的核心部分,后續(xù)庫存報表的匯總和分析,沒有進(jìn)行說明。因為該系統(tǒng)采取的是物料清單加彈出窗口的方式,因此首先保證了所有的物料都是統(tǒng)一的編碼;同時每一次窗口操作,最終都導(dǎo)入到數(shù)據(jù)庫文件統(tǒng)一保存,又保證了所有的庫存數(shù)據(jù)都是標(biāo)準(zhǔn)格式。在此基礎(chǔ)上,后續(xù)進(jìn)行數(shù)據(jù)透視表或圖表加工,是極其簡便的,因此該文就不作過多的詮釋。該系統(tǒng)的不足之處在于,由于該單位的物料管理采取的是個別辨認(rèn)法,因此如果是采取先進(jìn)先出或者加權(quán)平均進(jìn)行物料核算的單位,需要對代碼進(jìn)行一定程度的修改。
參考文獻(xiàn):
[1] 侯志才: 《基于EXCEL的進(jìn)銷存信息管理系統(tǒng)構(gòu)建》,載于《財會月刊》2015年第25期,第71-72頁
[2] 蘇術(shù)鋒: 《基于Excel VBA進(jìn)銷存信息系統(tǒng)開發(fā)》,載于《中國管理信息化》2011年第15期,第3-4頁