利用excel vba制作多选题考试系统
面对大量的选择题考试,如果印刷纸质试卷,考完后由教师人工阅卷,不但效率低下,而且浪费人力、物力,还很容易出错。即使学校有条件使用机读卡考试,也会提高成本,浪费财力。我们利用excel vba制作了选择题考试系统,使用方便,节约人力、物力,深受广大教师的欢迎。下面我以多选题为例介绍一下具体做法,供读者参考。
一、界面设计
启动exce12003,把sheetl更名为“多选题”,sheet2更名为“多选题库”,在“多选题”中输入相应的内容,把窗口右上角的“垂直拆分块”拖动到第五行的下边缘,再点击“窗口一冻结窗格”。两个按钮以后再添加,如图1所示。
把题目录入到“多选题库”中,其中第一行为字段名,在al -hl中分别输入:章、题号、答案、题干、a. b. c.d。第二行以下为题目,如图2所示。录入完毕后统计一下题目总数(我这里共录入了30 3道题,考试抽取20道题,考试时间共3 0分钟),在“多选题”的下列单元格中分别输入内容(ol:总题数、pl:303. 02:抽题数、p2:20. 01:考试时间(分钟)、q2:3 0)。选择“工具一保护一允许用户编辑区域”,把b2. d2. h5放入其中。至此,准各工作基本完毕。
二、代码编辑
限于篇幅,以下只介绍代码编辑中的技术性问题,详细请参阅http://user.qzone.qq/413660998?ptlang=2052。按alt+fll键,进入vba编辑界面,按ctrl+r显示“工程资源管理器”窗口,按f4显示“属性”窗口。vba做excel窗体录入教程
1.启动代码简介
双击“microsoft excel中对象”中的“thisworkbook”,在右侧窗口中输入代码。这部分代码触发workbook_open()事件,主要有三项任务。其一是利用“worksheets(”多选题库”).visible:xlsheethidden”隐藏题库;其二是清除上一名考生保存的信息;其三是利用msgbox语句给出“考试说明和答题注意事项”。
2.随机出题代码简介
插入模块,将其命名为“随机出题”(subsetapaper(》,在其中输入代码。任务有两项。其一是根据“总题数”和“抽题数”产生相应的不重复随机数,并存人“tihao()”数组,示例代码如下:
for i=1 to tishu
b:randomize
y= int《startend(1,2)- startend(l,1)+1).rnd()+ startend(l, 1》
forj =1 toi
if tihao(l,j)=ythen
goto b:end if
nextj: tihao(l,i)=y:next i
startend(l,l)=l表示起始题号,startend(1,2)=总题数,是结束题号,tishu=抽题数。randomize语句的作用是初始化随机数生成器,避免每次启动程序时产生的随机数相同。其二是按照产生的随机数抽取题目,写在试卷的相应位置上。示例代码如下,其中dxt代表“单选题”工作表,dxtk代表“单选题库”工作表。
n=l: i=l
for i=1 to tishu
cells(i+5+1,2)=cstr(i)&”,”题号
cells(i+5+1,3)=lls(tihao(l,i)+1,4)”题干
cells(i´5+2,2)=“a.“:cells(i-5+3,2)="b."
cells(i+5+4,2)=“c.”:cells(i.5+5,2)="d."
cells(i+5+2,3)=lls(tihao(l,i)+1,5)"a选项
cells(i´5+3,3)=lls(tihao(l,i)+1,6)”b选项
cells(i+5+4.3)=lls(tihao(l,i)+1,7)"c选项
cells(i+5+5,3)=lls(tihao(l,i)+1,8)"d选项
lls(i+1,10)=lls(tihao(l,i)+1,3)”记录答案
next i
3.按钮和学生答题代码
双击“microsoft excel对象”中的“sheetl(多选题)”,在右侧窗口中输入代码。其中两个按钮代码一个是“随机出题”:call setapaper; -个是“交卷评分”:c all score。学生答题主要是触发worksheet_selectionchange(byval target as range)事件,用w记录单击的行号,用x=lnt((r-l)/5)记录题号。如果单击的不是第二列就退出,是题号行也退出。如果单击的是“选项”,就记录其值,并判断答案中是否已经存在该选项。如果存在就删除,如果不存在就添加。示例代码如下:
with worksheets(”多选题“)
danji= left(target.value,1)
if cells(x´5+1,1)=…’then
cells(x´5+1,1)=danji
else
mylen=len(cells(x.5+1,1》: for m=1 to mylen
if danji= mid(cells(x+5+1,1), m,1)then…如果存在
cells(x’5+1,1)=replace(cells(x+5+1,1),danji,””)…就删除
exit sub: end lf:next m
cells(x´5+1,1)=cells(x.5+1,1)&danji…不存在就添加
end if
end with
显示控件工具箱工具栏,添加第一个按钮并双击之,在属性窗口中把其caption属性更改为“随机出题”,添加第二个按钮,把其caption属性更改为“交卷评分”。
4.计时器代码
插入模块,命名为“计时器”,在其中输入代码,其中remt=worksheets(“多选题”).cells(2,17)1,sec=60,jg=l。通过runtimer()过程和js()过程的循环调用,利用ontime函数,
在屏幕上显示变化的时间,并实现剩余1分钟提醒,到时自动交卷。
sub runtimer()‘时间运行
ime now+ timevalue(”00:00:”&jg),”js”
end sub
sub js()’计时
if cstr(cells(l, 12》<>…’then exit sub
if sec>0 then
sec=sec - jg: worksheets(”多选题”).cells(5,8)=”考试剩余时间:”& remt&“:”&sec
else: sec=60
lf remt>0 then
lf remt=1 then msgbox“离考试结束还有1分钟!”: thisworkbook.save: remt=remt -1
else: msgbox”考试结束!“:call score: d if.call runtimer
end sub
5.自动评分代码
插入模块,命名为“自动评分”(sub score(》,在其中输入代码。 sub score()’自动评分
ts=cells(2, 16):n=ts+5+5:df=0
for m=6 to n step 5
if cells(m,1)<>…‘then
mylen=len(cells(m, 1》
bzdaan=worksheets(”多选题库”).cells(l+(m -1)/5, 10)
for i=1 to mylen
mycheck=mid(cells(m, 1),i,1)like”【”&bzdaan&“】”
if mycheck= false then goto c
next i
if len(cells(m, 1》= len(bzdaan) then df= df+1
if len(cells(m, 1》< len(bzdaan) then df= df+ 0.5
end if
c: next m: df= df,ts100: cells(l, 12)=df
msgbox“本次考试共”&ts&“道题,满分为100分,你的得分是”&df&”分。”
end sub
三,使用方法
1.教师提前把题库做好,设置好抽题数、考试时间,再分发给学生。
2.学生启动后会出现“考试说明”提示框,点击“确定”后填写考号和姓名。
3.敲回车后,“随机出题”按钮可用,出题后“交卷评分”按钮可用。
4.答题方法为:单击选项前的字母选择,再次单击该选项取消选择。对答案的顺序没有要求,比如答案是abc,考生答acb、bca等均得满分。
5.学生可以提前交卷评分,也可考试时间结束后自动交卷评分。评分标准为:(1)多选或选错均不得分。(2)对而不全得一半分。
6.教师更新题库时,按alt+fil进入vba编辑状态,单击“sheet2(多选题库)”,把其visible属性更改为:-1-xlsheetvisible,“多选题库”工作表就出现了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。