用VBA制作快递费计算器详细教程(基于Access数据库,字)
本案例是用VBA技术给一个物流行业的学员做的计算器,前端用Access数据库窗体展现,后端的计算用的VBA的模块。本案例实现了自动计算快递费,并且便于修改基础参数。
我接到这个活的时候,开始觉得没有什么难的,第一感觉是用Excel就可以做,但这个学员一直做不出来。我拿到她给我发的表一看,感觉确实稍微复杂一些,用Excel公式做还是比较麻烦。
快递费计算器最终实现效果
我就用Access帮他做了一下,计算直接用VBA封装了一个模块。
这个计算器的特点是计算过程比较清楚,因为VBA语句用的SelectCase看起来很有层次感,也便于更改价格和数量。
本教程分为三个部分:需求描述、代码解释、模块调用和自动化
第1部分需求描述
这个学员所在的工厂位于浙江,需要向全国各省发货,由于距离远近不同,起步价和起步重量、续重都是不同的,如果用Excel的公式来做表,会很繁琐,更改也容易出错。而且由于选定范围是省份,因此用Excel还要用VLookup确定省份才能查询,设计起来很麻烦。
学员给我的原始表
另外用Excel公式做,也不容易进行自动化的查询,Excel的控制按钮并不容易操作。
因此我用Access数据库做前端查询,用VBA封装了一个计算模块,在前端用VBA编程调用计算模块,查询条件设置成省份和快递重量,通过更改这两个变量,快递费总价格自动计算并显示,很方便。
第2部分代码解释
本案例的Access数据库VBA程序,分为两个部分:VBA计算模块、Access前端VBA代码(用于模块调用和自动化计算)。我们先来看一下核心计算模块的完整代码,并进行一下解释。
FunctionCalculateExpssFee(weightAsDouble,locationAsString)AsDouble确定计算函数的名称,确定两个变量重量weight和快递终点locationDimexpssfeeAsDouble设置一个expssfee作为中间变量SelectCaselocation用SelectCase作为循环,比较清楚简洁,适合本案例的需求Case"浙江","上海"快递终点是浙江或者上海IfweightThen如果重量没到公斤(起步价重量)expssfee=80快递费一律80元Else如果快递重量大于等于公斤expssfee=80+(weight-)*0.8快递费等于起步价加上超重乘以单位费用EndIfCase"安徽"Ifweight87Thenexpssfee=Elseexpssfee=+(weight-87)*1EndIfCase"山东","北京","天津"Ifweight74Thenexpssfee=Elseexpssfee=+(weight-74)*1.5EndIfCase"河北","河南"Ifweight74Thenexpssfee=Elseexpssfee=+(weight-74)*1.5EndIfCase"湖北","湖南","江西"Ifweight87Thenexpssfee=Elseexpssfee=+(weight-87)*1.5EndIfCase"四川","甘肃","青海"Ifweight87Thenexpssfee=Elseexpssfee=+(weight-87)*2.2EndIfCase"山西"Ifweight87Thenexpssfee=Elseexpssfee=+(weight-87)*2.1EndIfCase"广东","福建"Ifweight74Thenexpssfee=Elseexpssfee=+(weight-74)*1.5EndIfCase"云南","贵州"Ifweight73Thenexpssfee=Elseexpssfee=+(weight-73)*2.2EndIfCase"重庆"Ifweight77Thenexpssfee=Elseexpssfee=+(weight-77)*2.2EndIfCaseElse默认情况下的处理逻辑,可以根据需要进行修改expssfee=0EndSelectCalculateExpssFee=expssfeeEndFunction
用SelectCase计算快递费,优点是非常清楚,看着不累,比Excel嵌套各种函数要更直观,修改也方便。
第3部分模块调用和自动化
每当在Access数据库前端的窗体上点击“省份”,或者输入快递的重量,这个程序就会自动计算出快递的价格。这个过程是通过模块调用和自动化实现的。
本案例模块调用是通过一个子过程进行的,好处是节省代码行数,便于修改,看着不乱。
PublicSub计算过程()调用计算模块的子过程IfIsNull(List2)Then如果没有点击省份,先提醒一下使用者选择省份Text2="请选择地区"Else选择了省份、填写了快递重量之后,调用模块,显示在text2中Text2=CalculateExpssFee(Val(Nz(Text1)),List2)"元"EndIfEndSub
自动化实现也很简单。
每次点击列表框选择省份,每次更改快递重量,窗体就进行一次刷新,基本逻辑就是这样子的。
PrivateSubCommand27_Click()清空查询条件的操作List1=NullList2=NullText1=NullText2=NullMe.RefshEndSubPrivateSubList1_Click()List2=NullMe.RefshEndSubPrivateSubList2_Click()Call计算过程召唤计算模块Me.RefshEndSubPrivateSubText1_AfterUpdate()Call计算过程召唤计算模块Me.RefshEndSubPrivateSubText1_Change()Call计算过程召唤计算模块Me.RefshEndSub
小结
本案例制作快递费计算器,软件需求清晰、制作过程层次感很好、VBA语句也不算难、总体技术难度适中,非常适合VBA和编程新手进行编写训练,可以充分体会VBA编程技术给生产力带来的效率提升。