第六章 竞赛评分模板
我们常在电视中看到各种竞赛节目。如青年歌手大赛。比赛
内容、比赛形式、比赛规则各种各样,但多数采取评委现场
打分的办法决出胜负或排出名次。评分办法一般是在多个评
委所打的分数中,去掉一个最高分,去掉一个最低分,其余
的取平均分,即为某选手一个单项的得分。竞赛的项目可能
有多个,每个项目的最高分可能不同,各项总分之和为选手
的总得分。最后根据每位选手的总得分排出名次。
在此过程中,用 Excel和 VBA做一个模板,可以轻松地解决这
一问题,记分、算分、排序和打印都非常方便。下面具体介
绍模板的设计和使用方法。
?6.1 模板的结构设计
?6.2 工具栏及其按钮的定义与控制
?6.3 通用模块代码设计
模板的结构设计
?6.2.1 工作簿的 Open事件代码
?6.2.2 工作簿的 BeforeClose事件代码
?6.2.3 工作簿的 SheetActivate事件代码
通用模块代码设计
?6.3.1,统计”
?6.3.2,汇总”
?6.3.3,增项”
?6.3.4,还原”
模板的结构设计
? 总体上, 竞赛评分模板是一个 Excel工作簿 。 工作簿上设计一个, 信息, 工
作表, 一个, 总分, 工作表, 若干个, 项目, 工作表, 还有一个自定义工
具栏 。
?, 信息, 工作表用来设置选手人数, 评委人数和竞赛项目数等信息, 它的
格式可任意设置, 数据根据实际情况确定, 但各项信息所在单元格地址与
编程有关, 不要改动 。
?, 总分, 工作表用来存放选手各单项分, 总得分和排名信息 。 它在设计时
只是一个空表 。 当执行, 汇总, 程序时, 自动生成有关信息 。
? 各, 项目, 工作表按, 第 1项,,, 第 2项,, …… 命名, 以便于程序处理 。
我们只需要设计出, 第 1项, 工作表, 其余的在需要时随时通过, 增项, 程
序生成, 不用时通过, 还原, 程序删除 。
?, 第 1项, 工作表如图 6.1所示 。
? 其中, 第一行从 B列开始依次输入评委姓名, 之后是, 平均分,, A列从第
二行开始依次输入选手姓名 。
? 最后, 根据自己的喜好设置不同单元格的背景, 字符颜色和网格线 。
? 自定义工具栏的目的是为了操作方便 。 工具栏命名为, 比赛评分,, 上面
定义四个命令按钮:, 统计,,, 汇总,,, 增项, 和, 还原, 。, 汇
总,,, 增项, 和, 还原, 功能前面已提到过,, 统计, 的用途是对指定
的选手求单项平均分, 即在各位评委的打分中, 去掉最高分和最低分并做
上颜色标记, 求出平均分 。
6.2.1 工作簿的 Open事件代码
对工作簿的 OPEN事件编写具体代码 。
程序中,首先建立一个工具栏,命名为, 比
赛评分, 。然后,在工具栏上添加四个命令按
钮:, 统计,,, 汇总,,, 增项, 和, 还
原,,分别指定要执行的过程:, tj”,“hz”、
“zx”和, hy”,这四个过程在通用模块(模块 1)
中定义(见第三节)。最后,设置工具栏的可
见属性,选择, 信息, 为当前工作表,使工具
栏, 统计, 按钮不可用
6.2.2 工作簿的 BeforeClose事件代码
BeforeClose事件在工作簿关闭之前产
生, 在此删除, 比赛评分, 工具栏 。
Private Sub Workbook_BeforeClose(Cancel
As Boolean)
Application.CommandBars(" 比 赛 评 分
").Delete
End Sub
6.2.3 工作簿的 SheetActivate
事件代码
SheetActivate事件在工作簿的当前工作表改变时产生, 在此对工具
栏中按钮的可用性进行控制 。 如果当前工作表为, 总分, 或, 信
息,, 则使工具栏, 统计, 按钮不可用, 否则可用 。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If ActiveSheet.Name =,总分, Or ActiveSheet.Name =,信息,
Then
butt1.Enabled = False
Else
butt1.Enabled = True
End If
End Sub
6.3.1, 统计,
统计当前工作表 ( 竞赛的某一项 ) 任意选手的平均分, 并用不同颜色
标记最高, 最低分 。
在, 信息, 工作表的 B2单元格取出评委人数, 在当前工作表中指定选
手的行中, 对各位评委所打分数进行累加, 挑出一个最高分一个最
低分, 对所在的单元各设置不同的背景颜色, 以示区别, 最后求出
平均分, 填入, 平均分, 列, 并设置平均分单元格另一背景颜色 。
编写具体代码 。
假设有 8位评委,10位选手参赛,“第 1项”满分为 10分,各评委给
1号选手的打分已输入工作表对应的单元格,单击“统计”命令按
钮,就可以标记出该选手的最高分、最低分,并把平均分填入指定
的单元格。各位选手的打分输入并统计之后,得到如图 6.2所示的结
果。假设“第 2项”满分为 20分或“第 `3项”满分为 5分,各评委给
各位选手的打分输入并统计之后,将会得到不同的结果。
6.3.2,汇总”
该程序段对每位选手的各项得分进行累加, 得到总分, 并按总分排出名次,
结果填入, 总分, 工作表 。
首先删除, 总分, 工作表原有的内容 ( A到 Z列 ), 从, 信息, 工作表中取出
比赛项目数和选手人数, 将, 第一项, 工作表的 A列 ( 选手名 ) 复制到
,总分, A列 。
然后用循环程序将每个项目对应工作表的, 平均分, 按顺序复制到, 总分,
工作表 。 方法是先将, 平均分, 列拷贝到剪贴板, 再将剪贴板内容粘贴到
,总分, 工作表的指定列 。
接下来修改列标题, 添加, 总分,,, 名次, 列标题, 设置列标题格式 ( 水
平居 中, 背景和字符颜色 ), 将求总分公式填充到, 总分, 列, 设置, 总
分,,, 名次, 列边框 。
最后, 按总分排序并填写, 名次, 。
编写具体代码 。
假设 10位选手“第 1项”、“第 2项”、“第 3项”的评委打分已输入并得到
相应的平均分,单击“汇总”命令按钮,执行上述代码,就可以得到如图
6.3所示的结果
6.3.3,增项”
?该程序段在当前工作簿中添加工作表, 以便输入和统计
某项目信息 。 前面提到, 每个项目对应一个工作表, 项
目可随意增减 。
?,增项, 的具体方法是将工作表, 第一项, 复制到当前
工作簿最后一个工作表的右边, 然后对工作表重新命名,
修改, 信息, 工作表中的项目数, 清除单元格原有内容
并设置白色背景 。 编写具体代码 。
?比如, 在已有, 第 1项,,, 第 2项,,, 第 3项, 工作
表的基础上, 单击, 增项, 按钮, 执行上述代码, 就添
加了, 第 4项, 工作表, 并修改了, 信息, 工作表的项
目数信息 。 新增的工作表包含了评委名和选手名等基本
信息 。
6.3.4,还原”
该程序段在当前工作簿中删除, 第 1项, 以外的项目工作表, 只保留
,信息,,, 总分, 和, 第 1项, 三个工作表, 并设置, 信息, 工
作表的项目数为 1。 目的是为重新使用做准备 。
编写具体代码 。
在图 6.3所示的状态下, 单击, 还原, 按钮, 执行上述代码, 出现一个
如图 6.4所示的对话框 。
按提示, 如果确实要删除指定的工作表, 单击, 删除, 按钮, 否则单
击, 取消, 按钮 。
单击, 删除, 按钮后,, 信息, 工作表的, 项目数, 被置成 1。
注意:单击, 取消, 按钮, 虽然工作表未被删除, 但, 信息, 工作表
的, 项目数, 也被置成 1,会出现不一致的情况, 需要手工修正
,项目数, 。
以上设计完成后, 将将工作簿另存为 Excel模板 。 打开模板就可以直接
使用, 如果需要保存结果, 可另存为一个文件 ( 工作簿 ) 。
图片