找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
宇哥帮你零基础建设外贸独立站
宇哥淘宝虚拟类目-付费微信群
宇哥闲鱼3个月陪跑课
Access数据库-零基础入门课程
Access数据库-自用软件开发课程
Access数据库-即学即用课程
Access数据库-进销存课程
Access数据库-VBA入门课程
Access数据库-陪跑课程
查看: 102|回复: 0

用VBA制作快递费计算器详细教程(基于Access数据库,1600字)

[复制链接]

109

主题

15

回帖

553

积分

管理员

积分
553
发表于 2024-3-7 15:11:55 | 显示全部楼层 |阅读模式
用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代码(用于模块调用和自动化计算)。我们先来看一下核心计算模块的完整代码,并进行一下解释。
  1. Function CalculateExpressFee(weight As Double, location As String) As Double
  2. '确定计算函数的名称,确定两个变量重量weight和快递终点location
  3.     Dim expressfee As Double
  4. '设置一个expressfee作为中间变量
  5.     Select Case location
  6.     '用Select Case作为循环,比较清楚简洁,适合本案例的需求
  7.         Case "浙江", "上海"
  8.         '快递终点是浙江或者上海
  9.             If weight < 100 Then
  10.             '如果重量没到100公斤(起步价重量)
  11.                 expressfee = 80
  12.                 '快递费一律80元
  13.             Else
  14.             '如果快递重量大于等于100公斤
  15.                 expressfee = 80 + (weight - 100) * 0.8
  16.                 '快递费等于起步价加上超重乘以单位费用
  17.             End If
  18.         Case "安徽"
  19.             If weight < 87 Then
  20.                 expressfee = 130
  21.             Else
  22.                 expressfee = 130 + (weight - 87) * 1
  23.             End If
  24.         Case "山东", "北京", "天津"
  25.             If weight < 74 Then
  26.                 expressfee = 110
  27.             Else
  28.                 expressfee = 110 + (weight - 74) * 1.5
  29.             End If
  30.         Case "河北", "河南"
  31.             If weight < 74 Then
  32.                 expressfee = 130
  33.             Else
  34.                 expressfee = 130 + (weight - 74) * 1.5
  35.             End If
  36.         Case "湖北", "湖南", "江西"
  37.             If weight < 87 Then
  38.                 expressfee = 130
  39.             Else
  40.                 expressfee = 130 + (weight - 87) * 1.5
  41.             End If
  42.         Case "四川", "甘肃", "青海"
  43.             If weight < 87 Then
  44.                 expressfee = 160
  45.             Else
  46.                 expressfee = 160 + (weight - 87) * 2.2
  47.             End If
  48.         Case "山西"
  49.             If weight < 87 Then
  50.                 expressfee = 160
  51.             Else
  52.                 expressfee = 160 + (weight - 87) * 2.1
  53.             End If
  54.         Case "广东", "福建"
  55.             If weight < 74 Then
  56.                 expressfee = 110
  57.             Else
  58.                 expressfee = 110 + (weight - 74) * 1.5
  59.             End If
  60.         Case "云南", "贵州"
  61.             If weight < 73 Then
  62.                 expressfee = 160
  63.             Else
  64.                 expressfee = 160 + (weight - 73) * 2.2
  65.             End If
  66.         Case "重庆"
  67.             If weight < 77 Then
  68.                 expressfee = 160
  69.             Else
  70.                 expressfee = 160 + (weight - 77) * 2.2
  71.             End If
  72.   
  73.         Case Else
  74.             ' 默认情况下的处理逻辑,可以根据需要进行修改
  75.             expressfee = 0
  76.     End Select
  77.    
  78.     CalculateExpressFee = expressfee
  79. End Function
复制代码

用Select Case计算快递费,优点是非常清楚,看着不累,比Excel嵌套各种函数要更直观,修改也方便。
第3部分 模块调用和自动化
每当在Access数据库前端的窗体上点击“省份”,或者输入快递的重量,这个程序就会自动计算出快递的价格。这个过程是通过模块调用和自动化实现的。
本案例模块调用是通过一个子过程进行的,好处是节省代码行数,便于修改,看着不乱。
  1. Public Sub 计算过程()
  2. '调用计算模块的子过程
  3. If IsNull(List2) Then
  4. '如果没有点击省份,先提醒一下使用者选择省份
  5.     Text2 = "请选择地区"
  6. Else
  7. '选择了省份、填写了快递重量之后,调用模块,显示在text2中
  8.     Text2 = CalculateExpressFee(Val(Nz(Text1)), List2) & "元"
  9. End If
  10. End Sub
复制代码


自动化实现也很简单。
每次点击列表框选择省份,每次更改快递重量,窗体就进行一次刷新,基本逻辑就是这样子的。
  1. Private Sub Command27_Click()
  2. '清空查询条件的操作
  3.     List1 = Null
  4.     List2 = Null
  5.     Text1 = Null
  6.     Text2 = Null
  7.     Me.Refresh
  8. End Sub

  9. Private Sub List1_Click()
  10.     List2 = Null
  11.     Me.Refresh
  12. End Sub

  13. Private Sub List2_Click()
  14.     Call 计算过程 '召唤计算模块
  15.     Me.Refresh
  16. End Sub

  17. Private Sub Text1_AfterUpdate()
  18.     Call 计算过程 '召唤计算模块
  19.     Me.Refresh
  20. End Sub

  21. Private Sub Text1_Change()
  22.     Call 计算过程 '召唤计算模块
  23.     Me.Refresh
  24. End Sub
复制代码


小结
本案例制作快递费计算器,软件需求清晰、制作过程层次感很好、VBA语句也不算难、总体技术难度适中,非常适合VBA和编程新手进行编写训练,可以充分体会VBA编程技术给生产力带来的效率提升。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Access即学即用
Access零基础
Access进销存
access陪跑
access开发

QQ|小黑屋|宇哥编程论坛 ( 京ICP备2022024677号-2|京公网安备11011202100561号 )

GMT+8, 2024-5-19 12:18 , Processed in 0.054570 second(s), 22 queries .

Powered by 宇哥

© 2001-2024 Discuz! Team.

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