ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 44731|回复: 117

[分享] 手把手教你定制属于自己的进销存软件

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-11 12:22 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
       鉴于上次帮朋友做的进销存软件,好多人私信给我,要密码,当时是朋友设置的,确实他也忘记了,实在抱歉,看到这么多爱学习的坛友,当初我也是从这里一步一步学习起来的,不管是为了用作工作,还是为了能更好的学习,这次我一步一步给大家分解简单的进销存的步骤。

1.首先,我们做进销存应该建立6个表,界面表,基础信息表, 入库单模板,出库单模板,进出明细表,库存汇总表  。简单的说这6是进销存的核心,当然还有各种的自定义的查询和汇总,这个可以自己慢慢练习。


1.png
2.png
3.png
5.png
6.png

进销存教程.rar

14.48 KB, 下载次数: 2862

评分

9

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-11 12:39 | 显示全部楼层
首先,我们来看下界面表的内容,我们建了几个图标的意思就是可以点击之后连接到对应的表里去
Sub 基础信息表()
Sheet2.Activate
End Sub
Sub 入库单模板()
Sheet3.Activate
End Sub
Sub 出库单模板()
Sheet4.Activate
End Sub
Sub 进出明细表()
Sheet5.Activate
End Sub
Sub 汇总表()
Sheet6.Activate
End Sub

Sub 返回()
Sheet1.Activate
End Sub


上面的代码是针对每个图标对应的宏,右键点击图标,选择  指定宏, 然后选择对应的  宏名称就可以了,一个一个选择完毕之后,这个界面的对应关系我们就算是做好了。有时间会给大家持续的更新。
2-1.png
2-2.png

进销存教程.rar

27.58 KB, 下载次数: 782

TA的精华主题

TA的得分主题

发表于 2018-12-11 12:39 | 显示全部楼层
本帖最后由 onlycxb 于 2018-12-11 15:17 编辑

标记一下标记一下标记一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-11 13:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
接上次,这次来做入库单和出库单的功能,
首先关于供应商这块的引用问题,当然可以用数据有效性来做,我这次是想用控件来做,首先我们插入一个ActiveX控件里面的,组合框,在sheet3的代码里面写入如下代码
PrivateSub ComboBox1_Change()
Sheet3.Range("b2")= ComboBox1.Value
End Sub
PrivateSub Worksheet_Activate()
ComboBox1.Clear
a = Sheet2.Range("g65536").End(xlUp).Row
  For b = 2 To a
  ComboBox1.AddItem Sheet2.Cells(b, 7)
  Next
End Sub
这样,我们每次要入库的时候就可以根据你基础信息表里的增删来自动提取。
数据录入也采用调用控件的形式,先插入一个列表框,进入属性里面,把columncount改成3,具体数字根据你的基础数据的行数
然后写入代码
Private Sub Worksheet_SelectionChange(ByValTarget As Range)
  arr = Sheet2.Range("a2:c" &Sheet2.Range("a65536").End(xlUp).Row)
If Target.Row >= 4 And Target.Row <= 16And Target.Column = 2 Then
    ListBox1.List = arr
    ListBox1.Visible = True
    ListBox1.Left = ActiveCell(1, 2).Left
    ListBox1.Top = ActiveCell(1, 2).Top
   Else
   ListBox1.Visible = False
End If
End Sub
PrivateSub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
aa =ListBox1.ListIndex
ActiveCell = ListBox1.List(aa, 0)
ActiveCell.Offset(0, 1) = ListBox1.List(aa, 1)
ActiveCell.Offset(0, 2) = ListBox1.List(aa, 2)
ActiveCell.Offset(0, -1) = ActiveCell.Row - 3
ListBox1.Visible = False
End Sub
上面是入库单的制作,出库单和入库单一样,唯一区别就是引用供应商列和车间列的区别

进销存教程.rar

43.24 KB, 下载次数: 781

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-11 14:41 | 显示全部楼层
接着上一步的继续来更新,上一步设置了入库单和出库单的选择录入问题
下面来说一下 入库单和出库单的数据保存转移问题

在 入库单和出库单分别插入两个按钮,然后再模块里写入一下代码
Sub 入库单录入()
a = Sheet3.Range("a65536").End(xlUp).Row
If Sheet3.Range("b2") = "" Then
   MsgBox "请选择录入供应商名称!"
   Exit Sub
End If
If a < 4 Then
   MsgBox "请录入数据后,再点击录入按钮!"
   Exit Sub
Else
    For c = 4 To a
       b = Sheet5.Range("b65536").End(xlUp).Row + 1
       Sheet5.Cells(b, 1) = b - 2
       Sheet5.Cells(b, 2) = Sheet3.Cells(c, 2)
       Sheet5.Cells(b, 3) = Sheet3.Cells(c, 3)
       Sheet5.Cells(b, 4) = Sheet3.Cells(c, 4)
       Sheet5.Cells(b, 5) = Sheet3.Cells(c, 5)
       Sheet5.Cells(b, 6) = "入库"
       Sheet5.Cells(b, 7) = Sheet3.Range("b2")
       Sheet5.Cells(b, 8) = Sheet3.Range("e2")
    Next
End If
MsgBox "提取数据成功!"
  Sheet3.Range("A4:E16").ClearContents
End Sub
Sub 出库单录入()
a = Sheet4.Range("a65536").End(xlUp).Row
If Sheet4.Range("b2") = "" Then
   MsgBox "请选择领料车间名称!"
   Exit Sub
End If
If a < 4 Then
   MsgBox "请录入数据后,再点击录入按钮!"
   Exit Sub
Else
    For c = 4 To a
       b = Sheet5.Range("b65536").End(xlUp).Row + 1
       Sheet5.Cells(b, 1) = b - 2
       Sheet5.Cells(b, 2) = Sheet4.Cells(c, 2)
       Sheet5.Cells(b, 3) = Sheet4.Cells(c, 3)
       Sheet5.Cells(b, 4) = Sheet4.Cells(c, 4)
       Sheet5.Cells(b, 5) = Sheet4.Cells(c, 5)
       Sheet5.Cells(b, 6) = "出库"
       Sheet5.Cells(b, 7) = Sheet4.Range("b2")
       Sheet5.Cells(b, 8) = Sheet4.Range("e2")
    Next
End If
MsgBox "提取数据成功!"
  Sheet4.Range("A4:E16").ClearContents
End Sub

然后根据宏的名字选择对应的。这个是入库单和出库单的保存问题,
只是简单的纠错,没有做更严谨的纠错,有问题的小伙伴入门之后可以自己研究下

进销存教程.rar

45.81 KB, 下载次数: 532

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-11 15:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
接着上面的来继续,正好下午比较清闲,所以能把这个任务完成吧上面介绍了入库单和出库单的选择式的录入,还有入库单和出库单的数据保存。
下面就说最后一步,数据的汇总
根据每天的操作,入库单和出库单的数据都累积到进出明细表里面,
这个明细表就是我们要进行数据汇总的基础数据。
进入汇总表,插入一个按钮,然后再模块里写入代码
Sub 汇总()
If Sheet5.Range("a65536").End(xlUp).Row < 3 Then
    MsgBox "没有可以汇总的数据"
    Exit Sub
Else
Dim brr()
   arr = Sheet5.Range("b3:h" & Sheet5.Range("b65536").End(xlUp).Row)
   Set d = CreateObject("scripting.dictionary")
     For a = 1 To UBound(arr)
         If Not d.exists(arr(a, 1)) Then
            n = n + 1
            d(arr(a, 1)) = n
            ReDim Preserve brr(1 To 7, 1 To n)
            brr(1, n) = n
            brr(2, n) = arr(a, 1)
            brr(3, n) = arr(a, 2)
            brr(4, n) = arr(a, 3)
            If arr(a, 5) = "入库" Then
               brr(5, n) = arr(a, 4)
               brr(7, n) = arr(a, 4)
            Else
               brr(6, n) = arr(a, 4)
               brr(7, n) = -arr(a, 4)
            End If
          Else
            M = d(arr(a, 1))
            If arr(a, 5) = "入库" Then
               brr(5, M) = arr(a, 4) + brr(5, M)
               brr(7, M) = arr(a, 4) + brr(7, M)
            Else
               brr(6, M) = brr(6, M) + arr(a, 4)
               brr(7, M) = brr(7, M) - arr(a, 4)
            End If
         End If
      Next
End If
     Sheet6.[a3].Resize(n, 7) = Application.Transpose(brr)
     MsgBox "数据提取成功!"
End Sub

然后在按钮里选择对应的宏就可以了,

整个系统完成了,里面没有做细致的纠错和其他功能的扩展,模板也是根据最简单的方式来模拟的
现实使用中可能模板各式各样的,但是万变不离其中,掌握到方法,做什么都是一个道理。
我也是半路出家,所有的知识都是在论坛中一步一步自己学习的,当然代码当中还有很多不尽如人意的地方,
希望各路大神看到不好的,批评指正。

进销存教程.rar

38.3 KB, 下载次数: 1793

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-11 15:16 | 显示全部楼层
不好意思,最后汇总的代码,要了一个清除  
End If
Sheet6.Range("a3:g10000").ClearContents
     Sheet6.[a3].Resize(n, 7) = Application.Transpose(brr)
     MsgBox "数据提取成功!"
End Sub


我只截取部分吧,就是在上面添加一个清除的代码  Sheet6.Range("a3:g10000").ClearContents

TA的精华主题

TA的得分主题

发表于 2018-12-12 11:53 | 显示全部楼层
授人以鱼不如授人以渔,帮助别人,提升自己。
赞一个!

TA的精华主题

TA的得分主题

发表于 2018-12-12 12:54 | 显示全部楼层
授人以鱼不如授人以渔,帮助别人,提升自己。收藏了。

TA的精华主题

TA的得分主题

发表于 2018-12-12 15:58 | 显示全部楼层
很喜欢这样的文章,像老师一样的说明分析,感谢楼主的分享
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 23:05 , Processed in 0.048652 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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