邓建华 李燕 苏州科技学院 215011
高校教师在每学期结束时都要按照要求对学生课程考核成绩进行统计、分析,并对课程教学过程与效果进行总结,填入课程教学小结表。一般的课程教学小结表是Word文档,Word的数据处理能力不如Excel强大,教师在学生考核成绩统计分析时需先要在Excel表中进行[1,2],然后再手工复制到课程小结表中,重复和繁琐的手工操作很容易导致出错。
针对上述问题,这里提出应用VBA编写一段宏编码实现Excel学生考核成绩分析结论分析数据自动填入到课程教学小结表的技术。
VBA是一种最好的微软通用应用软件脚本语言,包含在Office应用软件中,所以通过VBA脚本语言对Office各模块基本功能进行扩展以更好地为教学管理提供帮助,提高工作效率。
VBA脚本语言[3]与以前版本的XLM宏语言不同,VBA代码更容易阅读和理解。VBA语言的基础是Visual Basic语言,具有易学可移植的特点;VBA有一个面向对象的编程环境,它只能处理对象,VBA所支持的各模块对象模型内嵌在Office软件内。
Word和Excel的对象模型是一种层次关系,Excel在主应用程序(Application)对象内包含子对象:工作簿对象(Workbook)、工作表对象(Worksheet)及大量的内部函数对象等100多类;同样VBA几乎可以响应Word对象的每个动作,Word的任何元素如文档表格段落、域及书签等都可以用相应封装入对象。在Word主应用程序(Application)对象中包含了如Document、Windows、Selection等对象。以课程教学小结表自动生成程序段中需要用到的主要对象有:
2.1.1 需要用到的主要Excel模块对象
(1)工作簿(Workbook)对象
一个工作簿(Workbook)对象实际上就是一个Excel文件,如果学生成绩统计分析的文件名是“TEXTANLASYS.XLS”如在该文件中使用课程小结表自动生成的宏,则该文件为当前活动的工作簿(Workbook)对象。
(2)工作表(Worksheet)对象
每个工作簿(Workbook)对象上可以有多个工作表(Worksheet)。在默认情况下,Excel的当前工作簿上有名为Sheetl,Sheet2,Sheet3三个工作表.并且Sheetl为当前工作表。如果想使Sheet3成为当前工作表,则可使用下列语句:
ExcelApp.Worksheets(“Sheet3”).Activate’ExcelApp为Excel.Application对象
(3)单元格(Cell)对象
工作表(Worksheet)对象中的单元格(Cell)。它是以行Row和列Col作为参数的。如下语句可以实现对某位置单元格赋值:
Cell(3,4)=5 ’将第三行第四列(第D列)的单元格赋值5。
2.1.2 需要用到的主要Word模块对象
(1)Document对象
一个Document对象就表示一个Word文档,如要在VBA中通过Excel程序打开当前目录下需要填写分析数据的课程教学小结表Word文档“kcxj.doc”,则可编写语句:
Set WdApp = CreateObject("Word.Application") ’打开Word应用程序
Set aDoc = WdApp.Documents.Open(ActiveWorkbook.Path & "/ kcxj.doc ")’ aDoc代表打开的课程教学小结表文档。
(2)区域(Range)对象
Range对象代表文档中的一个特定范围,在Visual Basic过程中使用Range对象可以定义文档的某一部分,然后对该区域进行一些操作,例如插入文字或应用格式。
(3)表格(Table)对象
Table对象代表选定内容范围或文档中的某个表格。因为在文档中往往有多个表格,往往需要用到表格集合对象加下标的方式来定位,如:使用下列语句可以对当前文档的某个Table对象的某单元格赋值:
aDoc.Tables(1).Cell(3, 2).Range.InsertAfter Sheet2.Cells(2, 2)’表示对aDoc中表格1的第三行、第2列的单元格赋值为当前Excel文件Sheet2中Cells(2, 2)的值。
课程教学小结表有两个方面的主要作用:一是教师通过总结课堂教学过程中的经验和体会,并在定性评价的基础上对教学设计提出合理化建议。二是教师通过对学生平时、考核成绩的定量统计分析对学生成绩及试卷质量进行评价,获得学生掌握知识程度及优化试卷内容思路。课程教学小结表基本结构除包含课程基本信息等文字描述内容以外,需要定量统计分析的数据结构见图1。
课程教学小结表主要需填写的统计分析数据有:
(1) 授课班级学生平时、考核及总评成绩的各分数段的分布情况及标准差,用表格表示;
(2) 试卷分析指标主要包括:题目的难度、可信度等指标,也用表格表示。
这些值事先都要在Excel中计算出来。然后自动从Excel工作表中自动填写到课程教学小结表指定的表格单元格内。
一般一套试卷共有大题4~6类,小题多于20题,以往教师手工计算学生考核得分时,往往因为批改试卷量大而比较容易算错,经常会出现多计或少计的情况,这对学生很不公平。现在利用Excel自动计算的功能,教师在批改完某个学生的试卷后,首先在Excel中进行每个学生考核成绩的统计,可以很好的克服上述问题;同样的Excel强大的统计及自编公式功能使教师方便的求均值、标准差及绘制成绩分布曲线图等;
但是,Excel的文字处理及表格表示没有Word灵活,所以大部分高校的课程教学小结表多是Word文档,这就需要把上述Excel表中的分析数据填入到Word文档中,下面就是应用VBA编写的一段宏编码来实现该功能的方法。
(1)首先,把在进行考核成绩统计分析的工作簿中建立三个工作表,名称分别为:学生信息、成绩输入及成绩统计与试卷分析;
(2)在成绩输入表单中输入每个学生的试卷各大题得分、平时成绩、实验成绩,按照成绩所占比例计算出总评成绩;
(3)利用Excel的内部函数及强大的单元格计算能力,算出小结表需要填写的分析数据:各分数段人数、百分比、平均值、标准差及难易度等[5,6];
(4)打开excel的“工具”菜单,单击菜单项“宏”,在跳出的对话框中点击“创建”按钮,然后就打开了VBA编程环境界面,在代码窗口建立代码。
输入上述代码段后就建立了新的宏过程filldoc(),然后执行就可以完成自动把数据导入课程小结表的功能。
图1 课程教学小结表数据统计分析结构
当Word表格合并单元格比较多时,就不能从Excel直接进行整体复制粘贴,所以这给教师手工填写课程小结表带来不便,这里利用VBA语言编程很方便地实现了把Excel单元格数据自动填入课程教学小结表中,只要点击一下鼠标就可以轻易地解决重复和繁琐的手工操作,减轻了教师的工作负担,提高了工作效率。
[1] 金文子,李永凡.在 ExceI中利用VBA程序进行学生成绩统计[J].电脑知识与技术(学术交流).2007,4(20):554~555.
[2]李影.用Excel实现成绩统计与试卷分析[J].长春大学学报.2009,19(10):55~57.
[3]马春虎,关丽华,张晓伟.VBA在成绩管理中的应用[J].承德医学院学报.2006,23(1):49~53.
[4]王川.中文版Office2000 VBA一册通[M].北京:人民邮电出版社.2000,34~121.
[5]张效锋,刘巍.基于方差分析和相关分析的学生学科成绩的比较研究[J].白城师范学院学报.2009,23(3):20~22.
[6] 赵红梅.北京电大学生成绩分析系统的设计与实现[D].北京:北京工业大学.2008.21~23.