Excel精英培训网

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

[已解决]征集让vba暂停零点几秒的方法

  [复制链接]
发表于 2012-2-8 21:45 | 显示全部楼层 |阅读模式
我们知道,在VBA中想让代码暂停几秒钟后再继续运行可用wait、ontime。即他们是以秒为单位的。
但是只让代码暂停零点几秒,即暂停的时间不为整数秒(如0.5秒等),用什么办法呢?向大家征集除api中的sleep以外的办法。
最佳答案
2012-2-8 22:52
利用无意义的输出来延时

  1. Sub delay()
  2. '前面的代码到此
  3. t = Timer
  4. Do While Timer - 0.5 < t
  5. Debug.Print
  6. Loop
  7. '后面的代码继续
  8. End Sub
复制代码

当然你也可以将上面的过程改成带参数的方便调用。

评分

参与人数 2 +23 金币 +12 收起 理由
lku898786 + 1
爱疯 + 22 + 12 支持,希望学习

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-2-8 22:52 | 显示全部楼层    本楼为最佳答案   
利用无意义的输出来延时

  1. Sub delay()
  2. '前面的代码到此
  3. t = Timer
  4. Do While Timer - 0.5 < t
  5. Debug.Print
  6. Loop
  7. '后面的代码继续
  8. End Sub
复制代码

当然你也可以将上面的过程改成带参数的方便调用。

评分

参与人数 2 +31 金币 +30 收起 理由
lku898786 + 1 聪明!
爱疯 + 30 + 30

查看全部评分

回复

使用道具 举报

发表于 2012-2-9 08:36 | 显示全部楼层
本帖最后由 happym8888 于 2012-2-9 08:38 编辑
  1. Sub PauseHalfSec()
  2. S = Timer
  3. Do
  4. Loop Until Timer - S >= 0.5
  5. MsgBox "暂停" & Format(Timer - S, "0.##") & "秒"
  6. End Sub
复制代码
不好意思,没注意看楼上的代码,意思差不多的。
回复

使用道具 举报

发表于 2012-2-9 08:51 | 显示全部楼层
  1. Sub aa()
  2. Dim S As Single
  3. S = Timer
  4. If Application.Wait(Now + TimeValue("0:00:05") / 10) Then MsgBox "耗时" & Format(Timer - S, "0.##") & "s"
  5. End Sub
复制代码

回复

使用道具 举报

 楼主| 发表于 2012-2-9 09:14 | 显示全部楼层
非常感谢以上几位!
一、用timer做为循环条件,的确是一个好办法!
二、happy在4楼的好象不怎么起用呢?是我电脑问题?测试
    Dim S As Single
      For i = 1 To 1000
         S = Timer
        If Application.Wait(Now + TimeValue("0:00:05") / 10) Then Cells(i, 1) = Timer - S
      Next
回复

使用道具 举报

 楼主| 发表于 2012-2-9 09:20 | 显示全部楼层
再等等看还有没有其他奇思妙想
回复

使用道具 举报

发表于 2012-2-9 09:28 | 显示全部楼层
上清宫主 发表于 2012-2-9 09:14
非常感谢以上几位!
一、用timer做为循环条件,的确是一个好办法!
二、happy在4楼的好象不怎么起用呢?是 ...

  • 是你的电脑太快,或是0.5秒时间太短,你试着把(00:00:05)/10改成(00:00:05)/2看看是不是停差不多2.5秒;
  • 另外,2楼 Timer - 0.5 < t,这个判断条件不对。
回复

使用道具 举报

发表于 2012-2-9 09:43 | 显示全部楼层
...
另外,2楼 Timer - 0.5 < t,这个判断条件不对。...

好像没错吧,楼上是不是误当我写的是“Do ... Loop Until... ”了?我写的是 “Do While ... Loop”

点评

什么时候成为债权人了?  发表于 2012-2-9 18:21
什么时候成为债权人了?  发表于 2012-2-9 09:46
回复

使用道具 举报

发表于 2012-2-9 09:48 | 显示全部楼层
Benol 发表于 2012-2-9 09:43
好像没错吧,楼上是不是误当我写的是“Do ... Loop Until... ”了?我写的是 “Do While ... Loop”

嗯,看错了,Sorry。
回复

使用道具 举报

 楼主| 发表于 2012-2-9 10:06 | 显示全部楼层
本帖最后由 上清宫主 于 2012-2-9 10:12 编辑

再试了下,好象与电脑关系不大,应该是方法有缺陷吧?
Dim S As Single
For i = 1 To 20
  S = Timer
  Do While Timer - 0.5 < S
  Loop
  Cells(i, 2) = Timer - S
Next
For i = 1 To 20
  S = Timer
  If Application.Wait(Now + TimeValue("00:00:01")/2) Then Cells(i, 1) = Timer - S
Next
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:35 , Processed in 0.389842 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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