
为什么小生意更适合用VBA做进销存?
你可能会问:“市面上不是有专业进销存软件吗?为啥要费劲用VBA?”我跟你算笔账——专业进销存软件一年至少要几千块,小生意预算有限,况且Excel是现成的,几乎每个老板电脑里都有,VBA是Excel的内置编程语言,不用额外装软件,修改起来还灵活。
张姐之前也考虑过买软件,但问了几家,要么功能太复杂(要学半天怎么录入、怎么生成报表),要么要绑定硬件(比如扫码枪得买他们家的),她觉得“没必要花这冤枉钱”。后来我跟她说:“你用Excel这么久,VBA就是帮你把‘重复点鼠标’的活自动化,比如录入进货单时自动填商品名,销售时自动减库存,不用你再拉公式。”她半信半疑:“我连函数都不太会,能用上VBA?”结果试了之后,她现在逢人就说:“这代码比我雇个收银员还管用!”
其实VBA没你想的那么难——不用学全编程语言,只要掌握几个核心功能就能解决80%的库存问题。比如自动录入、库存更新、报表生成,这些功能的代码都是“模块化”的,抄过来改改变量名(比如把“商品编号”改成你家的编号规则),就能直接用。我当初学VBA也是为了帮张姐,对着微软的教程(参考链接:,nofollow)抄代码,改了三次变量名,居然真的能运行。
VBA进销存代码的核心功能,照抄就能用
我帮张姐写的VBA代码,主要覆盖了4个核心场景——基础资料录入、采购入库、销售出库、自动报表。这些功能没有复杂的逻辑,你照着模板改改,半天就能用上。
张姐之前最头疼的就是“录入错误”——比如把“可口可乐”写成“可日可乐”,把“康师傅泡面”写成“康帅傅泡面”,结果库存表和销售记录对不上,有时候得翻一堆单据找“到底哪错了”。后来我用VBA给她做了个商品基础资料表,把商品编号、名称、规格、单价、供应商这些信息“固定死”,录入时只要选下拉菜单就行,再也没出现过错别字。
具体怎么弄?其实就是用VBA生成“数据验证”下拉列表。比如你在“商品资料表”里填好所有商品信息,然后在“进货单”的“商品名称”列加一段代码:With Range("B2:B1000").Validation .Delete .Add Type:=xlValidateList, Formula1:="=商品资料表!$B$2:$B$100" End With
——这段代码的意思是,让“进货单”的B列(商品名称)只能选“商品资料表”B列里的内容。张姐用了这个功能后,录入商品名再也不用打字,点一下下拉菜单就能选,错误率直接从15%降到了0。
解决了“录入错误”的问题,接下来就是自动更新库存——这才是VBA最香的地方。张姐之前每天要做的事:录入进货单→打开库存表→找到对应商品→手动加进货数;录入销售单→打开库存表→找到对应商品→手动减销售数。有时候忙起来忘了,库存数就“滞后”,比如明明早上进了10箱可乐,下午卖了5箱,结果库存表还是“昨天的8箱”,导致她以为“可乐不够了”,又进了5箱,最后积压在仓库里。
后来我帮她写了两段联动代码:
Dim rng As Range Set rng = Sheets("库存表").Range("A:A").Find(Sheets("进货单").Range("B2").Value) If Not rng Is Nothing Then rng.Offset(0, 3).Value = rng.Offset(0, 3).Value + Sheets("进货单").Range("D2").Value End If
——这段代码的意思是,在“库存表”的A列(商品编号)找“进货单”B2单元格的编号,如果找到了,就把库存表D列(当前库存)的值加上进货单D2的数量。 为了让你更清楚这些功能的作用,我把张姐用过的“VBA进销存核心功能清单”整理成了表格:
功能模块 | VBA代码作用 | 张姐的实操效果 |
---|---|---|
商品基础资料 | 生成下拉菜单,限制录入内容 | 录入错误率从15%→0 |
采购入库 | 联动库存表,自动加进货数 | 核对时间从2小时→10分钟 |
销售出库 | 联动库存表,自动减销售数+库存预警 | 超卖情况从每月3次→0 |
自动报表 | 一键生成月销售Top10+库存预警表 | 做报表时间从3天→10分钟 |
张姐之前每月最头疼的就是“做销售报表”——要从几百条销售记录里统计“这个月卖了多少可乐”“哪个商品赚得最多”,得用VLOOKUP、SUMIF这些函数,有时候拉错范围,数据就错了。后来我用VBA给她加了个“生成报表”按钮,点一下就能自动统计:
张姐用了这个功能后,每月做报表的时间从3天缩到了10分钟,现在她每月初都会打印一份“销售Top10”贴在店里,盯着卖得好的商品多进点,卖得慢的商品搞搞促销,库存周转效率比之前高了20%。
其实VBA做进销存的核心逻辑很简单:把你每天重复做的“点鼠标、拉公式、手动算”的活,交给代码自动做。你不用学全VBA,只要掌握这几个核心功能,就能解决80%的库存问题。我当初帮张姐写代码时,也是对着微软的VBA教程(参考链接:,nofollow)抄的,改改变量名(比如把“商品编号”改成你家的“SKU码”,把“库存表”改成你命名的“库存汇总表”),居然真的能用。
如果你也在手动管库存,不妨试试这些VBA代码——反正Excel是现成的,改改变量名又不花钱。要是你改代码时遇到问题,比如“怎么把库存数放到E列”“怎么加损耗管理功能”,欢迎给我留言,我帮你看看!
我跟你说,运行VBA代码报错这事太常见了,我帮过的小老板里十个有八个都碰到过,其实大多是俩低级错误——要么是“名字没对齐”,要么是“宏没开”。
先说名字的问题啊,我之前帮张姐改代码的时候,她嫌“商品资料表”这名不好听,自己改成了“小店货品清单”,结果点运行直接弹出“找不到工作表”的错误。你想啊,代码里写的是要找“商品资料表”,但你实际表名改了,它上哪儿找去?就跟你叫朋友“小张”,但朋友改名叫“老张”了,你还喊“小张”,他能答应吗?所以你要是改了表名(比如把“进货单”改成“采购记录”)或者变量名(比如把“商品编号”改成“货号”),一定要把代码里对应的名字 逐行检查 ,一个字都不能差——张姐后来就是把代码里所有“商品资料表”都改成“小店货品清单”,立马就好了。
再就是宏的问题,Excel这玩意儿默认“防着”宏,就跟你家大门默认锁着一样,你得自己去开。具体怎么弄?点“文件”→“选项”→“信任中心”→“信任中心设置”,然后选“宏设置”,挑“启用所有宏”(要是你怕不安全,选“仅启用未签署的宏”也行)。对了,保存文件的时候也得注意!一定要存成“Excel启用宏的工作簿”格式,后缀是.xlsm——我之前帮小区超市李哥弄的时候,他存成了普通的.xlsx,结果第二天打开代码全没了,急得给我发语音:“我昨天明明弄好了,怎么今天点按钮没反应?”我一看格式就笑了——普通格式根本存不下宏,你说冤不冤?
还有种常见情况是“列位置变了”,比如你本来把“当前库存”放在D列,后来移到了E列,结果代码里还是写着Offset(0,3)(D列是从A列数第3列,E列是第4列),这时候代码肯定找不到库存数啊!我教你个笨办法:把鼠标放在库存数的单元格上,看Excel上面的列标(A、B、C、D…),比如E列,就把代码里的Offset后面的数字改成“4”(因为从A列开始数,E是第5列?不对不对,等下,Offset是从你找的那个单元格开始算的——比如你用Find找“商品编号”所在的行,然后要取对应的库存数,要是库存数在右边第4列,就写Offset(0,4),别搞混了!李哥之前就犯过这错,把D列移到E列后,代码里还是写3,结果库存数一直没变,他还以为代码坏了,差点把电脑砸了。
其实这些错误都特好解决,你不用怕——我刚开始学VBA的时候,光“宏没开”就犯了三次,后来把步骤记在便利贴上贴电脑上,才再也没忘。要是你实在查不出来问题,把错误提示截个图,或者把具体的情况(比如“点了按钮后弹出‘对象未找到’”)告诉我,我帮你捋捋——代码这东西,就是得一点点调,调着调着就顺了。
完全没接触过VBA,能直接用文中的代码吗?
完全可以。文中的代码都是“模块化”的核心功能(比如自动录入、库存更新),不需要你学全VBA语法——只要把代码里的“变量名”改成你店铺的实际情况就行(比如把“商品资料表!$B$2:$B$100”改成你存商品名称的表格范围,把“商品编号”改成你用的SKU码)。像文章里的张姐,之前连函数都不太会,改了三次变量名就用上了,你也可以试试。
用VBA做进销存需要额外花钱吗?
几乎不用。VBA是Excel的内置编程语言,只要你电脑里有Excel(不管是Office还是WPS),就能直接用,不用额外买软件或插件。唯一的“成本”可能是你改代码的时间,但文中的代码已经帮你整理好了核心功能,半天就能改完用上,比买专业进销存软件(一年几千块)划算多了。
文中的代码需要改哪些地方才能适配我的店铺?
主要改3个地方:① 商品基础资料的范围(比如文中“=商品资料表!$B$2:$B$100”要改成你存商品信息的表格位置);② 变量名(比如把“商品编号”改成你店铺用的“货号”,把“库存表”改成你命名的“库存汇总表”);③ 联动的列位置(比如如果你的库存数存在E列,就把代码里的“Offset(0,3)”改成“Offset(0,4)”,因为Offset是从当前单元格开始算的列数)。
运行VBA代码时提示错误,该怎么办?
先检查2个常见问题:① 变量名或表名是否一致(比如你把“商品资料表”改成了“商品清单”,但代码里还是“商品资料表”,就会报错);② 是否启用了宏(Excel默认禁用宏,要在“文件-选项-信任中心”里开启“所有宏”,或者保存文件时选“Excel启用宏的工作簿(.xlsm)”格式)。如果还解决不了,可以参考微软的VBA教程(链接),或者留言说具体的错误提示,我帮你看看。