VBA是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化任务的编程语言,VBA语法简单,适合非专业编程使用。本文使用VBA操作EXCEL完成设计。
第一部分 目前人工排班存在的问题及原因
图一
图一是人工排班的一个排班计划表,经过调查发现主要存在的问题1.制作排班计划表需要较长时间,日均消耗1小时。2排班人员在排班过程中容易出现遗漏,根据2021年某月份数据统计,进港航班日均271,放行漏排日均2次。
原因分析: 1因人员授权各不相同,排班人员需要不断核实放行人员的授权,导致核实时间长,工作效率低。2 排班人员在270多行数据中进行肉眼过滤,难免出现眼睛看错行的情况,人为差错难以避免。通过重复核实可以降低差错,难以根除。
第二部分 解决问题的思路
本文计划用VBA操作EXCEL,设计一款小软件来解决排班问题,思路如下:
一、 根据维修能力,对原始航班数据进行初步过滤。
二、 建立人员授权模块,在制作排班计划的过程中调用该模块,确保授权和工作安排相符合。
三、 建立排班界面,在排班界面完成排班过程。
图二
第三部分 功能实现
1. 维修能力模块
a) 在EXCEL内建立一个“维修能力”的工作表,在该表中从单元格H4开始储存维修单位的能够保障的航空公司代码和机型。如图二。
图三
b) 调出VBA代码编辑页面(alt+F11),如图三所示,新建模块1,建立自定义函数Function nengli(a, b, c) ,其中a为航班代码,b为机型,c为机号。该函数可以用来判断当前的航班是否为本部门需要保障的航班。在模块1中新建立过程,使用FOR循环顺序读取进港航班号,通过调用自定义函数过滤出维修能力范围内的航班,最后将过滤后的航班显示在排班界面,如图五区域一。
2. 人员授权模块
在EXCEL 内建立一个“人员授权”的工作表,在该表中单元格A2开始分类存储放行员的授权信息,如图三。
图四
建立模块2,在模块2中自定义函数Function fangxing(a As String, b As String, fangxingyuan)。 其中,a 是航空公司,b是机型,fangxingyuan是放行员的名字。该函数能够对传入的航班代码,机型,放行员的姓名进行处理,通过对比人员授权表内的数据,判断能否放行航班。
3.操作界面
在EXCEL 内建立一个“排班界面”的工作表,在单元格M2-S8中存放维修能力模块过滤后的数据(滚动显示前6行数据),在单元格M11-W11可以填入放行员姓名,M12-W14填入上班时间。在M18至W28区域点击单元格,触发程序(触发程序用Worksheet_Selection事件)生成下拉菜单。该下拉菜单只会显示该列对应放行员授权范围内的航班。原理如下:
图五
在点击单元格之后,触发Worksheet_Selection事件,获得该单元格的行号和列号,通过列号获得放行员的名称和上班时间,从而可以生成一个该放行员授权范围内航班序列(后续统称为序列S)。
下拉菜单的生成:利用EXCEL的数据有效性:validation对象。改变当前单元格的validation中Formula1的值,将序列S赋值给Formula1即可生成下拉菜单。
在下拉菜单选取一个航班(以FM9395为例)后,由于该航班还在原航班数据中,必须将其删除。通过查找功能,在原航班数据中删除FM9395,避免出现重复数据。
撤回功能的实现。在执行代码后,EXCEL原有的撤销功能将不可用,排班中一旦操作错误难以修改,我们需要自己创作一个撤回功能。设计思路如下:建立数据保存模块,将排班表中的航班数据和排班数据保存到其他空白表,在需要撤回的时候将保存的数据复制回来。
综上所述,通过EXCEL的VBA编程功能,可以实现放行排班计划表的制作。在实际运行中,有效的提高了工作效率,降低维修差错。