蓝布编程网

分享编程技术文章,编程语言教程与实战经验

Excel VBA 编写简单的抽奖小程序

大家好,我是捌贰春秋VBA,今天运用字典跟窗体控件的相关知识,带大家编写一个简单的抽奖小程序。

窗体控件功能介绍

1、切换按钮ToggleButton1:开始抽奖、暂停抽奖,默认Value值为False即按起状态。

2、姓名显示区Label1:用于显示抽中人员的姓名。

3、中奖名单ListBox1:罗列抽中人员的名单,并进行编号。

4、初始化按钮CommandButton2:恢复抽奖名单,清空中奖人员列表。

工作表准备

1、工作表1人员名单:参与抽奖人员,每次抽中的人员从人员名单中删除。

2、工作表2备份:用于初始化系统,即恢复参与抽奖的人员名单。

代码

1、模块中自定义公共变量,编写整理抽奖名单的Sub

Public n%, d As Object

Sub 整理抽奖名单()

Dim arr, i%

Set d = CreateObject("scripting.dictionary")

arr = Sheets("人员名单").Range("A1").CurrentRegion

For i = 2 To UBound(arr)

arr(i, 1) = i - 1

Next i

Sheets("人员名单").Range("A1").CurrentRegion = arr

'序号为关键字,姓名为条目构建字典

For i = 2 To UBound(arr)

d(arr(i, 1)) = arr(i, 2)

Next i

'获取序号的最大值

n = UBound(arr) - 1

End Sub

2、开始抽奖、暂停抽奖

Private Sub ToggleButton1_Click()

On Error Resume Next

Dim K, rng As Range

Call 整理抽奖名单

If Me.ToggleButton1.Value = True Then

Me.ToggleButton1.Caption = "暂停抽奖"

Do

'随机1至n之间的数字给到变量K,用字典d(K)带出人员姓名

K = WorksheetFunction.RandBetween(1, n)

Me.Label1.Caption = d(K)

DoEvents

Loop Until Me.ToggleButton1.Value = False

Else

Me.ToggleButton1.Caption = "开始抽奖"

Me.ListBox1.AddItem Me.ListBox1.ListCount + 1 & ". " & Me.Label1.Caption

'从人员名单删除掉已抽中的人员

Set rng = Sheets("人员名单").Range("B:B").Find(Me.Label1.Caption, , , 1)

rng.EntireRow.Delete

'移除字典所有的关键字

d.RemoveAll

Call 整理抽奖名单

End If

End Sub

3、初始化系统

Private Sub CommandButton2_Click()

If MsgBox("是否初始化系统?抽奖记录将被清除,不可恢复!", vbYesNo) = vbNo Then Exit Sub

Me.ListBox1.Clear

Me.Label1.Caption = "显示区"

Sheets("备份").UsedRange.Copy Sheets("人员名单").Range("A1")

End Sub

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言