ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 19166|回复: 30

PPT抽奖程序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-14 13:36 | 显示全部楼层 |阅读模式
大师们,请教PPT里做个抽奖程序怎么弄?801-850   50个号码
抽奖时号码滚动显示,抽中的号码不能被重复抽奖
抽奖---.zip (84.58 KB, 下载次数: 779)

1.JPG
2.JPG
3.JPG
4.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-14 14:45 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-14 15:02 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-14 16:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-18 09:52 | 显示全部楼层
沉了吗?自己顶一下,期待高手指点

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-22 08:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-9-25 11:52 | 显示全部楼层

在最后slide
用放映模式方可抽奖
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '参数是长整形(毫秒数)。Lib “kernel32”标明这个函数是引用kernel32.dll提供的函数。Kernel32.dll是windows的四个核心库之一。是用来延时n毫秒的?
  2. Dim arr, f As Boolean, j%, n%, temp                                     '接受函数返回数组的temp不能 As String
  3. Private Sub CommandButton1_Click()
  4. Dim i%, r%
  5. If IsEmpty(arr) Then
  6.    TextBox1.Visible = True
  7.    TextBox3.Visible = True
  8.    TextBox2.Text = ""
  9.    TextBox4.Text = ""
  10.    TextBox5.Text = ""
  11.    TextBox6.Text = ""
  12.    TextBox7.Text = ""
  13.    TextBox8.Text = ""
  14.    ReDim arr(1 To 50)
  15.    For i = 1 To 50
  16.        arr(i) = 800 + i
  17.    Next
  18.    j = 1
  19.    TextBox4.Text = "三等奖"
  20. End If
  21. If Me.CommandButton1.Caption = "停止" Then
  22.    Me.CommandButton1.Caption = "开始"
  23.    f = True
  24.    'MsgBox f & j                             '因只能在放映模式使用按钮,调试设置变量监控点
  25.    Select Case j
  26.           Case 1
  27.               TextBox5.Text = arr(temp(0)) & " " & arr(temp(1)) & " " & arr(temp(2))
  28.               TextBox1.Text = ""
  29.               TextBox2.Text = ""
  30.               TextBox3.Text = ""
  31.           Case 2
  32.               TextBox6.Text = arr(temp(0)) & " " & arr(temp(1)) & " " & arr(temp(2))
  33.               TextBox1.Text = ""
  34.               TextBox2.Text = ""
  35.               TextBox3.Text = ""
  36.           Case 3
  37.               TextBox7.Text = arr(temp(0)) & " " & arr(temp(1))
  38.               TextBox1.Text = ""
  39.               TextBox3.Text = ""
  40.           Case 4
  41.               TextBox8.Text = arr(temp(0))
  42.               TextBox2.Text = ""
  43.    End Select
  44.    'MsgBox n & j                              '变量监控点
  45.    For i = 0 To n - 1
  46.        arr = Filter(arr, arr(temp(i)), False) '滤除已抽取号码
  47.    Next
  48.    If j = 4 Then
  49.       MsgBox "抽奖完毕!"
  50.       Exit Sub
  51.    End If
  52.    j = j + 1
  53.    TextBox4.Text = Mid("三二一特", j, 1) & "等奖"
  54. Else
  55.    Me.CommandButton1.Caption = "停止"
  56.    f = False
  57.    'MsgBox f & j                             '变量监控点
  58.    n = --Mid(3321, j, 1)                     '抽取奖等个数
  59.    r = Mid("0368", j, 1)                     '抽剩应扣减样本数量
  60.    'MsgBox r                                 '变量监控点
  61.    Do
  62.       Sleep 10
  63.       If f Then Exit Do
  64.       temp = choose(50 - r, n)
  65.       Select Case n
  66.              Case 3
  67.                   TextBox1.Visible = True
  68.                   TextBox2.Visible = True
  69.                   TextBox3.Visible = True
  70.                   TextBox1.Text = arr(temp(0))
  71.                   TextBox2.Text = arr(temp(1))
  72.                   TextBox3.Text = arr(temp(2))
  73.              Case 2
  74.                   TextBox1.Text = arr(temp(0))
  75.                   TextBox2.Visible = False
  76.                   TextBox3.Text = arr(temp(1))
  77.              Case 1
  78.                   TextBox1.Visible = False
  79.                   TextBox2.Visible = True
  80.                   TextBox3.Visible = False
  81.                   TextBox2.Text = arr(temp(0))
  82.       End Select
  83.       DoEvents
  84.    Loop
  85. End If
  86. End Sub
  87. Function choose(m%, n%)             '传回数组的函数不能声明为String,必须为vaiant
  88. Dim i%, dt
  89. Set dt = CreateObject("Scripting.Dictionary")
  90. Randomize
  91. Do
  92.    i = Int(Rnd * (m - 1)) + 1
  93.    dt(i & "") = ""                  '用字典的key来确保不重复抽取
  94. Loop Until dt.Count = n
  95. choose = dt.keys
  96. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2016-9-25 11:53 | 显示全部楼层
本帖最后由 hhjjpp 于 2016-9-25 14:22 编辑

再次优化代码:
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '参数是长整形(毫秒数)。Lib “kernel32”标明这个函数是引用kernel32.dll提供的函数。Kernel32.dll是windows的四个核心库之一。是用来延时n毫秒的?
  2. Dim arr, f As Boolean, j%, n%, temp                                     '接受函数返回数组的temp不能 As String
  3. Private Sub CommandButton1_Click()
  4. Dim i%, r%
  5. If IsEmpty(arr) Then
  6.    TextBox1.Visible = True                   '因上次抽特等奖时将其隐藏
  7.    TextBox3.Visible = True
  8.    TextBox2.Text = ""                        '清除界面的上次奖等数据
  9.    TextBox4.Text = ""
  10.    TextBox5.Visible = False
  11.    TextBox6.Visible = False
  12.    TextBox7.Visible = False
  13.    TextBox8.Visible = False
  14.    ReDim arr(1 To 50)
  15.    For i = 1 To 50                           '抽奖号码准备
  16.        arr(i) = 800 + i
  17.    Next
  18.    j = 1                                     '抽奖序次初始化
  19.    TextBox4.Text = "三等奖"
  20. End If
  21. If Me.CommandButton1.Caption = "停止" Then
  22.    Me.CommandButton1.Caption = "开始"
  23.    f = True
  24.    'MsgBox f & j                             '因只能在放映模式使用按钮,调试设置变量监控点
  25.    Select Case j                             '汇集抽奖结果
  26.           Case 1
  27.               TextBox5.Text = arr(temp(0)) & " " & arr(temp(1)) & " " & arr(temp(2))
  28.               TextBox5.Visible = True
  29.               TextBox1.Text = ""
  30.               TextBox2.Text = ""
  31.               TextBox3.Text = ""
  32.           Case 2
  33.               TextBox6.Text = arr(temp(0)) & " " & arr(temp(1)) & " " & arr(temp(2))
  34.               TextBox6.Visible = True
  35.               TextBox1.Text = ""
  36.               TextBox2.Text = ""
  37.               TextBox3.Text = ""
  38.           Case 3
  39.               TextBox7.Text = arr(temp(0)) & " " & arr(temp(1))
  40.               TextBox7.Visible = True
  41.               TextBox1.Text = ""
  42.               TextBox3.Text = ""
  43.           Case 4
  44.               TextBox8.Text = arr(temp(0))
  45.               TextBox8.Visible = True
  46.    End Select
  47.    'MsgBox n & j                              '变量监控点
  48.    j = j + 1
  49.    If j = 5 Then
  50.       MsgBox "抽奖完毕!"
  51.       Exit Sub
  52.    End If
  53.    For i = 0 To n - 1
  54.        arr = Filter(arr, arr(temp(i)), False) '滤除已抽取号码
  55.    Next
  56.    TextBox4.Text = Mid("三二一特", j, 1) & "等奖" '显示待抽的下一奖等
  57. Else
  58.    Me.CommandButton1.Caption = "停止"
  59.    f = False
  60.    'MsgBox f & j                             '变量监控点
  61.    n = --Mid(3321, j, 1)                     '抽取奖等的个数
  62.    r = Mid("0368", j, 1)                     '抽剩应扣减样本数量
  63.    'MsgBox r                                 '变量监控点
  64.    Do
  65.       Sleep 10
  66.       If f Then Exit Do
  67.       temp = choose(50 - r, n)               '50-r选n
  68.       Select Case n                          '下框显示具体抽中号码
  69.              Case 3
  70.                   TextBox1.Visible = True
  71.                   TextBox2.Visible = True
  72.                   TextBox3.Visible = True
  73.                   TextBox1.Text = arr(temp(0))
  74.                   TextBox2.Text = arr(temp(1))
  75.                   TextBox3.Text = arr(temp(2))
  76.              Case 2
  77.                   TextBox1.Text = arr(temp(0))
  78.                   TextBox2.Visible = False
  79.                   TextBox3.Text = arr(temp(1))
  80.              Case 1
  81.                   TextBox1.Visible = False
  82.                   TextBox2.Visible = True
  83.                   TextBox3.Visible = False
  84.                   TextBox2.Text = arr(temp(0))
  85.       End Select
  86.       DoEvents
  87.    Loop
  88. End If
  89. End Sub
  90. Function choose(m%, n%)             '传回数组的函数不能声明为String,必须为vaiant
  91. Dim i%, dt
  92. Set dt = CreateObject("Scripting.Dictionary")
  93. Randomize
  94. Do
  95.    i = Int(Rnd * (m - 1)) + 1
  96.    dt(i & "") = ""                  '用字典的key来确保不重复抽取
  97. Loop Until dt.Count = n
  98. choose = dt.keys
  99. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2016-9-25 11:56 | 显示全部楼层
本帖最后由 hhjjpp 于 2016-9-25 14:23 编辑

因发帖无反馈造成重复发帖,请删除!

TA的精华主题

TA的得分主题

发表于 2016-9-25 11:57 | 显示全部楼层
在最后slide,需要在放映模式抽奖

抽奖-h.rar

68.28 KB, 下载次数: 835

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-18 11:20 , Processed in 0.052228 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表