2024年5月30日发(作者:)
巧用Excel制作带音效的电脑摇奖程序
文章编号:1003—5850(2011)07—0052—03
巧用Excel制作带音效的电脑摇奖程序
Making Computer Ernie Program with Sound Effect by Using Excel
马致明 杨婷婷 艾克拉木・牙合甫
( 新疆师范大学计算机科学技术学院鸟鲁木齐830054)( 新疆师范大学学生处鸟鲁木齐830054)
【摘 要】电脑摇奖软件是使用较多的软件之一,通过巧用Excel中的数据库功能和VBA编程功能制作了一款
带音效的电脑摇奖程序,只要在Excel工作表中输入参与摇奖者的信息就可以开始滚动摇奖,并能自动记录有关
中奖信息,简单又实用,就其特色和制作方法作了详细的介绍。
【关键词1 Excel,VBA编程,摇奖程序,数据库,音效
中图分类号:TP311 文献标识码:A
ABSTRACT Computer ernie software is one of the popular software.A computer ernie program with sound effect has been
developed by using Excel VBA and database function.The user could simply start the ernie program after filling the message in the
sheet of the Excel,and the lottery winner’S message can be recorded automatically.The features and making method of the simple
and practical program has been introduced in the paper.
KEYWORDS excel,VBA programming,ernie program,database,sound effect
近年来在电视娱乐节目以及单位活动中常常见到
利用电脑来摇奖,为此一些商家也不失时机地推出了
一
2程序功能及特色
本程序在Excel工作表界面中动态呈现滚动摇奖 批抽奖软件、摇号软件、摇房软件等。
因本单位活动需要,笔者巧用Excel的数据库功
能和VBA编程功能制作了一款简单、实用且带有音
效的电脑摇奖程序,使用后效果良好,活跃了活动气
氛,得到了活动组织者和参与者的好评。现将其设计思
想和制作方法介绍给各位,希望对大家能有所启示。
过程,并在另一个工作表中动态记录中奖者信息,实现
摇奖软件的相关功能,可满足各类用户的有关需求。
2.1程序功能
程序运行界面如图1
所示。在“摇奖程序”工作
参与薯葵篝 茭着 :
董霄
: 囊 童
1 Excel的数据库功能和VBA编程
1.1 Excel的数据库功能
表的A2单元格起输入姓
名、手机号码或身份证号
码等参与摇奖者的个人信
息,在C3单元格中输入每
“开始”按钮就可启动摇奖
i
李小劳 每秒呈理的人量:
张有意 2张育喜 :20
.
S 孙永桢
‘ 牙生江
马艺一
马艺飞
奉次的幸运之量是:
轰有击
霄堆枘
周亮亮 j
厂一
r- -—厂
1丁文玉
Excel是微软开发的一款电子报表软件,用其创
建的工作簿类似于数据库文件,其中的工作表Sheet
实际上就是一个二维关系表Table,各个表之间具有
秒呈现的人数,然后单击
12
程序,此时在A列中不断
有红色的边框在上下跳
车光辉
阿力木
丁文玉
’ t班 婆 ■]tZ; J《 簟 年一
关联性;恰当地利用其可视化编程环境设计输入输出
界面就可以创建一个数据库应用程序。
1.2关于VBA编程
图1运行界面
跃,同时C6单元格中不断滚动呈现对应的参与摇奖
者,滚动速度由每秒呈现的人数决定,其值在程序启动
后还可随时改变。
当单击“停”按钮后,滚动停止,被红色边框选中的
在微软的Office家族中集成了一种加强其功能
的语言VBA(Visual Basic for Application)。VBA给
使用者提供了对软件进行二次开发的可能性,利用
VBA开发者可以在Office中添加控件等用户接口元
就是本次中奖者,C6单元格同时呈现该中奖者,B列
相应行上有该中奖者被抽取顺序号,同时在“中奖者信
素,通过这些控件应用程序可以得到用户的请求并做
出响应。在Excel中适当地使用VBA编程可以大大增
强其交互功能和数据库功能,达到意想不到的效果,本
文介绍的带音效的电脑摇奖程序就是一例。
息”工作表中记录相关信息,内容及界面如图2所示。
2.2程序特色
启动摇奖后伴随着激情音乐一个红色的边框在所
有参与摇奖者之间不断地随机跳跃,其速度可以由用
* 2011—03—18收到,2011—04—26改回
** 马致明,男,1964年生,教授,硕士研究生,研究方向:计算机软件及CAI方面的教学和研究。
第24卷第7期 电脑开发与应用
Dim Stoped As Boolean,k As Integer
Private Sub开始Click()’单击“开始”
一
Dim AllNum As Integer,WinnerNum As Integer
Dim T As Single,i As Integer
If Val(Range( C3 ))<1 Then Range(,,C3 )=10’保
证人数
While Range( A”&AllNum+2)<> ’统计人数
AnNam=A11Num+1
图2中奖者信息界面
Wend
If AllNum=0 Then
户指定并随时改变;叫停后伴随着幽默笑声中奖者浮
出水面,相关信息自动记录在另一个工作表中;若要求
中奖者不能重复,则摇奖时保留B列已中奖者信息即
可,若允许中奖者可以重复,则摇奖时删除B列已中
奖者信息即可,操作十分方便;当关闭此文档时,所有
信息将自动保存。
3程序设计
3.1程序模块的建立
启动Excel,删除Sheet3工作表,并将前两个工作
表的标题依次改为“摇奖程序”和“中奖者信息”。打开
“工具/宏/Visual Basic编辑器”选项,进入宏编辑窗
口,此时工程资源管理器窗口中有Sheet1、Sheet2和
ThisWorkbook 3个默认模块,打开“视图/属性窗口”,
将两个工作表的名称改成跟其标题一样,此时两个工
作表模块名称也将随之变成“摇奖程序”和“中奖者信
息”。
3.2编写宏代码
用VBA编写的代码称为宏代码,本程序只用到
了“摇奖程序”工作表模块和ThisWorkbook工作簿模
块来编写相关代码,其中前一个模块用来完成摇奖及
中奖信息记录,后一模块用来完成退出时的自动保存。
3.2.1工作表模块 .
进入“摇奖程序”工作表,在A1、B1和C1单元格
分别输入“参与摇奖者”、“已中奖者”和“摇奖”,从A2
单元格起输入参与摇奖者的姓名或电话号码等信息
(中间不能有空行!),在C2单元格输入“每秒呈现的
人数:”,在C3单元格输入对应的数值(如10),在C5
单元格输入“本次的幸运之星是:”。
通过“视图/工具栏”打开“控件工具箱”,在C列
第6行以后分别添加两个按钮;右击按钮打开属性窗
口,将按钮的标题依次改为“开始”和“停”,同时将两个
按钮的名称改成与其标题一样。双击某个按钮,进入
“摇奖程序”模块的代码窗口,输入以下代码;
Declare Function PlaySound Lib winmm.dll Alias
PlaySoundA (ByVal lpszName As String,ByVal hModule As
Long,ByVal dwFlags As Long)As Long
MsgBox”缺少摇奖对象J ,vbCritical,”注意
Exit Sub
End If
For i=2 To AllNum+1’统计已中奖者人数
If Range(”B”&i)<>””Then WinnerNum=
WinnerNum+1
Next i
If WinnerNum—AllNum Then’避免死循环
MsgBox 所有人均已中奖J”,vblnformation, 提
醒”
Exit Sub
End If 、
Stoped=False
停.Enabled=True
开始.Enabled=False
PlaySound ActiveWorkbook.Path&”\音效1.wayt;,
1,l
Randomize
While Not Stoped’循环滚动
T=Timer
Do’延时控制
Loop While Time卜T<1/Val(Range(”C3”))
oD’随机摇奖,同时避免已中将者再次中奖
k=Int(Rnd*A11Num)+2
Loop While Range(”B &k)<>””
Range(”A1:A”&AllNum+1).Borders.Value=1’
取消边框Range( C6 )=Range(”A &k)’中奖人信息
Range( A”&k).Borders.Value=7’加边框
Range(”A”&k).Borders.Color=vbRed’边框变
红色
oDEvents
Wend
End Sub
Private Sub停ClickO’单击 停”
Static n As Integer,m As Integer
n—n+1
Stoped=True
Range(”BJJ&k)=n 8LRange(”C6”)’显示在已中奖者
由
巧用Excel制作带音效的电脑摇奖程序
with中奖者信息
While.Range( A”&m+1)<> ’统计已中奖人
数
m=m+1
Wend
.
数Rnd随机产生下一位呈现者所在的行号:
k=Int(Rnd*A11Num)+2
k的范围是[2,AllNum+1],因为第1行是标题
行,所以k的范围刚好可以涵盖所有参与抽奖的人。在
Range( A &m+1)一”第”&n&”位: &Range
循环体中不断变换k的值,利用Range(”A &k)就可
以实现随机抽取。
(”C6 )
.
Range(”B”&m+1)一Format(Now,”dddddd,hh:
3.3.3 对选中者的突出显示
mm:ss”)
If n=1 Then’中奖批次:新批次
.
Range(”C”&m+1)=Val(.Range(”C”&m))+
1
Else’中奖批次:现有批次
.
Range(”C”&m-I-1)一.Range(”C &m)
End If
End With
PlaySound ActiveWorkbook.Path&”\音效2.way”,
1,1
停.Enabled=False
开始.Enabled—True
End Sub
3.2.2工作簿模块
双击工作簿模块“ThisWorkbook”,进入代码窗口
后输入以下内容:
Private Sub Workbook
BeforeClose(Cancel As Boolean)
—
ThisWorkbook.Save’自动保存
End Sub
3.3关健技术
3.3.1 切换速度的控制
多长时间后滚动呈现下一位,其快慢由C3单元
格中每秒呈现的人数来控制。
动态效果的实现一般需要计时器控件,但VBA
不支持该控件。虽然Win32API中的定时器函数
SetTimer()与KillTimer()可以弥补这一缺陷,但使用
起来非常麻烦,需要在标准模块中声明这两个繁琐的
API函数,并编写相应的定时器事件处理子程序。
通过探索和实践,笔者找到了解决该问题的一个
巧妙方法:利用VBA自带的Timer函数,此函数返回
的是一个时刻值(从子夜开始的秒数),测出两个时刻
即可得经历的秒数;在代码中用一个闲置循环进行等
待,等到设定的时间后再执行后续代码,就可达到控制
切换速度的目的。
T—Timer
Do
Loop While Timer-T<l/Val(Range( C3 ))
3.3.2随机抽取一位并呈现
先算出参与抽奖的人数AllNum,再利用随机函
为了让用户能够看到滚动显示中呈现的用户的变
化情况,本程序对滚动过程中的选中者进行了突出显
示,即添加红色边框。
Range( A”&k).Borders.Color=vbRed Range( A &
k).Borders.Value一7’加边框
但在加新边框之前得取消原有的红色边框:
Range(”A1:A”&AllNum+1).Borders.Value=1
3.3.4背景音效的播放
虽然Exce1支持插入音效对象,但通过程序对该
对象进行播放控制还是比较麻烦。为此,本程序选用
win32API函数sndPlaySound来播放wav格式的背
景音效,以营造现场气氛。用该函数后若无指定音效文
件,程序也不会出错,容错性好。
3.4运行摇奖程序
回到“摇奖程序”工作表,点击控件工具箱中的“退
出设计模式”按钮,关闭属性窗口和控件工具箱,保存
工作簿后即可体验独具特色的带音效的Excel摇奖程
序。
需要指出的是:为了防范宏病毒对计算机的侵害,
在Office中的“工具”菜单中对宏的安全性设置了相
应的安全级,只有将安全级设置成“低”或“中”,重新打
开相应的Excel文件,并在系统提示的“安全警告”对
话框中选择“启用宏”(当设置成“低”时不会出现此对
话框),这样才能在Excel中启动宏代码,体验程序的
运行效果。
4结束语
限于篇幅,本文介绍的程序没有涉及根据用户需
求同时抽取多位中奖者,感兴趣的读者不妨自己去完
善相应的功能,或通过Email(mzm82@163.corn)跟作
者探讨。
参考文献
[13 李政,梁海英,李吴.VBA应用基础与实例教程
[M].北京:国防工业出版社,2005.
[23 马致明,木沙江・加帕尔.巧用VBA制作121算练习课
件[J].中国教育信息化,2008,13(6):49.51.
发布评论