第八章 成绩汇总表及
数据导入模板
高校的成绩汇总表是每个学生在校学习期间
各门课程成绩一览表。一般是从各学期、各门
课程的成绩报告单抄写。有了电子形式的成绩
报告单,再有一个电子形式的成绩汇总表,就
可以直接将成绩导入,从而提高工作效率和准
确性。本章介绍成绩汇总表、工具栏的设计以
及数据导入的实现技术。
对于四年制本科生,我们给每个班级建立四
个工作表(每个工作表登记两个学期的成绩),
整个工作簿按班级数建立若干个同样规格的工
作表,所以只要设计出一个工作表,其余的就
可以复制产生。
8.1 工作表设计
8.2 数据导入程序设计
8.3 模板的使用
退 出
8.1 工作表设计
高校的成绩汇总表是每个学生在校学习期间
各门课程成绩一览表。一般是从各学期、各门课
程的成绩报告单抄写。有了电子形式的成绩报告
单,再有一个电子形式的成绩汇总表,就可以直
接将成绩导入,从而提高工作效率和准确性。本
章介绍成绩汇总表、工具栏的设计以及数据导入
的实现技术。
对于四年制本科生,我们给每个班级建立四
个工作表(每个工作表登记两个学期的成绩),
整个工作簿按班级数建立若干个同样规格的工作
表,所以只要设计出一个工作表,其余的就可以
复制产生。
8.1.1 设计第一个工作表
进入 Excel,建立一个工作簿。
定义纸型、设置表格样式、设置单元
格格式、设置列宽度、设置行高度。
8.1.2 复制和修改工作表
在设计好的工作表选项卡上右击,选, 移动或复制工作
表,,然后选中, 建立副本,,位置选, 移至最后,,单击
,确定, 按钮。
可同时选中多个工作表进行复制。既按住 Ctrl或 Shift键,
再单击工作表选择卡。
为便于查看同时又节省空间,工作表可按班级和学期给
工作表重新命名。如,5班 12,6班 56分别表示五班一、二学期
和六班五、六学期的成绩汇总表。
? 注:, 总表, 用文件名来区分年级。如:总表 00、总表 99,
等等。教师报上来的原始, 成绩单, 用文件名来区分年级和
课程。如:成绩单 00导论、成绩单 99数字逻辑,等等。对复
制的工作表,修改学期号、班级号等信息。至此,一个年级
的成绩汇总表格式设计完成。
8.2 数据导入程序设计
这是整个成绩汇总模板的核心。其基
本思想是,在打开成绩汇总模板的同时,
打开需要导入的某门课的“成绩单”工作
簿,在“成绩单”工作簿中选择某班的
“工作表”,单击自定义工具栏的相应按
钮,提取学号、学生姓名或成绩,回到
“汇总表”,单击工具栏的“导入”按钮,
将信息导入汇总表。
8.2.1 建立自定义工具栏
8.2.2 删除自定义工具栏
8.2.3 设置工具按钮的可用性
8.2.4 工具栏按钮代码设计


8.2
8.2.1 建立自定义工具栏
在 单, 工具 |宏, 中选, Visual Basic编辑器,,进入
VBE,单击, 工程资源管理器, 按钮,双击
,ThisWorkBook”模块,打开代码编辑窗口。
对工作簿 Workbook的 Open()事件编写代码。
当工作簿打开时,执行以上代码段,首先建立一
个工具栏,名为, 成绩汇总, 。然后,在工具栏上添
加五个命令按钮:, 提取学号,,, 提取姓名,,
,提取成绩,,, 导入, 和, 帮助, 。通过命令按钮
的 OnAction属性,分别指定五个按钮要执行的过程:
get_no,get_na,get_gd,cj_import,cj_hlp。这五个过程在
,模块 1”中定义(见下文)。
GO
8.2.2 删除自定义工具栏
为不影响 Excel环境,当关闭工作簿时,应当将自定义的工具栏删
除。可以在 Workbook的 BeforeClose事件中定义如下过程实现。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
flg = "tbar_deled"
Application.CommandBars("成绩汇总 ").Delete
End Sub
其中,语句
flg = "tbar_deled"
是设置, 工具栏已删除, 标志。因为我们要在 WindowDeactivate事件中定
义一个过程(下面介绍),设置工具栏按钮的可用性属性,而
BeforeClose事件先于 WindowDeactivate事件。为避免, 找不到工具栏对象,
错误,在 WindowDeactivate过程中,首先通过 flg判断工具栏是否被删除。
GO
8.2.3 设置工具按钮的可用性
在将, 成绩单, 数据导入, 汇总表, 过程中,要同时打
开两个工作簿,当, 成绩单, 工作簿为, 活动, 状态而, 汇
总表, 处于, 非活动, 状态时,应该让, 提取学号,,, 提
取姓名,,, 提取成绩, 命令按钮可用,,导入, 命令按钮
不可用;当, 汇总表, 工作簿为, 活动, 状态而, 成绩单,
处于, 非活动, 状态时,应该让, 导入, 命令按钮可用,
,提取学号,,, 提取姓名,,, 提取成绩, 命令按钮不可
用。
这样,我们分别对 Workbook的 WindowActivate和
WindowDeactivate编程。由于在这两个过程要用到 open过程
中定义的 CommandBarControl变量 butt1,butt2,butt3和
butt4,所以在 ThisWorkbook中要用下面语句声明模块变量。
Dim butt1,butt2,butt3,butt4 As CommandBarControl
同理,用语句
Dim flg As String
声明 flg变量。 GO
8.2.4 工具栏按钮代码设计
在 VBE中选, 插入 |模块, 菜单,插入, 模块 1”,自定义工具栏各按钮
的代码段(过程)均放在, 模块 1”中。
首先,定义模块数组,Dim cj(60)
1.提取学号
,提取学号, 按钮过程为 get_no,它的功能是在已经打开的, 成绩单,
中,按顺序将每位学生的学号存入数组 cj,供, 导入, 按钮的过程使用。
过程中首先判断当前工作表是否为有效的成绩报告单,方法是测试 F29
单元格的内容,如果最左边的 5个字符不等于 " 实考人数 "(注意:第一个
字符是空格),则成绩报告单无效,直接返回。否则,按顺序将 A列,D
列 5到 39行的学号送数组。因为, 成绩单, 中成绩列( F列)从 " 实考人数 "
往后是总结区,所以用 " 实考人数 "作为循环结束标记。
2.提取姓名和成绩
,提取姓名,,, 提取成绩, 按钮的过程与, 提取学号, 按钮过程为类
似,过程名分别为 get_na和 get_gr,编写具体代码。
3.导入
,导入, 按钮过程 cj_import的作用是将数组 cj的数据按顺序填入, 汇总表,
指定的列,因此在这之前要单击选择某一列。
4.帮助
,帮助, 按钮过程 cj_hlp的作用是用 MsgBox函数显示操作说明信息,编写
具体代码。
8.3 模板的使用
? 填写成绩汇总表时,首先打开, 成绩汇总模板,,随即另存
为一个文档。
? 接下来对新文档的内容根据实际需要进行调整。注意,工作
表的框架和格式不要修改。
? 然后,按以下步骤从, 成绩单, 提取数据并导入, 汇总表,,
? ①打开特定年级某门课的, 成绩单, 工作簿。
? ②在, 成绩单, 工作簿中选择某班, 工作表, 。
? ③单击, 成绩汇总, 工具栏的, 提取学号, 或, 提取姓名,
或, 提取成绩, 按钮。
? ④回到, 汇总表,,单击需要放置信息的列 (任意行 )。
? ⑤单击, 成绩汇总, 工具栏的, 导入, 按钮。
? 一般来讲,每个汇总表的, 学号,,, 姓名, 导入一次即可。
注意:, 成绩单, 与, 汇总表, 的学号、姓名以及顺序应该
完全一致。
? 最后,保存当前文档退出。