Excel VBA在对口中职招生考试中的应用
2014-10-20廖明梅舒清录
廖明梅,舒清录
0 引言
对口中职招生作为考生升学考试、学校选拔优秀人才的重要途径,是一个非常严肃的工作。其中试题编制与评分是一项重要活动,需兼顾考试是否方便、数据是否安全以及改卷效率是否高等多方面的因素[1,2,3]。综合考虑,采用电子化考试是一个不错的选择。在常规做法中,购买成熟的考试系统,成本较高。自己选择开发语言、数据库,然后编制软件,完成软件部署、测试等,在技术、时间等方面有一定要求,实现有一定难度。有没有一种部署简单、控制方便的系统?
答案就是MS Office Excel(以下简称Excel)。Excel是一个功能强大、技术先进、使用方便的表格式数据综合管理和分析系统,其本身就是一个数据库。VBA编程语言使Excel更是如虎添翼,使VBA读取Excel数据更方便,而且程序的设计更简单。在部署方面,只要求目标机器安装Office相应版本,无需安装其他组件,然后考试文件复制到目标机器就可以使用,大大方便操作使用[4,5,6]。
1 平台需求
平台主要需求如下:
(1)界面友好,用户登录时首先看到考试说明;
(2)限制考试答题位置和规定答题选项,尽可能保证考生答题规范[7];
(3)能方便、有限制地查看成绩;
(4)较高的安全性,尽可能保证代码和标准答案的安全。
2 平台实现
2.1 Excel前端设计
此Excel平台共涉及3个工作表,分别用于完成考试说明、试题显示/答题、标准答案界面的设计。实现了试题与标准答案分开存放[8],提高了数据的安全性。3个表的相关属性如表1所示:
表1 工作表属性
(1)“考试说明”工作表设计
在考试说明工作表中,合理使用Excel提供的艺术字加合适的字体修饰标题,为了防止目标机器因字体原因而无法显示设计效果,采用对艺术字部分进行截图。
设置了一个“进入考试”的图形按钮,当用户阅读考试说明后,点击进入考试试题工作表,开始答题,效果如图1所示:
图1 考试说明工作表界面
(2)“考试试题”工作表设计
设置一个名为“对口中职计算机类招考考试试题”标题,因试题量较大,把标题行设置为冻结窗体。
采用数据有效性限制用户只能在一定范围内输入/选择,尽可能地减少考生输入错误[9,10]。涉及的3种题型具体设置如下:
对于单项选择,只能从“A”,“B”,“C”,“D”中选择一个;
对于多项选择题,每题限制 4个选项,则按顺序把ABCD所有组合列出来供选,即“AB”,“ABC”,“ABD”,“ABCD”,“AC”,“ACD”,“AD”,“BC”,“BCD”,“BD”以及“CD”;
对于判断题,只能从“对”,“错”中选一个。
具体做法,对于单选题,选中要设置有效性的区域,单击“数据”功能页下的“数据有效性”按钮,在弹出对话框的“有效性条件”中选择“序列”,来源输入“A,B,C,D”确定即可,其他题型类似。
规定可编辑区域,划出供考生答题的区域,其他地方不允许考试点击、操作[11,12]。具体做法为,选中答题区域,点击“右键”,选择“设置单元格格式”,在弹出的对话框中选择“保护”选项卡,把“锁定”前的勾去掉,在配合工作表的保护即可生效。
添加一个“查看成绩”按钮,主要用户改卷教师查看成绩。为了能使该按钮被有限制地使用,在显示成绩之前必须进行身份验证,效果如图2所示:
图2 考试试题工作表界面
(3)“标准答案”工作表设计
此工作表是整个平台的核心,数据的安全问题不容小视,为了更加安全保存数据,从下列两方面来加强数据的安全性。
一是充分利用Excel的大容量,把数据放在比较隐蔽的地方(比如把答案写在EZL1014567:EZN1014645区域内)。在Excel 2010中,一个工作表有1048576行16384列,对标准答案的隐藏起到了很好的保护作用,即使有人想知道答案,在不知道工作表名的情况下,难度大大增加了。所以在特定的考试环境下,采用Excel工作表存放标准答案是有意义的,也是可行的。
二是通过VBE设置工作表的Visible属性,使考生无法通过取消隐藏来显示此表。做法是按Alt+F11快捷键,在左侧窗格上部首先选中需要保护的工作表,通过其属性面板的Visible属性设置为“2-xlSheetVeryHidden”,再保存。
利用 Excel提供的 IF函数来计算每题的得分。例如Sheet2!C3为考生答案单元格,M3为标准答案单元格,则此题的评分规则为:
IF(Sheet2!C3="",0,IF(Sheet2!C3=M3,2,0)),即没有填写考试答案则0分,考生答案和标准答案相同,则得2分,否则的0分。
SUM 函数来实现总分进行统计,用 SUM(N:N)求出得分列所有小题得分之和。
把以上所有工作表设计好之后,把每个工作表的网格线、编辑栏、标题去掉,再进行工作表保护。
2.2 VBA控制
通过3.1只是把平台的基本框架完成,基本能实现答题,但看成绩较为麻烦。先要把隐藏工作表的隐藏属性设置为显示,最后,找到存储总分的单元格。操作步骤多且繁琐,容易出错,所以利用宏代码直接读出指定单元格值并显示出来就显得很有必要。围绕此问题,该平台共设置了以下几个宏和一个用户窗体。
(1)ShowSheet宏
点击“考试说明”工作表的“进入考试”按钮,调用此宏,作用是显示“试题显示”工作表。宏代码为“Sheets("考试说明").Activate”。
(2)HideRibbon宏
为了使考试操作简单,避免考生到处点击发生意外情况,增加了平台的安全性,采用禁用功能区,使考生能直接操作的功能按钮大大减少。涉及的宏代码为[13-15]:
此宏在Workbook的Open事件中被调用。
(3)SaveDocument宏
禁用功能区,导致了考生无法通过点击保存按钮来实现修改内容的保存,对不习惯使用Ctrl+s组合键来保存的考生来说,是一件痛苦的事情。为了解决此问题,除了考试说明中明确提示外,还采用VBA代码来实现Excel定时自动保存。
实现思路:在Workbook的Open事件中,以当前时间为准,10秒后,通过Application.OnTime DTime自动调用SaveDocument过程。而SaveDocument
过程主要完成:当ThisWorkbook.saved为假时,则调用ThisWorkbook.Save保存,以当前时间为准,10秒后再次调用自己。如此反复就可以实现定时自动保存。核心代码如下:
(4)UserFormPassword
此窗体主要完成对用户身份信息的验证,如果用户输入正确的密码,则调用ShowScore宏显示成绩,否则关闭本窗口。
为了防止用户点击窗体的关闭按钮导致意外情况,使用FindWindow( )等API函数禁用关闭按钮[16,17],使用户只能点击窗体指定的“确定”按钮来控制。核心代码如下:
(5)showUFPassword宏
此宏主要用于显示身份验证的用户界面。被sheet2表的“查看考试成绩”按钮执行,属于以正常方式进行查分的情况。其实现代码如下:
Flag = 1 注释:确认是以正常方式进行查分的情况UserFormPassword.Show 1 注释:模态方式打开身份验证窗体
(6)ShowScore宏
当用户点击“查看考试成绩”时,系统应该会自动弹出一个对话框,要求验证身份。最初考虑使用 InputBox函数来实现,但发现其输入的密码以明文显示,效果不好。经分析,最后决定使用密码文本框和确定按钮的用户窗体(也就是前面提及的UserFormPass word窗体)。当用户输入正确密码后,自动调用自定义过程,从Excel工作表指定单元格中读出相应成绩,并使用MsgBox函数显示各题得分以及总分,然后关闭窗体。部分实现代码如下:
(7)保护代码
按Alt+F11组合键进入VBE界面,点击“工具”菜单下的“VBAProject属性”,在弹出的对话框中选择“保护”选项卡,输入想设置的密码即可。
3 安全问题
在此平台中,数据安全是一个核心问题,特别是标准答案、总分决不能被不授权人员看到,否则考试就失去了意义。通过前面几步,一个较为合理的评分平台基本实现了。但在平台测试过程中,模拟考生试图通过查看后台代码来获取成绩等相关信息,发现了一些问题。按Alt+F11组合键,点击代码,弹出一个VBA工程密码框,因没有密码,点击“取消”按钮,虽然看不到 VBA代码,但可以通过菜单或 F5按钮逐个运行宏列表里的宏名称,最终也可以看到考生成绩,暴露出严重的安全隐患。
为了解决此问题,定义了一个名为 Flag的全局软标志进行处理。具体为,如果是正常进入(点击Excel界面上的查看成绩按钮或运行showUFPassword宏)查看成绩的Flag设为1,其他情况设置为0。正常看完成绩后,又把Flag设为0,下次想看成绩又必须以正常方式进入。
对于ShowScore宏,在查看具体成绩之前,首先判断是否以正常方式进入(通过 Flag来判断),如果是(Flag=1)则直接读出存放成绩的单元格,否则弹出用户身份验证窗口,对身份进行验证。这样就能保证,不管以何种方式进入,都会使程序跳转到用户身份验证窗口,进行强制身份验证。
到此为止,一个较为安全的评分平台建成。
4 总结
以上基于Excel 2010实现的中职招考平台,在过去招生考试实践中取得了较好的效果,几秒钟就可以完成对一份考卷140小题的评分,大大降低了阅卷工作量。当然,也有待完善的地方,比如能对存入Excel工作表的题目,结合Excel的随机函数,在试题总量不变的情况下,打乱题目的显示顺序,评分后把所有的成绩和考生信息对应地汇总到一个格式化文件中就更加实用了。
[1]李花,张伟娜.用Excel设计标准化试卷的自动判卷系统[J].计算机与现代化.2012.1
[2]罗翠琼.基于Excel的自动阅卷评分系统[J].电脑知识与技术.2013.09
[3]刘雁.基于Excel VBA的通用客观题自我训练工具的设计与实现[J].现代计算机.2013.09
[4]郝晗瀚,康慕宁.Excel操作题自动出题系统的设计与实现[J].计算机与现代化.2013.12
[5]罗刚君.Excel VBA程序开发自学宝典[M].北京:电子工业出版社,2011.
[6]李花,郭建璞.用VBA程序保护Excel文件[J].计算机与现代化.2013.9.
[7]安晓梅.Office 2007宝典[M].北京:人民邮电出版社,2008.
[8]张颖.基于 Excel构建计算机考试系统[J].电子制作.2013.12.
[9]Excel Home.Excel VBA实战技巧精粹[M].北京:人民邮电出版社,2013.
[10]韩小良.Excel VBA活用范例大辞典(第2版)[M].中国铁道出版社,2011.
[11]唐燕,韩爱庆,翟兴.基于VBA技术实现调查问卷数据自动读取[J].计算机与现代化.2014.3
[12]舒清录,廖明梅.Excel电子自动评分系统构建的研究与实现[J].科技创新导报.2011-02-01
[13]张宁.用Excel制作试卷必须解决的几个问题[J].计算机时代.2013年第3期
[14]Microsoft Inc.Excel对象模型概述[DB/OL].http://msdn.microsoft.com/zh-cn/library/wss56b z7.aspx,2013-07-11.
[15]韩小良.Excel VBA高效办公实用宝典(第1版)[M].中国铁道出版社,2009.
[16][16]李政,王月,郑月锋等.VBA 应用基础与实例教程(第2版)—上机实验指导[M].国防工业出版社,2009.
[17]王东明,葛武滇.Visual C#.NET程序设计与应用开发[M].北京:清华大学出版社,2008:18.