用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编程技术给生产力带来的效率提升。
|