﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-liuyz2006-文章分类-vb</title><link>http://www.blogjava.net/liuyz2006/category/54521.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 02 Sep 2014 05:33:43 GMT</lastBuildDate><pubDate>Tue, 02 Sep 2014 05:33:43 GMT</pubDate><ttl>60</ttl><item><title>[转载]EXCEL VBA学习笔记-VBA中延迟的方法</title><link>http://www.blogjava.net/liuyz2006/articles/417602.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Tue, 02 Sep 2014 04:55:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/417602.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/417602.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/417602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/417602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/417602.html</trackback:ping><description><![CDATA[<div id="sina_keyword_ad_area2" class="articalContent   ">
<div style="border-bottom-style: none; border-right-style: none; margin: 20px 0px; border-left-style: none; border-top: #ccc 1px dotted; padding-top: 15px" class="blogzz_abstract borderc">
<div class="blogzz_acon">在VB中实现延时（等待）的几种方法<br /><br />在程序流程中经常要延时一段时间后再继续往下执行，在VB中常用的有以下几种方法（因为Timer控件打乱了程序的流程所以一般不用它）：<br /><br />1.使用Windows&nbsp;<wbr>API函数Sleep<br /><br />新建一个工程，添加一个TextBox控件和一个CommandButton控件，再将以下代码复制到代码窗口：<br /><br />Private&nbsp;<wbr>Declare&nbsp;<wbr>Sub&nbsp;<wbr>Sleep&nbsp;<wbr>Lib&nbsp;<wbr>"kernel32"&nbsp;<wbr>(ByVal&nbsp;<wbr>dwMilliseconds&nbsp;<wbr>As&nbsp;<wbr>Long)&nbsp;<wbr><br />Private&nbsp;<wbr>Sub&nbsp;<wbr>Command1_Click()<br />Text1&nbsp;<wbr>=&nbsp;<wbr>"sleep&nbsp;<wbr>begin"<br />Sleep&nbsp;<wbr>3000<br />Text1&nbsp;<wbr>=&nbsp;<wbr>"sleep&nbsp;<wbr>end"<br />End&nbsp;<wbr>Sub<br /><br />按F5执行，按下Command1按钮，程序停止执行，3秒钟内不对用户的操作做出反应，并且Text1里的内容并没有发生改变。这是怎么回事呢？原来，Sleep函数功能是将调用它的进程挂起dwMilliseconds毫秒时间，在这段时间内，此进程不对用户操作做出反应，程序中虽然将Text1的Text属性改成Sleep&nbsp;<wbr>begin，但还没等完成对屏幕的更新进程就被挂起了，对用户来说程序象是死机一样。所以这种方法虽然简单，但并不适用。<br /><br />2.使用Timer()函数<br /><br />这是用的最多的一种方法，也是在VB联机手册中所推荐的。添加一个CommandButton控件，再将以下代码添加到代码窗口中：<br /><br />Private&nbsp;<wbr>Sub&nbsp;<wbr>Command2_Click()<br />Dim&nbsp;<wbr>Savetime&nbsp;<wbr>As&nbsp;<wbr>Single<br />Text1&nbsp;<wbr>=&nbsp;<wbr>"Timer&nbsp;<wbr>begin"<br />Savetime&nbsp;<wbr>=&nbsp;<wbr>Timer&nbsp;<wbr>'记下开始的时间<br />While&nbsp;<wbr>Timer&nbsp;<wbr>&lt;&nbsp;<wbr>Savetime&nbsp;<wbr>+&nbsp;<wbr>5&nbsp;<wbr>'循环等待<br />DoEvents&nbsp;<wbr>'转让控制权，以便让操作系统处理其它的事件<br />Wend<br />Text1&nbsp;<wbr>=&nbsp;<wbr>"Timer&nbsp;<wbr>ok"<br />End&nbsp;<wbr>Sub<br /><br />这种方法虽然也很简单，但却有有一个致命缺陷，那就是Timer函数返回的是从午夜开始到现在经过的秒数。所以Timer返回的最大值也只是60*60*24-1秒，如果从一天的23:59:58秒开始计时等待5秒，那么程序会永远地循环下去。要进行改良，就要加上判断是否又开始了新的一天，那岂不是太麻烦。下面给大家推荐另一个Windows&nbsp;<wbr>API函数。<br /><br />3.使用Windows&nbsp;<wbr>API函数timeGetTime()<br /><br />timeGetTime函数没有参数，返回值是从开机到现在所经历的毫秒数，这个毫秒数是非周期性递增的，所以不会出现Timer()函数出现的问题，而且这种方法的精确性高于上一种方法。添加一个CommandButton控件，再将以下代码添加到代码窗口中：<br /><br />Private&nbsp;<wbr>Declare&nbsp;<wbr>Function&nbsp;<wbr>timeGetTime&nbsp;<wbr>Lib&nbsp;<wbr>"winmm.dll"&nbsp;<wbr>()&nbsp;<wbr>As&nbsp;<wbr>Long<br />Private&nbsp;<wbr>Sub&nbsp;<wbr>Command3_Click()<br />Dim&nbsp;<wbr>Savetime&nbsp;<wbr>As&nbsp;<wbr>Double<br />Text1&nbsp;<wbr>=&nbsp;<wbr>"timeGetTime&nbsp;<wbr>begin"<br />Savetime&nbsp;<wbr>=&nbsp;<wbr>timeGetTime&nbsp;<wbr>'记下开始时的时间<br />While&nbsp;<wbr>timeGetTime&nbsp;<wbr>&lt;&nbsp;<wbr>Savetime&nbsp;<wbr>+&nbsp;<wbr>5000&nbsp;<wbr>'循环等待<br />DoEvents&nbsp;<wbr>'转让控制权，以便让操作系统处理其它的事件<br />Wend<br />Text1&nbsp;<wbr>=&nbsp;<wbr>"timeGetTime&nbsp;<wbr>end"<br />End&nbsp;<wbr>Sub<br /><br />按F5执行程序，按这几个按钮，您可以感受一下这几种方法的优劣。</div></div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/417602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2014-09-02 12:55 <a href="http://www.blogjava.net/liuyz2006/articles/417602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>