Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6541|回复: 17

[已解决]VBA ,方形转盘

[复制链接]
发表于 2016-6-13 11:04 | 显示全部楼层 |阅读模式
大神们:
  帮帮忙!需要做一个方形跑马灯,实现功能:围绕16个数字转圈,跑三圈后,随机停止,选中一个幸运数字;请大神帮忙想想,
                                       
       
最佳答案
2016-6-13 20:06
区域 发表于 2016-6-13 19:59
谢谢!大侠的回复!如果不用声明函数呢??就是单纯的用for语句和 If语句,大侠可否提供想法?谢谢!
  1. 'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub 跑马()
  3.     Dim i%, x%, rng As Range, n%, j%
  4.     Dim col As New Collection
  5.     With Sheet1
  6.         For i = 8 To 12
  7.             col.Add .Cells(5, i)
  8.         Next
  9.         For i = 6 To 9
  10.             col.Add .Cells(i, 12)
  11.         Next
  12.         For i = 11 To 8 Step -1
  13.             col.Add .Cells(9, i)
  14.         Next
  15.         For i = 8 To 6 Step -1
  16.             col.Add .Cells(i, 8)
  17.         Next
  18.     End With
  19.     For j = 1 To 3   '跑三圈
  20.         For i = 1 To col.Count
  21.             'Sleep 100  '延迟
  22.             For u = 1 To 10000000
  23.             Next
  24.             DoEvents
  25.             col(i).Select
  26.         Next
  27.     Next
  28.     n = Int(Rnd() * 16) + 1
  29.     For i = 1 To n
  30.         'Sleep 60  '延迟
  31.         For u = 1 To 9000000
  32.         Next
  33.         DoEvents
  34.         col(i).Select
  35.     Next
  36. End Sub
复制代码
发表于 2016-6-13 13:38 | 显示全部楼层
Untitled.gif
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub 跑马()
  3.     Dim i%, x%, rng As Range, n%, j%
  4.     Dim col As New Collection
  5.     With Sheet1
  6.         For i = 8 To 12
  7.             col.Add .Cells(5, i)
  8.         Next
  9.         For i = 6 To 9
  10.             col.Add .Cells(i, 12)
  11.         Next
  12.         For i = 11 To 8 Step -1
  13.             col.Add .Cells(9, i)
  14.         Next
  15.         For i = 8 To 6 Step -1
  16.             col.Add .Cells(i, 8)
  17.         Next
  18.     End With
  19.     For j = 1 To 3   '跑三圈
  20.         For i = 1 To col.Count
  21.             Sleep 100  '延迟
  22.             DoEvents
  23.             col(i).Select
  24.         Next
  25.     Next
  26.     n = Int(Rnd() * 16) + 1
  27.     For i = 1 To n
  28.         Sleep 60  '延迟
  29.         DoEvents
  30.         col(i).Select
  31.     Next
  32. End Sub
复制代码

跑马灯.rar

17.08 KB, 下载次数: 69

回复

使用道具 举报

发表于 2016-6-13 17:02 | 显示全部楼层
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub 跑马()
  3.     Dim rng As Range
  4.     Set d = CreateObject("scripting.dictionary")
  5.     For Each rng In [H5:L9]
  6.         d(rng.Value) = rng.Address
  7.     Next
  8.     For k = 1 To 3    '转3圈
  9.         For i = 1 To 16
  10.             Range(d(i)).Select
  11.             Sleep 50
  12.         Next
  13.     Next
  14.     x = Int(Rnd * 16 + 1) '1--16的随机数
  15.     For i = 1 To x
  16.         Range(d(i)).Select
  17.         Sleep 50
  18.     Next
  19. End Sub
复制代码

跑马灯.rar

17.08 KB, 下载次数: 42

回复

使用道具 举报

发表于 2016-6-13 17:06 | 显示全部楼层
代码简化一点:
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub 跑马()
  3.     Dim rng As Range
  4.     Set d = CreateObject("scripting.dictionary")
  5.     For Each rng In [H5:L9]
  6.         d(rng.Value) = rng.Address
  7.     Next
  8.     x = Int(Rnd * 16 + 1) '1--16的随机数
  9.     For k = 1 To 48 + x  '转3圈后多出随机数
  10.         i = k Mod 16: If i = 0 Then i = 16
  11.         Range(d(i)).Select
  12.         Sleep 50
  13.     Next
  14. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-13 19:45 | 显示全部楼层
首先谢谢大神们!
还想再问问大神们,如果不用延迟函数,怎么实现这个功能??
还请大神们,多多帮助!谢谢。。。。
回复

使用道具 举报

发表于 2016-6-13 19:50 | 显示全部楼层
区域 发表于 2016-6-13 19:45
首先谢谢大神们!
还想再问问大神们,如果不用延迟函数,怎么实现这个功能??
还请大神们,多多帮助!谢 ...

如果是64位的系统改把延迟函数声明改成Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)即可
回复

使用道具 举报

 楼主| 发表于 2016-6-13 19:59 | 显示全部楼层
老司机带带我 发表于 2016-6-13 19:50
如果是64位的系统改把延迟函数声明改成Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMill ...

谢谢!大侠的回复!如果不用声明函数呢??就是单纯的用for语句和 If语句,大侠可否提供想法?谢谢!
回复

使用道具 举报

发表于 2016-6-13 20:06 | 显示全部楼层    本楼为最佳答案   
区域 发表于 2016-6-13 19:59
谢谢!大侠的回复!如果不用声明函数呢??就是单纯的用for语句和 If语句,大侠可否提供想法?谢谢!
  1. 'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub 跑马()
  3.     Dim i%, x%, rng As Range, n%, j%
  4.     Dim col As New Collection
  5.     With Sheet1
  6.         For i = 8 To 12
  7.             col.Add .Cells(5, i)
  8.         Next
  9.         For i = 6 To 9
  10.             col.Add .Cells(i, 12)
  11.         Next
  12.         For i = 11 To 8 Step -1
  13.             col.Add .Cells(9, i)
  14.         Next
  15.         For i = 8 To 6 Step -1
  16.             col.Add .Cells(i, 8)
  17.         Next
  18.     End With
  19.     For j = 1 To 3   '跑三圈
  20.         For i = 1 To col.Count
  21.             'Sleep 100  '延迟
  22.             For u = 1 To 10000000
  23.             Next
  24.             DoEvents
  25.             col(i).Select
  26.         Next
  27.     Next
  28.     n = Int(Rnd() * 16) + 1
  29.     For i = 1 To n
  30.         'Sleep 60  '延迟
  31.         For u = 1 To 9000000
  32.         Next
  33.         DoEvents
  34.         col(i).Select
  35.     Next
  36. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-14 06:21 | 显示全部楼层
老司机带带我 发表于 2016-6-13 20:06

大神!麻烦告诉col.add.cells(5,i)是什么意思??
回复

使用道具 举报

发表于 2016-6-14 08:17 | 显示全部楼层
区域 发表于 2016-6-14 06:21
大神!麻烦告诉col.add.cells(5,i)是什么意思??

把这16个单元格放入col这个集合里面,所以我的程序不限制这16个单元格中的内容
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 08:09 , Processed in 0.221349 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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