周德林
(邗江中等专业学校,江苏扬州,225127)
职业学校的教务处在开学初的核心工作,就是排课,排课要考虑很多因素,要照顾老教师,排课不能相对集中,等等,排课是一件非常头疼的事。
随着计算机应用的广泛深入,当前排课软件很多,林林总总,眼花缭乱,但没有一款软件能周全考虑各种因素,达到理想、智能的要求。很多情况下,还是手工排课来得更直接、简单,但同时带来的问题是出现冲突,改动麻烦,而且排课后,抄写班级课表和教师个人课表任务太重,还容易出错。
在排课软件和手工排课都不能如意完成排课任务的困惑下,我们今天就提出一种适中的方法,利用EXCEL编排总课表,然后再利用EXCEL的VBA编程功能,自动生成班级课表和教师个人课表,这样既克服了排课软件的不足,又能简化手工抄课表的繁锁任务。
利用Excel工作表,按图1所示结构编排总课表,基本要求是星期一至星期五放在行,根据学校实际,每天一定数量的课时编排,我们的图中是按每天6节课;班级放在列,每个班级包含两行,第一行是班级名称,第二行是任课教师姓名,这里强调一定要在A列注明班级名称。在编排时,可以考虑各种因素,科学、合理的编排,可以进行任意次的修改,最终确定学校或学院的总课表。如果学校班级数多,可以考虑分组编排总课表。
表1 总课程表
02机电 传动 传动 物理 物理 维护 维护 应用 应用 数学 数学 专英 专英教师 罗文罗文 王传王传张长张长 王林王林
按表1所示结构编排好学校总课表后,根据总课表的结构,其实把总课表的某个班级名称后面的一行课程名称数据行列转换填写到班级课表中,并在班级课表模板中增加班级名称。
在EXCEL软件中编写VBA代码,可以实现这样的功能转换,每个班级课表新生成一张工作表,工作表的标签名称就是班级名称,方便查找。在工作簿中要放置“班级课表模板”工作表,在总课表中绘制一个按钮,按钮名称修改为“班级课表”,把编写好的VBA代码添加到该按钮,退出设计模式,重新打开该文件,只要点击“班级课表”按钮,就会在总课表后生成如图2所示的各个班级课表。
具体VBA程序如下:
Private Sub CommandButton1_Click()
Application ScreenUpdating = False
Row=Application WorksheetFunction CountA(Sheets(“总课表”).[a3:a100]) ‘班级个数的2倍
biaoqian =“”
num=3‘起始行号
Do While num<= Row + 2
Sheets(“班级课表模板”).Copy After:=Sheets((num+1)/2)
fiveday = 0
Do While fiveday<= 4
Sheets(“总课表”).Select
Sheets(“总 课 表 ”).Range(Cells(num, 2 +fiveday * 7), Cells(num, 8 + fiveday * 7)).Select
Selection Copy
Sheets(“班级课表模板 (2)”).Select
Sheets(“班级课表模板 (2)”).Cells(4,3 + fiveday).Select
Selection PasteSpecial Paste:=xlPasteAll,Operation:=xlNone, SkipBlanks:=False, Transpose:=True
fiveday = fiveday + 1
Loop
Sheets(“总课表”).Select
Sheets(“总课表”).Cells(num, 1).Select
Selection Copy
Sheets(“班级课表模板 (2)”).Select
Sheets(“班级课表模板 (2)”).Cells(2, 3).Select
ActiveSheet Paste
biaoqian = ActiveCell FormulaR1C1
Sheets(“班级课表模板 (2)”).Name = biaoqian num = num + 2
Loop
Application ScreenUpdating = True
End Sub
打印时设置打印范围为“工作簿”,就能一次性打印所有班级的课表,省去了人工抄写的烦恼,分发时每张课表上都有班级名称,不会出现发放错误的问题。
表2 班级课程表
表3 教师个人课程表
5"测量02电子"6下午"测量02电子"7"测量02电子"
根据编排好的总课表,生成每位教师的周课表,如图3所示,首先把总表中涉及到的教师名单汇总,单独放置在“教师信息”工作表中A列和B列中,A列是教师编号或工号,B列是教师姓名。其次,把教师个人课表模板放置在工作簿中,教师课表中要求有各教师的姓名,以便分发时不会搞错,教师课表中既要有课程名称,还要有课程所对应的班级,以防教师不清楚上课班级。最后,编写VBA代码,把代码与“生成教师课表”按钮对应。编写VBA的思路就是,按照“教师信息”中名单的顺序,依次以教师姓名为工作表标签名生成新课表,并在教师课表中填写教师姓名,方便课表发放。根据教师姓名到总课表中去查找,如果找到对应姓名,就把该姓名上一行所对应的课程名称填写到“教师课表”中对应的星期和节次上,同时把这个班级名称信息填写到相应表格中,这样“教师信息”工作表中的每一位教师都有一张工作表与之对应,也方便教务处在以后调课时查阅。
打印时设置打印范围为“工作簿”,就可以打印一张A4纸大小的课表,如果从节约和环保角度来考虑,可以进一步设置为每张纸上打印两张工作表,这样就可以为每一位教师打印成A4纸一半大小的课表。
此方法还可以根据需要,进一步完善其功能,比如查验课务是否有冲突、统计出每一位教师的课务量、汇总出每个班级每门课程是否与课程计划相一致,等等,这个就看各人对哪些功能有特别要求,当然所有这些功能,都需要大家对Excel的VBA代码及编写要特别熟悉。
任何一款排课软件,都有自己的技巧,但不一定能被排课人员理解、发现和利用。利用Excel软件中的VBA代码,不需要考虑智能排课软件的逻辑思维,按照自己的理解和方法,去编排总课表,然后自动完成子课表,不需要购置软件,简单易懂、省时省力。