|
在电商仓库工作多年,发现退货至少占了仓库工作的20%;其中“退货上架和错拣逆还”都比较让人烦恼。
公司用的仓储管理系统是巨沃WMS,退货上架这一块还没有比较好的人性化的操作模式;
自己手写了一个用于“退货上架”管理的Excel版本表格,制作方法包括三个小部分,写在下面的文章里了;
其中有:使用VBA连接sql数据库、借助Excel实现朗读、窗体制作等功能设计;具体见下文,请各位雅正!
VBA实战:电商仓库“错拣逆还/散货上架”管理表格(上讲--窗体样式设计)
今天开始做一个电商仓储内部实战小项目:错拣逆还/退货上架
做仓库一般会用到OMS和WMS或者其它的很多很多的ERP系统,有些系统中集成了错拣逆还/退货上架;
但是总感觉没有那么人性化,或者说不够方便;现在就跟我来一起DIY一个吧;
运行环境:
服务器:windows2008 r2 、SQL SERVER2008(我这里用的是2008R2),如果不能连接服务器,则需要自已手动制作对应表;
PC:XP系统及以上,OFFICE2007及以上版本皆适应
工作环境:带序号的拣货车一辆 +任意扫描枪一把(最好是无线的方便采集)
工作场景:
1、我们工作场景是把待上架的商品一件一件按任意顺序摆放在拣货车上
2、按拣货车上的序号依次扫描每一件商品、得到每一件商品的库位以及拣货车上的序号信息
3、按库位号排序、打印出上架单
4、操作人员拿上架单以库位顺序依次去上架(有条件上PDA的可以直接带着PDA做入库上架)
以上老仓库-er可以选择性观看,以下讲VBA实现:
1、创建任意excel表:按alt+F11进入开发设计模式
2、新建窗体,对照如下样式划一个简易的操作窗口
三个文本框命名“条形码:sku、库位:whid、数量:nCount”
3、主要的功能都写在按钮中
这里主要就是简易的窗体样式设计,接下来中讲就具体说一说功能的实现了
VBA实战:电商仓库“错拣逆还/散货上架”管理表格(中讲--主要程序设计)
接上讲-直接写功能实现
一、连接数据库
可以直接参考我写的vba连接sql,只需要修改一下查询的sql语句就可以了;
此部分直接写在模块中,记得引用库;以下直接贴出:
- '工具-引用--by OcarinaZhang
- 'Microsoft ActiveX Data Objects 2.8 Libary
- 'Microsoft ActiveX Data Objects Record我s 2.8 Libary
- 'Microsoft ADO Ext.2.8 For Dll and Security
- 'Microsoft Forms 2.0 Object Libary
- Public cat As New ADOX.Catalog
- Public Conn As New ADODB.Connection
- Public rs As New ADODB.Recordset
- Public Strsql As String
- '打开连接
- Public Sub OpenSql()
- If Conn.State = 1 Then Conn.Close
- If Conn.State = 0 Then
- Conn.Open "provider=sqloledb;server=192.168.1.254(数据库的IP地址,此地址可以是公网IP实现远程访问);database=数据库名称;uid=登录数据库的帐号;pwd=登录密码;"
- End If
- End Sub
- '关闭连接
- Public Sub CloseConn()
- rs.Close
- Conn.Close
- End Sub
- '查询设计
- Public Sub SelectView(sku As String)
- '以下是在数据库中以采集的条形码查询库位whid,建议写成存储过程,在VBA中直接调用
- Strsql = "select '" & sku & "' as inco,whid from inwh where inco='" & sku & "'"
- OpenSql '打开连接
- rs.Open Strsql, Conn '使用连接
- Worksheets("sys").Cells.Clear
- Dim i As Integer '写入到SYS表
- For i = 0 To rs.Fields.Count - 1
- Worksheets("sys").Cells(1, i + 1).Value = rs.Fields(i).Name
- Next i
- Worksheets("sys").Cells(2, 1).CopyFromRecordset rs
- CloseConn '关闭连接
- End Sub
复制代码 数据库部分完成,这一段是写入在模块中的,方便直接调用。
二、确认按钮代码
- '确认按钮--by OcarinaZhang
- Private Sub CommandButton1_Click()
- Dim cnt%, i%, str$, whco$
- '加入朗读提示音
- Dim oSp As Object
- Set oSp = CreateObject("SAPI.SpVoice")
- oSp.Rate = 3 '朗读速度
- Dim rng As Range
- Dim rngg As Range
- If nCount.Value = "" Then
- nCount.Value = 0
- End If
- 'begin
- str = UCase(sku.Value)
- If str = "YY" Then '加入打印码YY,通常打印张贴于拣货车上作最后的快捷打印 这个IF块也可以单独写成printSub打印子过程,赋给打印按钮,此处直接使用call printSub调用也可
- oSp.Speak "打印上架单,请稍候"
- '给标题
- Worksheets("sheet1").[a1].Value = "库位名称"
- Worksheets("sheet1").[b1].Value = "拣货车序号"
- '排序:库位升序排序,有标题行
- Range("a:b").Sort Range("a1"), xlAscending, Header:=xlYes
- '确认打印范围并打印
- i = Worksheets("sheet1").[a65535].End(xlUp).Row
- Worksheets("sheet1").Range("a1:b" & i).PrintOut
- '清空sheet1数据
- Worksheets("sheet1").Cells.Clear
- nCount.Value = ""
- sku.Value = ""
- whid.Value = ""
- sku.Value = ""
- sku.SetFocus
- Exit Sub
- End If
- Call SelectView(sku) '查询
- If Not Worksheets("sys").[a2] = "" Then
- cnt = nCount.Value + 1
- nCount.Value = cnt
- whco = Worksheets("sys").[b2].Value
- whid.Value = whco
- Set rngg = Worksheets("sheet1").Range("A:A").Find(whco, lookat:=xlWhole)
- If Not rngg Is Nothing Then '库位存在
- rngg.Offset(0, 1).Value = rngg.Offset(0, 1).Value & "," & cnt
- Else
- Set rng = Worksheets("sheet1").[a65535].End(xlUp)
- rng.Offset(1, 0).Value = Worksheets("sys").[b2].Value
- rng.Offset(1, 1).Value = cnt
- End If
- oSp.Speak cnt '可以用其它提示音函数替换,不过这个可以和拣货车上的序号做复核确认
- Else
- Call errorsec '条码不存在则报错,通常由扫描枪乱码导致:可替换:oSp.Speak "错误,请重试"
- End If
- sku.SetFocus '选中采集框,可以用 sku.value="" ,sku.setfocus替换这三行
- sku.SelStart = 0
- sku.SelLength = Len(sku.Value)
- End Sub
复制代码 确认按钮完成。
1、右击窗体设置 TAB键顺序
2、确认按钮属性设置
3、注意设置扫描枪扫描之后带Enter回车
注:确认按钮是程序主入口,确认按钮写完了,就可以测试了。
测试图如下:
A列是库位,B列对应错拣车上的序号;打印之后会排序;操作员以最优路径依次上架商品直至结束;
不过这样打印出来没有边框线。
可以直接在sheet表中的页面设置:网格线-->打印勾选上(当然也可以使用vba代码range("a1:b" & i).Borders.Linestyle=xlcontinuous来设置它,i需要先计算出来)
另,如果相同库位的商品比较多、B列比较拥挤;所有通常情况下会把B列的单元格格式设置为“自动换行”:
VBA实战:电商仓库“错拣逆还/散货上架”管理表格(下讲--细节注意事项)
中讲已经完成了主程序的设计,这一讲说一下其它功能按钮的实现和一些小细节;
一、功能按钮:
- '显示按钮
- Private Sub CommandButton2_Click()
- Application.Visible = True
- End Sub
- '隐藏按钮 --防止不小心点击,直接隐藏工作表
- Private Sub CommandButton3_Click()
- Application.Visible = FalseUserForm1.Show
- End Sub
- '退出不保存按钮
- Private Sub CommandButton4_Click()
- Application.Quit
- ThisWorkbook.Close False
- End Sub
复制代码 二、通常我们在打开这个表格的时候,只希望显示采集窗口,而不显示工作表
所以我们可以直接在workbook_open事件中加入以下代码:
- Private Sub Workbook_Open()
- Application.Visible = False
- UserForm1.Show vbModeless
- End Sub
复制代码
三、提示音模块
我们在VBE环境下直接插入模块并写入以下代码:
- Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwflags As Long) As Long
- '错误提示音
- Sub errorsec()
- PlaySound ThisWorkbook.Path + "\error.wav", 0&, &H1
- End Sub
- '通过提示音
- Sub pass()
- PlaySound ThisWorkbook.Path + "\pass.wav", 0&, &H1
- End Sub
- '其它提示音
- Sub other()
- PlaySound ThisWorkbook.Path + "\other.wav", 0&, &H1
- End Sub
复制代码 当然,要使用这些提示音效;我们必须在此excel文件存放的同目录(文件夹)中存放同名的wav声音文件;
这样在程序调用的时候,就可以直接调用了;
如此,整个退货上架的Excel表格程序就设计完成了;如果还想加入某些小功能;可以再酌情添加,不再赘述。 |
|