ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: hhjjpp

[已解决] vba代码执行过程中如何生成图形的运动效果

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-6 20:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Sub CommandButton1_Click()
  3. Set s = Me.Shapes.AddShape(msoShapeOval, 0, 98, 4, 4)
  4. s.Fill.ForeColor.SchemeColor = 31
  5. s.Line.Visible = msoFalse
  6. For i = 0 To 635 Step 5
  7.     Me.Shapes.AddLine(0, 100, i + 10, 100).Line.ForeColor.SchemeColor = 31
  8.     s.IncrementLeft 4.875 '4999
  9.     Sleep 20
  10.     If i Then Me.Lines(1).Delete
  11.     DoEvents
  12. Next
  13. End Sub
复制代码

动态绘图-h.rar

17.97 KB, 下载次数: 28

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-6 20:38 | 显示全部楼层
DoEvents 函数
转让控制权,以便让操作系统处理其它的事件。
语法
DoEvents( )
说明
DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。
DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。
DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。
小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。
DoEvents 函数示例
下列示例在循环中使用 DoEvents 函数,每当循环完成 1000 次时,将执行让给操作系统。DoEvents 返回仅当主应用程序是 Visual Basic时,打开的窗体个数。
' 创建一个变量来保存加载的 Visual Basic 可见窗体的个数。
Dim I, OpenForms
For I = 1 To 150000    ' 循环开始。
    If I Mod 1000 = 0 Then     ' 如果循环一已完成了 1000 次。
        OpenForms = DoEvents    ' 将执行让给操作系统。
    End If
Next I    ' 将循环计数器加一。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-6 20:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-12-6 21:42 | 显示全部楼层
同问,一直对DoEvents存在不解,到底在什么情况下,要使用这个函数。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-6 21:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 hhjjpp 于 2016-12-6 21:56 编辑

一般是随机滚动时,等待“停止”按钮的触发而终止循环,停止随机;一个最简单的示例:http://club.excelhome.net/forum. ... ead&tid=1315675

但这里绘图时用这DoEvents会有助于屏显(此时可不用sleep,上述终止滚动应用sleep),真的不太明白!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-11 10:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
而且也很奇怪,IncrementLeft方法和AddLine方法都是以磅值为单位,为何圆点要脱离大部队?

TA的精华主题

TA的得分主题

发表于 2016-12-11 11:04 | 显示全部楼层
限制一下CPU,不然性能好代码一下运行完了,或者加一些没有用的循环拖时间

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-11 11:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原来IncrementLeft多次偏移是如此不靠谱!
  1. Private Sub CommandButton1_Click()
  2. Dim s As Shape
  3. For n = 1 To 100
  4.     Me.Shapes.AddLine(0, n * 5, n * 5, n * 5).Line.ForeColor.SchemeColor = 31
  5.     Set s = Me.Shapes.AddShape(msoShapeOval, 0, n * 5 - 2, 4, 4)
  6.     s.Fill.ForeColor.SchemeColor = 31
  7.     s.Line.Visible = msoFalses
  8.     For i = 1 To n
  9.         s.IncrementLeft 5
  10.     Next
  11. Next
  12. End Sub
复制代码
QQ截图20161211110836.jpg

动态绘图-h.rar

28.81 KB, 下载次数: 34

TA的精华主题

TA的得分主题

发表于 2020-6-4 14:47 | 显示全部楼层
大神,你的问题....我们在你面前都是小白呀
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 02:32 , Processed in 0.046629 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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