基于ExcelVBA的自动生成试卷系统设计
作者:王凡帆
来源:《电脑知识与技术》2010年第11
        摘要:通过对ExcelVBA的研究,采用VBA的二次开发技术,设计了一个自动组卷系统,由题库将试卷自动生成Word文档,较好地解决了手工出卷的繁琐和不科学性,提高了教师工作效率。
        关键词:题库;VBA;自动生成试卷
        中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)11-2650-03
       
        The Design of System about Automatic Generation of Test Paper Based on Excel VBA
        WANG Fan-fan
        (Hainan College of Economics and Business, Haikou 571127, China)
        Abstract: Through researching the Excel VBA, using the re-development technology of VBA, has designed an automatic group for volume system, produces automatically by the question bank the examination paper the Word documents, and solved well that has made examination by hand volume tedious and unscientific, improved the teacher's work efficiency.
        Key words: question bank; VBA; automatic group for volume
       
        目前,许多老师在出卷时还是采用手工出卷方式,临时东拼西凑试题,有时甚至将往年的试卷稍加修改而成,这样难免造成可用试题数量极少、试题使用的重复性、对全部知识点的覆盖面差等现象。尤其对于大多数学校都要求教考分离,如果还采用这种手工出卷的方式,费时费力不说,更重要的是难以保证其科学性和公正性。对此,本文通过Excel创建试题库,并利用VBA工程来实现自动生成一份完整的Word 文档试卷。
        1 设计思路
        1.1 VBA简介
        VBA是内嵌在Office应用套装程序中的编程语言,VBA程序的运行需要依托于它的主应用程序(WordExcelAccess),VBAWindows应用软件的通用控制语言,利用VBA可以方便地调用和定制主应用程序的对象,通过VBA的开发,可以方便地实现办公自动化。下面通过ExcelVBA实现考试试卷的自动生成。
        1.2 功能设计
        本系统要求在Excel工作簿中建设试题库,本例中根据组卷的题型要求共创建了选择题判断题填空题简答题问答题工作表,并创建一个试卷生成表工作表设置试卷模板,模板中将生成试卷的各题型的小题数目设置好,然后再通过VBA工程实现试卷随机生成并输出到Word 文档。
        2 系统实现
        2.1 题库设计
        建立一个Excel工作簿文件,分别按题型将题目输入相对应的工作表中,另建立一个试卷生成表的工作表,如图1所示。
        “试卷生成表工作表中A列存放各类题题库中的原始题号数据,B列存放各类题题型数据,C列中是具体各题所对应的题目内容数据,D列是各类题生成试卷后的小题号。在A1单元格中设置一个按钮控制生成试卷”,如图2所示。
        在表头的C1单元格中输入“="2009-2010年第一学期《计算机应用基础》考试试卷"&D1”来设置生成试卷的类别“A”,试卷类别具体在D1单元格中列表存放,生成试卷前选择所需类别就可;B列中输入公式“=IF($A2="","","一、填空题")”来获取与A列中相应的题号所对应的题型;试卷生成表C列存放题目内容,利用IF($A2="","",VLOOKUP($A2,填空题!$A:$C,2,))获取相关联数据,其中“VLOOKUP($A2,填空题!$A:$C,2,)”表示获取与A2单元格中题号“21”一致的填空题表中的A~C列中第二列的数据,即通过此函数可获取到相关的该题号所关联的题目内容存放到C,设置好试卷生成模板,达到了组卷的目的。
        2.2 由题库随机生成试题
        VBA工程中对应每个题型模块设置相应的宏代码实现,下面是填空题的试题生成模块代码:
        Sub 填空题()
        Dim mr As Range
        Dim tk As Integer
        tk = Sheets("填空题").[A65536].End(xlUp).Row – 1 ' 计算出所有填空题的总数
        For Each mr In Range("a2:a11")
        Do
        mr = Int(Rnd() * tk + 1)
        Loop Until Application.CountIf(Range("a2:a11"), mr) = 1
        Next mr
        选择题 ' 调用执行选择题模块代码
        End Sub
        其中 “Sheets("填空题").[A65536].End(xlUp).Row – 1”用于计算题库中填空题的总数目,“Range("a2:a11") ”表示生成试卷表中填空题所存放的区域,“mr = Int(Rnd() * tk + 1)”实现在题目总数范围内随机获取题号。语句选择题表示在此调用执行选择题模块代来生成选择题目内容,其它题型模块代码也是类拟的实现。执行完这些模块代码后就可在试卷生成表中生成一份试卷。
        2.3 生成标准Word文档试卷
        老师的试卷最终是以Word文档输出打印的,“生成试卷按钮要完成的功能是随机从相应题库中抽取一定数量的题目到试卷生成表中,同时按设置格式输出到Word文档,生成一份可打印的Word文档试卷。生成试卷按钮单击事件代码实现如下:
        Private Sub CommandButton1_Click()
        Dim rng As Range
        Dim rDATA As Range
        Dim wd As Word.Application
        Dim ret As Integer
        ret = MsgBox("程序即将开始自动生成试卷!" & vbCrLf & vbCrLf & _
        "现在就开始吗?", vbYesNo + vbInformation, "生成试卷")
        Call 填空题' 调用试卷生成模块代码生成试卷
        If ret = vbNo Then Exit Sub
        Set rDATA = Range(Range("Start").Offset(1, 0), Range("Start").End(xlDown))
        Set wd = CreateObject("word.application")' 创建 Word 实例
        wd.Visible = True' 使 Word 可见
       
        AppActivate wd.Name' 激活 Word 窗口
        With wd
        .Documents.Add
        With .Selection
        .ParagraphFormat.SpaceBeforeAuto = True
        .Font.Size = 18
        .Font.Bold = True
        .Text = [C1]
        .EndKey
        .TypeParagraph
        End With
        With .Selection
        .ParagraphFormat.SpaceBeforeAuto = True
        .Font.Size = 14
        .Font.Bold = False
        .Text = [B1]
        .EndKey
        .TypeParagraph
        End With
        ' 导入 Excel 文本
        For Each rng In rDATA
        With .Selection
        ' 插入分类
        If rng.Offset(0, 1) rng.Offset(-1, 1) Then
        .ParagraphFormat.SpaceBeforeAuto = True' 段前自动行距
        .Text = rng.Offset(0, 1)
        .Font.Size = 14
        .Font.Bold = True 'wdToggle' 切换文本为加粗
        ' 设置底纹灰度级 25
        .ParagraphFormat.Shading.BackgroundPatternColor = wdColorGray25
        .EndKey ' 移到行末
        .TypeParagraph ' 换行
        .Font.Bold = wdToggle
        ' 取消底纹灰度级
        .ParagraphFormat.Shading.BackgroundPatternColor = wdColorAutomatic
        End If
        ' 插入问题表格制作excel手机版下载
        .ParagraphFormat.SpaceBeforeAuto = True
        .Font.Size = 10.5
        .Font.Bold = False ' wdToggle

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