(浙江横店影视职业学院,浙江 东阳 322100)
摘要:计算机应用基础期末考试客观题有单选题、多选题与判断题,手工阅卷既费时又容易出错,利用Excel中的VBA制作一个简易的无纸化考试系统,可以实现计算机的自动批改,又快又准确,方便使用。
关键词:无纸化考试;VBA;自动批改
每个学期期末计算机应用基础考试除了操作题以外,还有一定数量的理论客观题,每次印刷试卷,考完后阅卷,都费时费财,有时数量一多还容易出现差错。利用Excel中的VBA可以制作选择题的简易考试系统,设计好了就只要修改题库内容和考试设置就可以了,实现了自动改卷,节省了时间与精力,真正实施机上考试。下面以简易的单选题考试设计为例,介绍实施过程,多选题与判断题的设计类似。
一、设计思路
在Excel 2010中设计两张表,一张为题库,一张为考试,设计好的题库要隐藏,考试表中有两个按钮:随机出题、交卷评分,学生输入学号与姓名后,实现随机在题库中抽题,在规定时间内答题,完成后可以自动评分,并不得重新考试。
二、考试界面
启动Excel 2010,把Sheet1更名为“考试”,Sheet2更名为“题库”,在“考试”中插入两个按钮“随机出题”、“交卷评分”,输入相应的内容,冻结第1~5行(图1)。
“题库”表中将题目按标题行“章、题号、答案、题干、A、B、C、D”格式8列录入到中,录入完毕后统计一下题目总数。在“考试”,在P2,P3内输入数据。
三、编写代码
调出“开发工具”,单击“Visual Basic”进入VBA编辑界面,单击工具栏上的“工程资源管理器”按钮,按F4显示“属性”窗口。
1、“随机出题”按钮代码
右击“工程资源管理器”窗口左边的“Microsoft Excel对象”,单击“插入”中的“模块”,按F4,在“属性”窗口中将名称“模块1”改为“随机出题”,并输入代码。
Sub Paper()
Dim i%, j%, k%, m%, n%, y%, ts As Integer
Dim StartEnd(1, 2) As Integer:Dim Th() As Integer
StartEnd(1, 1)=1:StartEnd(1, 2)=Cells(2, 16):ts=Cells(3, 16)
If ts=0 Then Exit Sub
ReDim Th(1, 1 To ts) As Integer
For i=1 To ts ’把起始题号、总题数分别写入StartEnd(1, 1), StartEnd(1, 2)中
A:
y=Int((StartEnd(1,2)-StartEnd(1,1)+1)*Rnd()+StartEnd(1,1))
Forj=1Toi
IfTh(1,j)=yThen
GoToA:
EndIf
Nextj:Th(1,i)=y
Nexti
Application.ScreenUpdating=False
Worksheets("题库").Columns("J:J").ClearContents
WithWorksheets("考试")
Cells(1,12)="":Range("A6:D3000").Select
Selection.ClearContents:Selection.Interior.ColorIndex=xlNone
Selection.NumberFormatLocal="@":Range("B6").Select
n=1:i=1:Application.ScreenUpdating=False
Fori=1Tots
Cells(i*5+1,1).Select:Selection.Interior.ColorIndex=8:Cells(i*5+1,2)=CStr(i)&"."
Cells(i*5+1,3)=Worksheets("题库").Cells(Th(1,i)+1,4):Cells(i*5+1,3).Select
Selection.Font.ColorIndex=5:Selection.Font.Bold=True
Cells(i*5+2,2)="A.":Cells(i*5+2,3)=Worksheets("题库").Cells(Th(1,i)+1,5)
Cells(i*5+3,2)="B.":Cells(i*5+3,3)=Worksheets("题库").Cells(Th(1,i)+1,6)
Cells(i*5+4,2)="C.":Cells(i*5+4,3)=Worksheets("题库").Cells(Th(1,i)+1,7)
Cells(i*5+5,2)="D.":Cells(i*5+5,3)=Worksheets("题库").Cells(Th(1,i)+1,8)
Worksheets("题库").Cells(i+1,10)=Worksheets("题库").Cells(Th(1,i)+1,3)
Nexti
Application.ScreenUpdating=True:Range("A6").Select
EndWith
End
2、“自动评分”按钮代码
如前类似,插入模块,命名为“自动评分”(subscore()),输入代码。
SubScore()
Application.ScreenUpdating=False
WithWorksheets("考试")
IfCells(6,2)=""Then
MsgBox"没有试卷,请单击【随机出题】按钮出题。":Range("A6").Select
ExitSub
EndIf
Dimh%,i%,m%,n%,tsAsInteger:DimDFAsSingle
ts=Cells(3,16):n=ts*5+5:DF=0
Form=6TonStep5
IfUCase(Cells(m,1))=Worksheets("题库").Cells(1+(m-1)/5,10)Then
DF=DF+1
EndIf
Nextm
Range("A6").Select:DF=DF/ts*100
EndWith
Worksheets("考试").UnprotectPassword:="123456"
Cells(1,12)=DF:Application.ScreenUpdating=True
MsgBox"本次考试共"&ts&"道题,满分为100分,你的得分是"&DF&"分。"
Range("A6").Select
Worksheets("考试").ProtectPassword:="123456"
End
EndSub
3、学生“考试”表代码
双击“工程资源管理器”窗口左边中的“Sheet1(考试)”,在右侧窗口中输入代码。其中两个按钮代码一个是“随机出题”(CommandButton1):callSetapaper;一个是“交卷评分”(CommandButton2):callscore。代码如下:
PrivateSubCommandButton1_Click()
CallPaper
EndSub
PrivateSubCommandButton2_Click()
CallScore
EndSub
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
Dimr%,xAsSingle:DimIAsInteger
If(Target.Column<>2)ThenExitSubr=Target.Row
r=Target.Row
If(Selection.Count>1)Then
Range("b"&r).Select:ExitSub
EndIf
Fori=1To5
x=(r-i)/5:If(x=Int(x))ThenExitFor
Nexti
Ifr=x*5+1ThenExitSub
Ifx>0Then
Cells(x*5+1,1)=Left(Target.Value,1)'填写答案
EndIf
四、说明
1、考试前设置好抽题数,再分发给学生
2、答题方法为:单击选项前的字母选择,再次单击该选项取消选择。
3、本设计可以完善,如增加自动计时功能等,时间到自动停止答题。
参考文献
[1]胡维华.计算机基础与应用案例教程[M].北京:科学出版社,2013.2
[2]陈永强,李茜,陈海川.例学VBA——Excel/Access/PowerPoint中的VBA高效应用[m].中国铁道出版社.2010.07.
作者简介:王章生,(1966年4月—)男,汉族,讲师、工程师、职业指导师,浙江东阳人,浙江横店影视职业学院影视制作学院党总支副书记,研究方向为信息技术、思想政治与党的建设。
论文作者:王章生
论文发表刊物:《知识-力量》2018年9月中
论文发表时间:2018/9/27
标签:题库论文; 考试论文; 代码论文; 按钮论文; 单击论文; 评分论文; 浙江论文; 《知识-力量》2018年9月中论文;