求Excel抽奖程序,有一个30人的名单,每点击一下按钮就不重复抽取并显示一个姓名,直至30人全部抽完。
发布网友
发布时间:2022-04-23 16:44
我来回答
共3个回答
热心网友
时间:2023-10-09 16:09
你需要再加一个初始化按钮,代码如下(commandbutton1就是你的next,commandbutton2是初始化按钮)
Dim arr(), count
Private Sub CommandButton1_Click()
If count <= 29 Then
n = Int(Rnd * (UBound(arr) - LBound(arr) + 1)) + LBound(arr)
TextBox1.Text = arr(n)
Cells(count + 1, 10) = arr(n) '测试代码可删除
Cells(count + 1, 11) = n '测试代码可删除
count = count + 1
arr(n) = arr(UBound(arr))
If UBound(arr) > 1 Then ReDim Preserve arr(1 To UBound(arr) - 1)
Else
MsgBox "所有人员都已抽完"
End If
End Sub
Private Sub CommandButton2_Click()
ReDim arr(1 To 30)
Randomize
TextBox1.Text = ""
For i = 1 To 30
arr(i) = Cells(i, 1)
Next
MsgBox "已初始化"
count = 0
End Sub追问谢谢老师。但是在调用初始化函数的时候出现了“ 运行时错误424 要求对象”这样的报错,请问这是怎么回事?
追答哪一行报的错,如果是textbox1那一行,那是我自己加的文本框,你按你自己的需要改,我不知道你图姓名那里是什么,如果那里只是一个合并的单元格,那你可以将TextBox1.Text = ""改为Range("K11")=""
同样上面的TextBox1.Text = arr(n)也要改为Range("K11")=arr(n)
热心网友
时间:2023-10-09 16:10
用随机数来实现
需要编写vba代码
随机数代码请参考:
sjs = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
注:sjs就是需要得到的随机数变量
upperbound = 数值上限
lowerbound = 数值下限
热心网友
时间:2023-10-09 16:10
人人都有奖就不用抽了