使用EXCEL+超市扫码枪自制资质文件借阅管理系统.docx
- 文档编号:27326421
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:26
- 大小:1.73MB
使用EXCEL+超市扫码枪自制资质文件借阅管理系统.docx
《使用EXCEL+超市扫码枪自制资质文件借阅管理系统.docx》由会员分享,可在线阅读,更多相关《使用EXCEL+超市扫码枪自制资质文件借阅管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
使用EXCEL+超市扫码枪自制资质文件借阅管理系统
使用EXCEL2003+超市扫码枪自制资质文件借阅管理系统
前几天听群里的朋友聊起扫码枪的原理,使我恍然大悟,原来我想多了,其实扫码枪的原理很简单,就是模拟键盘输入,进一步说就是模拟键盘输入一串数字,这串数字正是激光读出的条码号码。
听着觉得很好玩。
于是有空就去买了一个,花了200元,后来淘宝了一下,发现亏了。
回来自己摆弄了摆弄,发现真的挺爽,于是我决定把它用到工作中,再给自己偷点懒,想来想去,公司也不是零售企业,也不需要大量出入库,怎么用它给自己偷点懒呢?
我想,干脆做一个文件借阅系统吧,每次大家来借公司的各种资质,都要来我们部门要,然后我们要登记都借了那些东西,最后借阅人还要签字,然后还的时候也是这样登记啊,签字啊,不但烦琐,还经常出现有时候忘了做借或者还的手续,到处找不到资质谁借走了没有还。
利用五一的假期,做一个简单的文件资质借阅系统,就当娱乐了。
首先就是设计流程。
1、要对两类事物进行编码,分别是人员的编码跟文件的编码。
我设计了如下规则:
人员编码规则:
人员编码由以下几个数据段组成,如“HR-000-0001”。
分为3个意义段。
前面的HR,代表了本公司人力资源,统一开头的字符,有助于为以后可能出现的程序识别类别做好预留标识,万一以后要分类,可以方便的用字符函数来处理读到的码。
后边的000代表预留区别标识,最大可以分000-999,这样1000个类。
最后的0001代表了员工编号,考虑到本公司不可能有1000人,所以4位就够了。
整个编号串长固定,分别是“2字符长度+3字符长度+4字符长度”,一共9个字符长度。
固定串长有助于批量条码生成程序的排版,也方便制作统一大小的条码牌,另外就是为人员编码提供了另外一个隐含属性,“长度=9”,为以后可能出现的数据挖掘处理做预留信息。
分3个意义段其实也是为了体现高内聚,低耦合的数据编码规则特点,为以后使用如MID()函数等做预留方便。
我的号码:
文件编码规则:
文件编码如:
“ZZ-ZHB-0000-000001”。
分为了4个意义段。
前边的“ZZ”代表了“资质”的缩写,以后还可能出现“WJ”,“DA”,“文件”“档案”的缩写。
第二部分的三个字母“ZHB”代表了综合部。
设计规则及意义同人员编码
同样,“0000”作为预留分类标识,“0000001”作为文件编号。
(文件数量自然比较多了,考虑到用EXCEL2003做数据表,数量不宜太多,就定100万份算了)。
文件条码粘贴效果:
定完编码规则后,就需要批量制作出条码了。
网上搜了一下,在excel中打印条码都是用那个控件,BarControl9.0
(不过自动生成时候遇到点麻烦。
说起来奇怪,添加控件后,原来写的VBA代码都不起作用了,仿佛被控件给中断了一样,只好再激活另外一个宏,把这个“僵硬”状态“挺”过去。
反正最后是可以运行了。
)然后设置属性,注意,这里这个控件有两个属性栏目,一个共有的,面向对象的产物,一个是私有的,自己特有的属性,设置如下图。
共有属性要设定LinkCell,这个就是条码的指向的,
后边的批量生成就要靠不断用程序更改这个连接的值来刷新,但是麻烦的事情又出现了,无论你怎么弄程序,条码就是不刷新。
后来又XX,有个高人说可以用控件的属性“Direction0”这里做文章,不然的话无法刷新,原因他也不清楚。
反正也不深究了,知道这个关键点就足够了。
画完控件设完属性,就要写一个方法驱动它自动刷新,这里我再做一个按扭控件。
代码写成这样:
执行后,条码就排好版了,(当然,打印区域已经设定好固定区域,这样每次生成的就都是按照A4排好版的了,另外,条码数据写在B列里)如图
打印在不干胶上留者粘贴,粘贴之前别忘了用裁照片的铡刀切好。
这里的条码设计,之所以用序号编码,是考虑到以后可能增加的文件及人员,这样只需要向后延续序号就可以了。
一目了然。
避免了使用名称编码带来重复可能。
接下来就是设计系统的程序,分以下几个步骤,首先是制数据表,类似于使用数据库编程的建立数据库。
我一共设计了4个表,分别是。
其中文件数据表这样设计列标:
做条码与文件名称的映射数据库使用。
后边的两列好象没什么用,懒得删除了,留做以后预备吧。
总数据表这样设计:
相当于流水帐,每次的借或者还的信息都有记录,显示在这里,且这里设计了特别的规则,就是“一人做事一人当”就是说,谁借的文件,就必须谁来还,别人是不能还他借的文件的,有利于反溯手续流程。
这就严肃了一种追责的制度。
如果文件丢失,可以很方便的查询到文件最后是在谁手里。
程序里遇到这种情况会有相应的提示。
阻止非借阅人还文件。
并提示联系借阅人某某使用自己的身份条码来归还。
如图
人员数据表这样设计:
做条码与人名的映射数据库使用。
条码数据与人员姓名横向对列,这也体现了数学里最普遍的思想,“映射”与“变换”。
然后就是设计用户使用界面,设计原则是,尽可能的连带触发各控件的方法调用,尽量避免用户扫码的同时还要操作鼠标点来点去。
这里,表的保存也是连带触发,用户除了开始时候确定是“借”还是“还”,还是“查阅”需要点击标签控件外,不用再次点击任何控件,控件的得到焦点被设计成都是按照流程自动转移。
用户界面如下:
借阅界面
归还界面
查询界面
全部代码如下:
其实不是所有的编程都必须要面向对象,面向对象的做,有时候这种小事,面向过程编程就可以处理的很好。
PrivateSubcbx_chayueshaixuan_Change()
list_chayue.Clear
Fori=2ToSheets("文件数据表").Cells(65536,"a").End(xlUp).Row
Ifcbx_chayueshaixuan.Text="全部"Then
list_chayue.AddItemSheets("文件数据表").Cells(i,2).Value
EndIf
Ifcbx_chayueshaixuan.Text="未借出"Then
IfCStr(Sheets("文件数据表").Cells(i,4).Value)="未借出"Then
list_chayue.AddItemSheets("文件数据表").Cells(i,2).Value
EndIf
EndIf
Next
Ifcbx_chayueshaixuan.Text="已借出"Then
Forj=2ToSheets("总记录表").Cells(65536,"a").End(xlUp).Row
IfSheets("总记录表").Cells(j,4).Value<>""AndSheets("总记录表").Cells(j,5).Value=""Then
list_chayue.AddItemSheets("总记录表").Cells(j,2).Value&",由["&Sheets("总记录表").Cells(j,4).Value&"]于["&Sheets("总记录表").Cells(j,3).Value&"]借出尚未归还"
EndIf
Next
EndIf
EndSub
PrivateSubcmd_c_bumen_Click()
IfMultiPage1.Value=0Then
tx_jy_ygname.SetFocus
EndIf
IfMultiPage1.Value=1Then
tx_gh_ygname.SetFocus
EndIf
IfMultiPage1.Value=2Then
cbx_chayueshaixuan.SetFocus
cbx_chayueshaixuan.Text="未借出"
EndIf
EndSub
PrivateSubcmd_gh_fanhui_Click()
Callclearkj
EndSub
PrivateSubcmd_jy_fanhui_Click()
Callclearkj
EndSub
PrivateSubMultiPage1_Change()
IfMultiPage1.Value=0Then
tx_jy_ygname.SetFocus
EndIf
IfMultiPage1.Value=1Then
tx_gh_ygname.SetFocus
EndIf
EndSub
PrivateSubtx_gh_wjname_Change()
IfLen(tx_gh_wjname.Text)=18Then
wjcode=tx_gh_wjname.Text
Fori=2ToSheets("文件数据表").Cells(65536,"a").End(xlUp).Row
IfCStr(Sheets("文件数据表").Cells(i,1).Value)=wjcodeThen
'------------
IfCStr(Sheets("文件数据表").Cells(i,1).Value)=wjcodeAndCStr(Sheets("文件数据表").Cells(i,4).Value)="已借出"AndCStr(Sheets("文件数据表").Cells(i,5).Value)<>lab_gh_ygname.CaptionThen
MsgBox"文件由其他人借出!
请联系"&Sheets("文件数据表").Cells(i,5).Value&",请其本人做归还手续!
"
ExitSub
EndIf
'============
'------------
IfCStr(Sheets("文件数据表").Cells(i,1).Value)=wjcodeAndCStr(Sheets("文件数据表").Cells(i,4).Value)="未借出"Then
MsgBox"文件未其他人借出!
无需归还!
"
ExitSub
EndIf
'============
t=1'搜寻状态
tx_gh_wjming.Text=Sheets("文件数据表").Cells(i,2).Value
'------------------
Sheets("文件数据表").Cells(i,4).Value="未借出"
Sheets("文件数据表").Cells(i,5).Value=""
Sheets("文件数据表").Cells(i,6).Value=""
'==================
'------------------
Forghzjl=2ToSheets("总记录表").Cells(65536,"a").End(xlUp).Row
IfCStr(Sheets("总记录表").Cells(ghzjl,1).Value)=tx_gh_wjname.TextAndCStr(Sheets("总记录表").Cells(ghzjl,4).Value)=lab_gh_ygname.CaptionAndCStr(Sheets("总记录表").Cells(ghzjl,5).Value)=""Then
Sheets("总记录表").Cells(ghzjl,5).Value=Date
EndIf
Next
'==================
lab_gh_zt.Caption="操作成功"
lbx_gh_mx.AddItemSheets("文件数据表").Cells(i,2).Value
ThisWorkbook.Save
'------------------
tx_gh_wjname.Text=""
'==================
ExitFor
EndIf
Next
Ifi>=Sheets("文件数据表").Cells(65536,"a").End(xlUp).RowAndt=0Then
tx_gh_wjming.Text="扫描失败!
"
lab_gh_zt.Caption="操作失败"
'-------清除模块
ExitSub
EndIf
EndIf
EndSub
PrivateSubtx_gh_ygname_Change()
IfLen(tx_gh_ygname.Text)=11Then
ygcode=tx_gh_ygname.Text
Fori=2ToSheets("人员数据").Cells(65536,"a").End(xlUp).Row
IfCStr(Sheets("人员数据").Cells(i,1).Value)=ygcodeThen
t=1'搜寻状态
lab_gh_ygname=Sheets("人员数据").Cells(i,2).Value
tx_gh_wjname.SetFocus
ExitFor
EndIf
Next
Ifi>=Sheets("人员数据").Cells(65536,"a").End(xlUp).RowAndt=0Then
lab_gh_ygname="找不到人员!
"
lab_gh_zt.Caption="操作失败"
'-------清除模块
ExitSub
EndIf
EndIf
EndSub
PrivateSubtx_jy_wjname_Change()
IfLen(tx_jy_wjname.Text)=18Then
wjcode=tx_jy_wjname.Text
Fori=2ToSheets("文件数据表").Cells(65536,"a").End(xlUp).Row
'---------------
IfCStr(Sheets("文件数据表").Cells(i,1).Value)=wjcodeAndCStr(Sheets("文件数据表").Cells(i,4).Value)="已借出"Then
MsgBox"文件尚未归还!
请联系"&Sheets("文件数据表").Cells(i,5).Value&",请其做完归还手续后再次借阅!
"
ExitSub
EndIf
'===============
IfCStr(Sheets("文件数据表").Cells(i,1).Value)=wjcodeThen
t=1'搜寻状态
tx_jy_wenjianming.Text=Sheets("文件数据表").Cells(i,2).Value
'------------------
Sheets("文件数据表").Cells(i,4).Value="已借出"
Sheets("文件数据表").Cells(i,5).Value=lab_jy_ygname.Caption
Sheets("文件数据表").Cells(i,6).Value=Date
'==================
'------------------
Sheets("总记录表").Cells(Sheets("总记录表").Cells(65536,"a").End(xlUp).Row+1,4).Value=lab_jy_ygname.Caption
Sheets("总记录表").Cells(Sheets("总记录表").Cells(65536,"a").End(xlUp).Row+1,3).Value=Date
Sheets("总记录表").Cells(Sheets("总记录表").Cells(65536,"a").End(xlUp).Row+1,2).Value=Sheets("文件数据表").Cells(i,2).Value
Sheets("总记录表").Cells(Sheets("总记录表").Cells(65536,"a").End(xlUp).Row+1,1).Value=tx_jy_wjname.Text
'==================
lab_jy_zt.Caption="操作成功"
lbx_jy_mx.AddItemSheets("文件数据表").Cells(i,2).Value
ThisWorkbook.Save
tx_jy_wjname.SetFocus
'------------------
tx_jy_wjname.Text=""
'==================
ExitFor
EndIf
Next
Ifi>=Sheets("文件数据表").Cells(65536,"a").End(xlUp).RowAndt=0Then
tx_jy_wenjianming.Text="找不到文件!
"
lab_jy_zt.Caption="操作失败"
'-------清除模块
ExitSub
EndIf
EndIf
EndSub
PrivateSubtx_jy_ygname_Change()
IfLen(tx_jy_ygname.Text)=11Then
ygcode=tx_jy_ygname.Text
Fori=2ToSheets("人员数据").Cells(65536,"a").End(xlUp).Row
IfCStr(Sheets("人员数据").Cells(i,1).Value)=ygcodeThen
t=1'搜寻状态
lab_jy_ygname=Sheets("人员数据").Cells(i,2).Value
tx_jy_wjname.SetFocus
ExitFor
EndIf
Next
Ifi>=Sheets("人员数据").Cells(65536,"a").End(xlUp).RowAndt=0Then
lab_jy_ygname="找不到人员!
"
'------------
tx_jy_ygname.Text=""
tx_jy_ygname.SetFocus
'============
lab_jy_zt.Caption="操作失败"
'-------清除模块
ExitSub
EndIf
EndIf
EndSub
PrivateSubUserForm_Activate()
cbx_chayueshaixuan.AddItem"全部"
cbx_chayueshaixuan.AddItem"已借出"
cbx_chayueshaixuan.AddItem"未借出"
MultiPage1.Value=0
lab_jy_zt.Caption="操作状态"
tx_jy_ygname.SetFocus
EndSub
PrivateSubUserForm_Initialize()
cbx_chayueshaixuan.AddItem"全部"
cbx_chayueshaixuan.AddItem"已借出"
cbx_chayueshaixuan.AddItem"未借出"
MultiPage1.Value=0
lab_jy_zt.Caption="操作状态"
tx_jy_ygname.SetFocus
EndSub
还有清除模块的代码
Subclearkj()
'-------clear
Ifusermain.MultiPage1.Value=0Then
usermain.tx_jy_wjname.Text=""
usermain.tx_jy_ygname.Text=""
usermain.tx_jy_wenjianming.Text=""
usermain.lab_jy_zt.Caption="操作状态"
usermain.lbx_jy_mx.Clear
usermain.lab_jy_ygname.Caption="借阅人"
usermain.tx_jy_ygname.SetFocus
EndIf
Ifusermain.MultiPage1.Value=1Then
usermain.tx_gh_wjname.Text=""
usermain.tx_gh_ygname.Text=""
usermain.tx_gh_wjming.Text=""
usermain.lab_gh_zt.Caption="操作状态"
usermain.lbx_gh_mx.Clear
usermain.lab_gh_ygname.Caption="归还人"
usermain.tx_gh_ygname.SetFocus
EndIf
EndSub
实际使用的效果图如下:
借阅文件后显示本次借阅明细,成功借阅后,数据总表自动记录信息并自动保存
总表数据自动更新。
如下图
此时查询文件效果如图:
归还文件:
数据总表同样自动更改保存记录。
总结,通过简单的VBA代码,配合扫码枪,制作文件借阅系统,减少了借阅资质时候的登记签字手续,节省了办公时间,也方便了自己跟同事。
同时也规范了文件管理。
通过这次开发,不但使我熟悉了条码控件的使用,还使我联想到扫码枪其实还可以开发其他一些好玩的东西,比如进销存系统、文件清单生成器、考勤系统等等。
不过对编程技术倒没有任何提高,还是原来的经验进行数量堆叠罢了。
罗罗嗦嗦写了一堆,就当是无聊时候的一篇日记吧。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 EXCEL 超市 扫码枪 自制 资质 文件 借阅 管理 系统