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