库管易

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

查看: 28273|回复: 12

电商仓库,错拣逆还/退货上架Excel管理表格的VBA设计教程

[复制链接]
电商仓库工作多年,发现退货至少占了仓库工作的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、新建窗体,对照如下样式划一个简易的操作窗口
电商仓储错拣逆还及散货上架01.png
三个文本框命名“条形码:sku、库位:whid、数量:nCount”
3、主要的功能都写在按钮中

这里主要就是简易的窗体样式设计,接下来中讲就具体说一说功能的实现了

VBA实战:电商仓库“错拣逆还/散货上架”管理表格(中讲--主要程序设计
接上讲-直接写功能实现
一、连接数据库
可以直接参考我写的vba连接sql,只需要修改一下查询的sql语句就可以了;
此部分直接写在模块中,记得引用库;以下直接贴出:
  1. '工具-引用--by OcarinaZhang
  2. 'Microsoft ActiveX Data Objects 2.8 Libary
  3. 'Microsoft ActiveX Data Objects Record我s 2.8 Libary
  4. 'Microsoft ADO Ext.2.8 For Dll and Security
  5. 'Microsoft Forms 2.0 Object Libary
  6. Public cat As New ADOX.Catalog
  7. Public Conn As New ADODB.Connection
  8. Public rs As New ADODB.Recordset
  9. Public Strsql As String            

  10. '打开连接
  11. Public Sub OpenSql()
  12. If Conn.State = 1 Then Conn.Close
  13. If Conn.State = 0 Then
  14.     Conn.Open "provider=sqloledb;server=192.168.1.254(数据库的IP地址,此地址可以是公网IP实现远程访问);database=数据库名称;uid=登录数据库的帐号;pwd=登录密码;"
  15. End If
  16. End Sub

  17. '关闭连接
  18. Public Sub CloseConn()
  19. rs.Close
  20. Conn.Close
  21. End Sub

  22. '查询设计
  23. Public Sub SelectView(sku As String)
  24. '以下是在数据库中以采集的条形码查询库位whid,建议写成存储过程,在VBA中直接调用
  25. Strsql = "select '" & sku & "' as inco,whid from inwh where inco='" & sku & "'"
  26. OpenSql '打开连接
  27. rs.Open Strsql, Conn '使用连接
  28. Worksheets("sys").Cells.Clear
  29. Dim i As Integer     '写入到SYS表
  30. For i = 0 To rs.Fields.Count - 1
  31.     Worksheets("sys").Cells(1, i + 1).Value = rs.Fields(i).Name
  32. Next i
  33. Worksheets("sys").Cells(2, 1).CopyFromRecordset rs
  34. CloseConn '关闭连接
  35. End Sub
复制代码
数据库部分完成,这一段是写入在模块中的,方便直接调用。

二、确认按钮代码
  1. '确认按钮--by OcarinaZhang
  2. Private Sub CommandButton1_Click()
  3. Dim cnt%, i%, str$, whco$
  4. '加入朗读提示音
  5. Dim oSp As Object
  6. Set oSp = CreateObject("SAPI.SpVoice")
  7. oSp.Rate = 3    '朗读速度
  8. Dim rng As Range
  9. Dim rngg As Range
  10. If nCount.Value = "" Then
  11.     nCount.Value = 0
  12. End If
  13. 'begin
  14. str = UCase(sku.Value)
  15. If str = "YY" Then    '加入打印码YY,通常打印张贴于拣货车上作最后的快捷打印 这个IF块也可以单独写成printSub打印子过程,赋给打印按钮,此处直接使用call printSub调用也可
  16.     oSp.Speak "打印上架单,请稍候"
  17.     '给标题
  18.     Worksheets("sheet1").[a1].Value = "库位名称"
  19.     Worksheets("sheet1").[b1].Value = "拣货车序号"
  20.     '排序:库位升序排序,有标题行
  21.     Range("a:b").Sort Range("a1"), xlAscending, Header:=xlYes
  22.     '确认打印范围并打印
  23.     i = Worksheets("sheet1").[a65535].End(xlUp).Row
  24.     Worksheets("sheet1").Range("a1:b" & i).PrintOut
  25.     '清空sheet1数据
  26.     Worksheets("sheet1").Cells.Clear
  27.     nCount.Value = ""
  28.     sku.Value = ""
  29.     whid.Value = ""
  30.     sku.Value = ""
  31.     sku.SetFocus
  32.     Exit Sub
  33. End If
  34. Call SelectView(sku)   '查询
  35. If Not Worksheets("sys").[a2] = "" Then
  36.     cnt = nCount.Value + 1
  37.     nCount.Value = cnt
  38.     whco = Worksheets("sys").[b2].Value
  39.     whid.Value = whco
  40.     Set rngg = Worksheets("sheet1").Range("A:A").Find(whco, lookat:=xlWhole)
  41.     If Not rngg Is Nothing Then   '库位存在
  42.         rngg.Offset(0, 1).Value = rngg.Offset(0, 1).Value & "," & cnt
  43.     Else
  44.         Set rng = Worksheets("sheet1").[a65535].End(xlUp)
  45.         rng.Offset(1, 0).Value = Worksheets("sys").[b2].Value
  46.         rng.Offset(1, 1).Value = cnt
  47.     End If
  48.     oSp.Speak cnt  '可以用其它提示音函数替换,不过这个可以和拣货车上的序号做复核确认
  49. Else
  50.     Call errorsec       '条码不存在则报错,通常由扫描枪乱码导致:可替换:oSp.Speak "错误,请重试"
  51. End If

  52. sku.SetFocus        '选中采集框,可以用 sku.value="" ,sku.setfocus替换这三行
  53. sku.SelStart = 0
  54. sku.SelLength = Len(sku.Value)

  55. End Sub
复制代码
确认按钮完成。

1、右击窗体设置 TAB键顺序
电商仓储错拣逆还及散货上架02.png

2、确认按钮属性设置
电商仓储错拣逆还及散货上架03.png

3、注意设置扫描枪扫描之后带Enter回车
注:确认按钮是程序主入口,确认按钮写完了,就可以测试了。
测试图如下:
电商仓储错拣逆还及散货上架04.png
A列是库位,B列对应错拣车上的序号;打印之后会排序;操作员以最优路径依次上架商品直至结束;
不过这样打印出来没有边框线。
可以直接在sheet表中的页面设置:网格线-->打印勾选上(当然也可以使用vba代码range("a1:b" & i).Borders.Linestyle=xlcontinuous来设置它,i需要先计算出来)

另,如果相同库位的商品比较多、B列比较拥挤;所有通常情况下会把B列的单元格格式设置为“自动换行”:
电商仓储错拣逆还及散货上架05.png
电商仓储错拣逆还及散货上架06.png

VBA实战:电商仓库“错拣逆还/散货上架”管理表格(下讲--细节注意事项
中讲已经完成了主程序的设计,这一讲说一下其它功能按钮的实现和一些小细节;
一、功能按钮:
  1. '显示按钮
  2. Private Sub CommandButton2_Click()
  3. Application.Visible = True
  4. End Sub
  5. '隐藏按钮  --防止不小心点击,直接隐藏工作表
  6. Private Sub CommandButton3_Click()
  7. Application.Visible = FalseUserForm1.Show
  8. End Sub
  9. '退出不保存按钮
  10. Private Sub CommandButton4_Click()
  11. Application.Quit
  12. ThisWorkbook.Close False
  13. End Sub
复制代码
二、通常我们在打开这个表格的时候,只希望显示采集窗口,而不显示工作表
所以我们可以直接在workbook_open事件中加入以下代码:
  1. Private Sub Workbook_Open()
  2.   Application.Visible = False
  3.   UserForm1.Show vbModeless
  4. End Sub
复制代码
电商仓储错拣逆还及散货上架07.png

三、提示音模块
我们在VBE环境下直接插入模块并写入以下代码:
  1. Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwflags As Long) As Long
  2. '错误提示音
  3. Sub errorsec()
  4.     PlaySound ThisWorkbook.Path + "\error.wav", 0&, &H1
  5. End Sub
  6. '通过提示音
  7. Sub pass()
  8.     PlaySound ThisWorkbook.Path + "\pass.wav", 0&, &H1
  9. End Sub
  10. '其它提示音
  11. Sub other()
  12.     PlaySound ThisWorkbook.Path + "\other.wav", 0&, &H1
  13. End Sub
复制代码
当然,要使用这些提示音效;我们必须在此excel文件存放的同目录(文件夹)中存放同名的wav声音文件;
电商仓储错拣逆还及散货上架08.png
这样在程序调用的时候,就可以直接调用了;

如此,整个退货上架的Excel表格程序就设计完成了;如果还想加入某些小功能;可以再酌情添加,不再赘述。
回复

使用道具 举报

哇唔,小白我完全看不懂。
回复 支持 反对

使用道具 举报

 楼主| 显示全部楼层
11183 发表于 2019-12-17 16:12
哇唔,小白我完全看不懂。
回复 支持 反对

使用道具 举报

厉害厉害,大神呀
回复 支持 反对

使用道具 举报

 楼主| 显示全部楼层

共同交流学习
回复 支持 反对

使用道具 举报

来自手机 显示全部楼层
摩拜大神,望码兴叹中。。。。。。
回复 支持 反对

使用道具 举报

牛人,
可惜我们每天累的跟狗一样,实在是没时间没精力学这玩意儿
就算学了,老板也不一定敢让你用这个呀
回复 支持 反对

使用道具 举报

来自手机 显示全部楼层
我感觉您是不是有点过界了。
回复 支持 反对

使用道具 举报

来自手机 显示全部楼层
我也是做表一起退,减少退货路径,但是没有这么全面 ,而且表相对要简单很多。先借鉴研究一下
回复 支持 反对

使用道具 举报

像我这种技术小白  指导VBA的好处 但是不会编程  我连OFFICE都是了解的皮毛   看来我还得在论坛里多看看书
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|仓库管理网

GMT+8, 2024-4-25 12:59

Powered by 库管易

KuGuanYi.Com

快速回复 返回顶部 返回列表