周德林
(邗江中等專業(yè)學校,江蘇揚州,225127)
職業(yè)學校的教務處在開學初的核心工作,就是排課,排課要考慮很多因素,要照顧老教師,排課不能相對集中,等等,排課是一件非常頭疼的事。
隨著計算機應用的廣泛深入,當前排課軟件很多,林林總總,眼花繚亂,但沒有一款軟件能周全考慮各種因素,達到理想、智能的要求。很多情況下,還是手工排課來得更直接、簡單,但同時帶來的問題是出現(xiàn)沖突,改動麻煩,而且排課后,抄寫班級課表和教師個人課表任務太重,還容易出錯。
在排課軟件和手工排課都不能如意完成排課任務的困惑下,我們今天就提出一種適中的方法,利用EXCEL編排總課表,然后再利用EXCEL的VBA編程功能,自動生成班級課表和教師個人課表,這樣既克服了排課軟件的不足,又能簡化手工抄課表的繁鎖任務。
利用Excel工作表,按圖1所示結構編排總課表,基本要求是星期一至星期五放在行,根據(jù)學校實際,每天一定數(shù)量的課時編排,我們的圖中是按每天6節(jié)課;班級放在列,每個班級包含兩行,第一行是班級名稱,第二行是任課教師姓名,這里強調(diào)一定要在A列注明班級名稱。在編排時,可以考慮各種因素,科學、合理的編排,可以進行任意次的修改,最終確定學?;驅W院的總課表。如果學校班級數(shù)多,可以考慮分組編排總課表。
表1 總課程表
02機電 傳動 傳動 物理 物理 維護 維護 應用 應用 數(shù)學 數(shù)學 專英 專英教師 羅文羅文 王傳王傳張長張長 王林王林
按表1所示結構編排好學??傉n表后,根據(jù)總課表的結構,其實把總課表的某個班級名稱后面的一行課程名稱數(shù)據(jù)行列轉換填寫到班級課表中,并在班級課表模板中增加班級名稱。
在EXCEL軟件中編寫VBA代碼,可以實現(xiàn)這樣的功能轉換,每個班級課表新生成一張工作表,工作表的標簽名稱就是班級名稱,方便查找。在工作簿中要放置“班級課表模板”工作表,在總課表中繪制一個按鈕,按鈕名稱修改為“班級課表”,把編寫好的VBA代碼添加到該按鈕,退出設計模式,重新打開該文件,只要點擊“班級課表”按鈕,就會在總課表后生成如圖2所示的各個班級課表。
具體VBA程序如下:
Private Sub CommandButton1_Click()
Application ScreenUpdating = False
Row=Application WorksheetFunction CountA(Sheets(“總課表”).[a3:a100]) ‘班級個數(shù)的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
打印時設置打印范圍為“工作簿”,就能一次性打印所有班級的課表,省去了人工抄寫的煩惱,分發(fā)時每張課表上都有班級名稱,不會出現(xiàn)發(fā)放錯誤的問題。
表2 班級課程表
表3 教師個人課程表
5"測量02電子"6下午"測量02電子"7"測量02電子"
根據(jù)編排好的總課表,生成每位教師的周課表,如圖3所示,首先把總表中涉及到的教師名單匯總,單獨放置在“教師信息”工作表中A列和B列中,A列是教師編號或工號,B列是教師姓名。其次,把教師個人課表模板放置在工作簿中,教師課表中要求有各教師的姓名,以便分發(fā)時不會搞錯,教師課表中既要有課程名稱,還要有課程所對應的班級,以防教師不清楚上課班級。最后,編寫VBA代碼,把代碼與“生成教師課表”按鈕對應。編寫VBA的思路就是,按照“教師信息”中名單的順序,依次以教師姓名為工作表標簽名生成新課表,并在教師課表中填寫教師姓名,方便課表發(fā)放。根據(jù)教師姓名到總課表中去查找,如果找到對應姓名,就把該姓名上一行所對應的課程名稱填寫到“教師課表”中對應的星期和節(jié)次上,同時把這個班級名稱信息填寫到相應表格中,這樣“教師信息”工作表中的每一位教師都有一張工作表與之對應,也方便教務處在以后調(diào)課時查閱。
打印時設置打印范圍為“工作簿”,就可以打印一張A4紙大小的課表,如果從節(jié)約和環(huán)保角度來考慮,可以進一步設置為每張紙上打印兩張工作表,這樣就可以為每一位教師打印成A4紙一半大小的課表。
此方法還可以根據(jù)需要,進一步完善其功能,比如查驗課務是否有沖突、統(tǒng)計出每一位教師的課務量、匯總出每個班級每門課程是否與課程計劃相一致,等等,這個就看各人對哪些功能有特別要求,當然所有這些功能,都需要大家對Excel的VBA代碼及編寫要特別熟悉。
任何一款排課軟件,都有自己的技巧,但不一定能被排課人員理解、發(fā)現(xiàn)和利用。利用Excel軟件中的VBA代碼,不需要考慮智能排課軟件的邏輯思維,按照自己的理解和方法,去編排總課表,然后自動完成子課表,不需要購置軟件,簡單易懂、省時省力。