首页 > 范文大全 > 正文

应用VBA轻松编排考试试场

开篇:润墨网以专业的文秘视角,为您筛选了一篇应用VBA轻松编排考试试场范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘要】为了防止学生考试时作弊,有利于班级的管理和教学,本文结合自己的工作经验总结出了一种科学合理地安排考试试场的方法,每次考试编排试场时考生单人单桌,考生座位随机编排,而且前后座位不是同班的同学,同时打印出贴在试场桌子的考生标签。

【关键词】随机函数;四舍五入函数;vba代码;主要关键字;排序

为了尽量防止考生考试时作弊,得到考生比较的真实的成绩,每次考试学校都要求编排试场时学生单人单桌,而且前后座位不能是同班的同学,同时打印出贴在试场桌子的考生标签。为此笔者在Excel中用VBA代码轻松实现了学校的要求。

一、试场安排表的设置

试场安排表设有“班别”、“人数”、“桌子数”、“试场”、“考生人数”共五列,由于我校是俩学生同坐一张课桌,可以利用四舍五入函数取得桌子数:ROUND(B2/2,0),根据桌子数安排考生人数。

二、贴班级教室表的设置

贴班级教室表即是学生考试时所在试场的去向表,按“试场”、“考号”、“班级”、“姓名”、“性别”、“随机数”设计字段,利用随机函数RAND()获得随机数,原始表可以不按班级连续存放考生记录,代码中含有按班级排序程序段。

三、编排试场的设计思路及代码

1、思路:分别以随机数和班级为关键字段进行排序,确保每次考生座位随机编排,为了防止前后座位是同班的同学,以人数最多的班级为准先给“贴班级教室”表中的考号赋临时值,按照先排奇数考号再排偶数考号,然后按“考号”字段排序,即可实现同一个班的考生的考号不连续。最后根据“试场安排表”的顺序给考生赋连续的考号和对应的试场教室。

2、代码:

(1)右击工作表标签,在出现的快捷菜单中单击“查看代码”,打开代码设计窗口。

(2)在代码窗口中执行命令“插入/模块”,插入模块1。

(3)录入代码如下:

Sub Macro1()

Application.ScreenUpdating = False

Dim i As Integer ’定义整型变量用于循环操作

Dim j As Integer ’定义整型变量给“贴班级教室”表中的考号赋临时值

Dim n As Integer ’定义整型变量给“贴班级教室”表中的考号赋值

Dim k As Integer ’定义整型变量定位写入的单元格

Dim mj As Integer ’定义整型变量输入人数最多的班级的人数

Dim row1 As Integer ’定义整型变量存放“试场安排”表的行数

Dim row2 As Integer ’定义整型变量存放“贴班级教室”表的行数

Dim y As Integer ’定义整型变量存放“试场安排”表中考生人数

Dim c As String ’定义字符串变量存放“试场安排”表中试场教室

Dim s As String ’定义字符串变量存放按考号进行排序时的右下角单元格标记

’以下代码分别以随机数和班级为关键字段进行排序

Sheets("贴班级教室").Select

row2 = Sheets("贴班级教室").[a1].CurrentRegion.Rows.Count

s = "F" + Trim(Str(row2))

Range("A1").Select

Range("A2:" + s).Sort Key1:=Range("F2"),Order1:=xlAscending,Header:= _

xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,_

SortMethod:=xlPinYin,DataOption1:=xlSortNormal

s = "E" + Trim(Str(row2))

Range("A1").Select

Range("A2:" + s).Sort Key1:=Range("C2"),Order1:=xlAscending,Header:= _

xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,_

SortMethod:=xlPinYin,DataOption1:=xlSortNormal

’以下代码用于在“贴班级教室”表中给各班级考生的考号赋临时值

mj = InputBox("请输入人数:","人数最多的班级")

For k = 2 To row2

’以下代码给考号赋奇数值

j = 1

Do While j

If k > row2 Then

Exit Do

End If

Cells(k,2).Value = j

j = j + 2

k = k + 1

Loop

’以下代码给考号赋偶数值

j = 2

Do While j

If k > row2 Then

Exit Do

End If

Cells(k,2).Value = j

j = j + 2

k = k + 1

Loop

Next k

’以下代码以考号为关键字段进行排序

Range("A1").Select

Range("A2:" + s).Sort Key1:=Range("B2"),Order1:=xlAscending,Header:= _

xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,_

SortMethod:=xlPinYin,DataOption1:=xlSortNormal

’以下代码用于在“贴班级教室”表中给各班级考生的考号赋连续值和试场教室

row1 = Sheets("试场安排").[a1].CurrentRegion.Rows.Count

n = 1

k = 2

For i = 2 To row1

Sheets("试场安排").Select

c = Cells(i,4).Value ’取得试场教室

y = Val(Trim(Cells(i,5).Value))’取得考生人数

Sheets("贴班级教室").Select

j = 1

Do While j

Cells(k,1).Value = c

Cells(k,2).Value = n

n = n + 1

j = j + 1

k = k + 1

Loop

Next i

End Sub

四、贴试场桌子标签的打印工作表设计思路及代码

1、思路:把前面生成的“贴班级教室”表复制两份,分别改名为“贴试场门外”表和“贴试场桌”表,贴试场的桌子的标签要求要有栏头和分割线,首先在“贴试场桌”表第一行插入一空行,再此设计好分割线,然后从第一个考生记录开始在后面插入两个空行,并把第一行的“分割线”和第二行的“栏头”复制到插入的两个空行中,删除最后一行多余的栏头和第一行的“分割线”以便方便排版打印

2、代码:

(1)右击工作表标签,在出现的快捷菜单中单击“查看代码”,打开代码设计窗口。

(2)在代码窗口中执行命令“插入/模块”,插入模块2。

(3)录入代码如下:

Sub Macro2()

Application.ScreenUpdating = False

Sheets("贴试场桌").Select

Dim n,i As Integer ’定义整型变量用于循环操作及定位单元格

Dim nn As String ’定义字符串变量存放定位单元格的变量

Dim row1 As Integer ’定义整型变量存放“贴试场桌”表的原始行数

Dim row2 As Integer ’定义整型变量存放为每一位考生记录插入“栏头”和“分割线”后“贴试场桌”表的行数

Dim c1,c2 As String ’定义字符串变量存放“试场安排”表中试场教室

Dim s As String ’定义字符串变量存放插入“栏头”和“分割线”后“贴试场桌”表的最后一行

’以下代码用于为“贴试场桌”表中的每一位考生记录插入“栏头”和“分割线”

row1 = Sheets("贴试场桌").[a1].CurrentRegion.Rows.Count

n = 1

Do While n

n = n + 3

nn = Trim(Str(n))

Rows(nn + ":" + nn).Select

Selection.Insert Shift:=xlDown

Selection.Insert Shift:=xlDown

Range("A1:J2").Select ’根据表的大小自行设置“分割线”和“栏头”的单元格范围

Selection.Copy

Range("A" + nn).Select

ActiveSheet.Paste

Loop

’以下代码用于为“贴试场桌”表中的不同试场后插入分页符row2 = Sheets("贴试场桌").[a1].CurrentRegion.Rows.Count

For i = 3 To row2 Step 3

c1 = Trim(Cells(i,1).Value)

c2 = Trim(Cells(i + 3,1).Value)

If c2 c1 Then

Cells(i + 2,1).Select

ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

End If

Next i

’删除最后一行多余的栏头和第一行的“分割线”以便方便排版打印

s = Trim(Str(row2))

Rows(s + ":" + s).Select

Selection.Delete Shift:=xlUp

Rows("1:1").Select

Selection.Delete Shift:=xlUp

End Sub

五、启用和运行宏

为了使宏代码正常运行,可单击“选项”按钮,在弹出的“Microsoft Office 安全选项”对话框中选择“启用此内容”选项,单击“确定”按钮。Office 2003或以前的版本,请在“工具”菜单中将宏的安全性级别设为“低”或“中”。

设计好“试场安排”表和“贴班级教室”表,然后执行命令:“工具 / 宏 / 宏? /”,选择Macro1即可生成“贴班级教室”表即学生所在试场的去向表,把此表复制两份,分别改名为“贴试场门外”表和“贴试场桌”表,在“贴试场桌”表的第一行前插入一行,在插入的第一行设计好分割线后才能执行命令:“工具 / 宏 / 宏?/”,选择Macro2此时即生成贴试场桌子标签的打印工作表。