ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请高手帮忙改下随机数代码,先谢谢了!

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-11 21:44 | 显示全部楼层
CC例例 发表于 2016-6-11 21:39
还有为了你所需的"停止"效果,程序中套了二次循环(如果不要"停止"效果,一次循环就够)

先谢谢高手帮忙,本来换成三个按键也可以,就是开始,停止,清除。但代码是论坛高手给的,我自己不懂。能帮忙写一个吗?再次谢谢。

TA的精华主题

TA的得分主题

发表于 2016-6-11 21:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
CC例例 发表于 2016-6-11 21:35
代码是没问题的,主要是当点击"停止"时,程序随机生成不重复的数还没达到指定的数目,所以点"停止"后有时还在 ...

DoEvents 放在输出语句后,因此不存在你说的这个问题。

代码看起来不会出现这种情况。怀疑是否你电脑卡顿导致excel公式反应比较慢,重启电脑不要开别的东西再试试看。

TA的精华主题

TA的得分主题

发表于 2016-6-11 22:11 | 显示全部楼层
crazy0qwer 发表于 2016-6-11 21:49
DoEvents 放在输出语句后,因此不存在你说的这个问题。

代码看起来不会出现这种情况。怀疑是否你电脑 ...

DoEvents函数是交出控制权,虽然放在输出语句后面,但内循环还在做无用循环,一次又一次地输出,当用户再次点击程序时,定义x返回False时,外循环停止,这时内循环最后一次输出时没完成时,就会出现延时.这是我的分析,如果不信,楼主可以增加随机数目,出现的延时会更加长久.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-11 22:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
crazy0qwer 发表于 2016-6-11 21:49
DoEvents 放在输出语句后,因此不存在你说的这个问题。

代码看起来不会出现这种情况。怀疑是否你电脑 ...

谢谢高手。

TA的精华主题

TA的得分主题

发表于 2016-6-11 22:28 | 显示全部楼层
CC例例 发表于 2016-6-11 22:11
DoEvents函数是交出控制权,虽然放在输出语句后面,但内循环还在做无用循环,一次又一次地输出,当用户再次点 ...

VB 是顺序执行,同一时间只能执行一条语句,所以代码在执行内循环时候是不会响应按钮事件的,也就是说内循环除非达到退出条件,否则不会停止。而内循环结束的条件就是生成一组完整的数据,输出也是一组完整的数据一次性输出。
DoEvents 函数的意思是:当代码执行到该语句时,交出系统控制权去处理其他事件,当其他事件处理完成后,返回该语句下一行代码继续执行。

TA的精华主题

TA的得分主题

发表于 2016-6-11 22:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
CC例例 发表于 2016-6-11 22:11
DoEvents函数是交出控制权,虽然放在输出语句后面,但内循环还在做无用循环,一次又一次地输出,当用户再次点 ...

要是还不信可以试试下面代码,看看内循环未完成时,再次点击按钮会不会响应。
运行前请保存好数据。

  1. Private Sub CommandButton1_Click()
  2. Dim d, i, n&
  3. If CommandButton1.Caption = "开始" Then
  4.    CommandButton1.Caption = "停止"
  5.    i = Sheet2.Range("b65536").End(3).Row
  6.    x = True
  7.    Do While x = True
  8.         Set d = CreateObject("Scripting.Dictionary")
  9.         Do

  10.         Loop
  11.         Sheet2.Range("a1:a" & i) = Application.Transpose(d.keys)
  12.       DoEvents
  13.    Loop
  14. Else
  15.    CommandButton1.Caption = "开始"
  16.    x = False
  17. End If
  18. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-6-11 23:00 | 显示全部楼层
crazy0qwer 发表于 2016-6-11 22:30
要是还不信可以试试下面代码,看看内循环未完成时,再次点击按钮会不会响应。
运行前请保存好数据。

受教了,没用过DoEvents函数,刚从网上查询了这个函数作用,确实如你据说.
不过查到别人写的代码,DoEvents函数能取到延时作用,这里何原理?代码的作用是让图形跟随单元格走(走的过程起动画效果),我测试后确实如此.代码如下:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Dim Pic As Shape, hStep As Single, vStep As Single, hPos As Integer, vPos As Integer
  3. Dim i
  4. Set Pic = Me.Shapes(1)
  5. hPos = Pic.Left
  6. vPos = Pic.Top
  7. hStep = (Target.Left - hPos) / 500
  8. vStep = (Target.Top - vPos) / 500
  9. For i = 1 To 500
  10. Pic.Left = hPos + hStep * i
  11. Pic.Top = vPos + vStep * i
  12. DoEvents
  13. Next
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-6-11 23:32 | 显示全部楼层
CC例例 发表于 2016-6-11 23:00
受教了,没用过DoEvents函数,刚从网上查询了这个函数作用,确实如你据说.
不过查到别人写的代码,DoEvents ...

DoEvents执行时会去处理外部事件,延时的时间就是处理外部事情所需要时间
但是这个延时的时间是不可预料的,所以尽量不要用来做延时。

DoEvents 更多的还是用来防止循环时间太久导致程序出现假死状态,另一个就是本贴所说的在程序执行期间响应外部事件的作用(包括状态更新,如楼主例子中随机数的滚动效果)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-6-11 23:41 | 显示全部楼层
crazy0qwer 发表于 2016-6-11 23:32
DoEvents执行时会去处理外部事件,延时的时间就是处理外部事情所需要时间
但是这个延时的时间是不可预料 ...

也就是说楼主的代码中DoEvents起到了每次数据输出时刷新屏幕效果

TA的精华主题

TA的得分主题

发表于 2016-6-11 23:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
CC例例 发表于 2016-6-11 23:41
也就是说楼主的代码中DoEvents起到了每次数据输出时刷新屏幕效果

我说错了,楼主例子中的DoEvents作用还是是程序运行时再次响应按钮点击事件,从而达到一个按钮可以启动和暂停的作用。
楼主例子能滚动是因为数据输出到excel时,excel会自动刷新。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-7 20:57 , Processed in 0.041364 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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