基于VBA的单项选择题练习文档的设计

时间:2022-07-14 04:26:25

基于VBA的单项选择题练习文档的设计

摘要:文中在Word 2010中使用VBA实现用于单项选择题练习文档设计。用户可根据需要选择题目进行练习,在单击选项时系统进行正误判断,可以将练习中的部分题目标记,并将这些标记的题目保存为Word文档和Excel工作簿。文中较为详细地描述了VBA在文档中的设计和实现。该设计具有一定的实用价值。

关键词:单项选择题; Word 2010; Excel 2010; VBA

中图分类号:TP317 文献标识码:A 文章编号:1009-3044(2015)05-0095-04

The Design of A Word Document Used to Exercise Individual Choice Questions Based on VBA

XIA Yun

(College of Mathematics and Computer Science, Anhui Normal University , Wuhu 241000 , China)

Abstract: A Word document is designed on VBA in this paper, which can be used to do exercises of individual choice questions. User can use this document to do exercise according to his need, and the document can judge his answer when he clicks one option. User can mark some problems when he is doing exercises, and he also can save the marked problems as a Word document and an Excel file in this document. It is described in this paper how to design and realize the document based on VBA. And the design has some practical value.

Key words: individual choice questions; Word 2010; Excel 2010; VBA

在日常的学习中,特别是在章节学习或者阶段学习结束后,学生们可能会做一些习题进行知识的巩固和检测。因为学习者的学习程度不同,做错的题目可能各不相同,而这些错题可能需要反复强化练习。因此,针对这一情况,文中专门就单项选择题设计了一个练习用的文档。

使用者在使用这个文档时,可以根据自己的需要通过“选择文档”按钮,选择事先存储题目相关信息的电子工作簿,系统将其内容自动加载到Word文档中,使用者可以通过文档中的“上一题”和“下一题”按钮进行题目的切换。在点击答案选项时,即时反馈该题回答正确与否。当然,使用者也可以根据需要直接查看答案,或隐藏答案。当使用者觉得某个题目需要再多次练习时,可以先对该题进行“标记题目”的操作,当文档中需要标记的题目都标记完成后,再选择“保存标记题目”按钮,则会将所有的标记题目保存为Word文档和Excel工作簿,该电子工作簿可以在下次练习时使用。

1 文档外观和功能的设计

1.1 文档外观的设计

文档在设计时为了方便用户的使用,考虑将题目以表格的形式展现。在表格中显示题目的题干、答案选项、参考答案以及备注内容,文档中的表格设计如图1所示。在这个表格中只能显示当前一个题目的相关信息,如果需要显示其他题目,则需要配合使用相应的功能按钮“上一题”和“下一题”进行使用。表格第一列中的第二行至第五行的四个单选按钮控件是事先放置在文档中的。

在表格的上方分两行放置了7个功能按钮控件,第一行是“选择文档”、“上一题”、“下一题”和“标记题目”四个按钮,第二行是“查看答案”、“隐藏答案”和“保存标记题目”三个按钮。两行功能按钮的中间是一个标签控件,该标签控件中的内容为当前练习正在使用的电子工作簿的完整路径。

1.2 功能的描述

“选择文档”按钮被单击后,出现文件选择对话框,便于用户进行练习题目的Excel文件的选择。在标签控件中显示打开文件的完整路径,并将题目加载到内存中,在文档的表格中显示第一题的相关内容。

当题目显示后,用户单击某个单选按钮时,系统将给出评判,表明选择正确与否。

单击“上一题”按钮或者“下一题”按钮时,若存在这样的题目,则进行相关的内容显示,否则显示出错信息。

单击“查看答案”按钮时,则会显示参考答案,如果这个题目有备注内容,则也会进行显示。备注内容一般是题目的解析。

单击“隐藏答案”按钮时,则会将表格中的参考答案和备注中的内容清空。

单击“标记题目”按钮时,是将该题作了标记,准备将该题添加到新的试题工作簿中。

单击“保存标记题目”按钮时,是将所有做标记的题目保存为用户指定文件名的Word文档和Excel电子工作簿,该工作簿可以作为题目库被用户选择,并加载到文档中。

文档在设计时,考虑到使用者使用方便,因此将题目等信息保存为电子工作簿。使用者可以自己按照固定的格式要求,事先将题目的相关信息保存为电子工作簿。当然,使用者也可以使用这个练习文档,在表格中填写相关内容后,使用“标记题目”按钮后,再在表格中重新输入新的内容,然后再单击“标记题目”按钮,如此循环往复。当所有题目都输入并标记后,使用者可以单击“保存标记题目”按钮,则标记的题目将保存为新的Word文档和Excel电子工作簿,这个新文件是由使用者指定存放位置和名称的。

2功能的实现

为了记录题目内容的相关信息,设置了如下的全局变量:表示总题数的变量rowcount,表示当前题目所处行号(即题号值加1)的变量rowno,表示标记题数的变量ctno,分别用于存储所有题目和标记题目的数组arr和errarr。

2.1 文档Open事件的设计

文档打开时,文档中所有的内容需要清空,即标签控件的Caption值为“未选择文件”,单选按钮控件的Value值为False,表格中的内容清空,全局变量rowcount、rowno和ctno设置为0。其中清空表格中的内容具体实现代码如下:

With ActiveDocument.Tables(1)

.Cell(1, 1).Range.Text = ""

For i = 1 To 7

.Cell(i, 2).Range.Text = ""

Next

End With

2.2 命令按钮的事件设计

1)“选择文档”按钮Click事件的设计

单击“选择文档”按钮时,出现图2所示的文件打开对话框,在该对话框中只允许选择单个Excel文件。如果用户选择了某个Excel工作簿文件,该文件的路径被保存至变量filepath,则清空文档中的表格内容,将单选按钮控件的Value值置为False,设置rowcount值为所选取的工作簿文件的工作表Sheet1的总行数,修改rowno的值为2和ctno的值为0。将所有题目信息保存到数组arr中,并在文档的表格中显示第一题的相关信息。

其中,获取指定工作簿中工作表Sheet1的总行数时,首先启动Excel程序,打开Excel文件,再获取表Sheet1有效区域的总行数,最后关闭Excel。具体实现代码如下:

Dim excelobject As Object, r As Long

Set excelobject = CreateObject("excel.application") '启动Excel程序

excelobject.Visible = False '不可见

Set wb = excelobject.Workbooks.Open(filepath, ReadOnly:=True)

On Error Resume Next

r = wb.sheets(1).UsedRange.Rows.Count

GetRow = r

excelobject.Quit

上述Excel工作簿的工作表Sheet1中的内容要求格式如图3所示。

将题目信息保存至数组arr中,其在实现时要求首先启动Excel程序,打开Excel文件,再将有效单元格区域保存至数组arr,最后关闭Excel。具体实现代码如下:

Dim excelobject As Object, wb As Object, i As Long

Set excelobject = CreateObject("excel.application") '启动Excel程序

excelobject.Visible = False '不可见

Set wb = excelobject.Workbooks.Open(filepath, ReadOnly:=True)

cellsstr = "a1:h" & rowcount

arr = wb.sheets(1).Range(cellsstr)

excelobject.Quit

将当前题目写入文档表格中的实现代码如下:

With ActiveDocument.Tables(1)

.Cell(1, 1).Range.Text = Str(rowno - 1) & ". "

For i = 1 To 5

.Cell(i, 2).Range = arr(rowno, i + 1)

Next

End With

2)“上一题”按钮Click事件的设计

首先判断rowno的值是否大于2,若是则将单选按钮的Value值置为False,清空文档中表格的内容,rowno的值减1,再将当前题目写入文档的表格中;否则,出现提示对话框,表明没有题目。

3)“下一题”按钮Click事件的设计

首先判断rowno的值是否小于rowcount,若是则将单选按钮的Value值置为False,清空文档中表格的内容,rowno的值增1,再将当前题目写入文档的表格中;否则,出现提示对话框,表明没有题目。

4)“查看答案”按钮Click事件的设计

首先判断rowno的值是否大于0,若是则在表格中显示答案。在表格中显示答案的代码如下:

With ActiveDocument.Tables(1)

.Cell(7, 2).Range = arr(rowno, 8)

.Cell(6, 2).Range = UCase(arr(rowno, 7))

End With

5)“隐藏答案”按钮Click事件的设计

如果rowno的值大于0,则将表格中参考答案和备注栏清空。

6)“标记题目”按钮Click事件的设计

第1步,检查文档的表格中题目内容、四个备选项和参考答案,只要有一项是空的,则显示出错对话框,并结束;第2步,继续检查参考答案是否为大写或小写字母A到D中的一个,若不是,则显示出错对话框,并结束;第3步,检查该题在errarr数组中是否已存在,若是则结束;第4步,将ctno的值增1,并且将当前文档表格中的题目信息保存到数组errarr中。

正是因为这样的操作,保证了用户可以在文档中输入新的题目。

7)“保存标记题目”按钮Click事件的设计

第1步,显示图4所示的文件的另存为对话框,将用户所设置的文件名和完整路径保存至变量FileName中;第2步,检查文件的类型是否为Word文档,如果不是,则显示相关的出错信息,并结束;第3步,检查文件名为FileName的文档是否存在,若该文档存在且处于打开状态,则将该文档先关闭再删除,如果该文档存在但尚未打开,则删除该文档。第3步的具体实现代码如下:

Set wd = GetObject(, "Word.Application")

wdna = Dir(FileName)

If wdna "" Then

For Each doc In wd.Documents

If doc.FullName = FileName Then

doc.Close

Exit For

End If

Next

Kill FileName

End If

第4步,新建文档,并以FileName命名保存,设置该文档中的内容,即为所有的标记题目的信息errarr数组的内容,再保存该文档并关闭,显示Word文档成功生成的对话框。具体的实现代码如下:

Set wdnw = wd.Documents.Add

wdnw.SaveAs FileName

For i = 1 To ctno

With wdnw.ActiveWindow.Selection

.TypeText Text:=errarr(i + 1, 1)

.TypeText Text:=". "

For j = 2 To 6

If j > 2 Then

.TypeText Text:=Chr(62 + j) & "、"

End If

.TypeText Text:=errarr(i + 1, j)

.TypeParagraph

Next

.TypeText Text:="参考答案:"

.TypeText Text:=UCase(errarr(i + 1, 7))

.TypeParagraph

.TypeText Text:="说明:"

.TypeText Text:=errarr(i + 1, 8)

.TypeParagraph

End With

Next

wdnw.Close True

第5步,修改FileName文件名的扩展名为“xlsx”;第6步,打开Excel,如果有文件名为FileName的Excel文件,则删除;第7步,新建Excel文件,并写入数组errarr中的所有信息,该文件的格式如图3所示,再保存并退出Excel,该步骤的具体实现代码如下:

Set exbk = ex.Workbooks.Add

exbk.SaveAs FileName

For i = 1 To ctno + 1

For j = 1 To 8

rngstr = Chr(64 + j) & Trim(Str(i))

exbk.sheets(1).Range(rngstr).Value = errarr(i, j)

Next

Next

exbk.Close True '保存并关闭工作簿文件

第8步,关闭Excel,显示Excel文件生成成功的对话框。

2.3 四个单选按钮Click事件的设计

首先判断rowno的值是否大于零,如果不是则结束,因为没有相关的题目记录;否则,判断用户所单击的答案选项是否与题目的参考答案相同,如果是则出现图5(a)所示的对话框,否则出现图5(b)所示的对话框。

3 结束语

本文详细介绍了使用VBA开发单项选择题练习使用的文档的方法,以及具体的功能实现。文中所设计的练习文档可以很方便地为用户使用,无需安装其他软件,因为在设计时使用的是Excel文件来保存题目信息,所以使用者在维护修改题目时也较为方便。该文档具有一定的实际应用价值。

参考文献:

[1] 仝海燕, 吕红善, 秦春影,等. 基于vba的交互性习题的设计[J]. 韶关学院学报・自然科学, 2014, 35(6) : 24-29.

[2] 方波, 李亚男, 刘加加 等. VBA在考试系统中的运用[J]. 电脑知识与技术, 2015, 11(8): 48-49.

[3] 解必华, 奚玉梅. 基于VB的Excel打印插件设计及实现[J]. 电脑知识与技术, 2011, 7(6) :1343-1345.

[4] 罗刚君, 杨嘉恺. 来吧! 带你玩转Excel VBA[M]. 北京: 电子工业出版社, 2013.

[5] 裴纯礼. Word教育教学高级应用[M]. 北京: 北京邮电大学出版社, 2013.

上一篇:发电企业数据仓库的设计与实践 下一篇:基于WordPress的网络课程建设研究