【分享成果,随喜正能量】人心齐,泰山移。有一种力量可以无坚不摧,那就是团结的力量;有一种力量可以让人坚韧不拔,也是团结的力量。只要我们同心合力,定能度过难关。

《VBA代码解决方案》这套教程是我最早推出的教程,目前已经是第二版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一下把自己喜欢的代码摆好。

这套教程共三册,一百四十七讲,内容覆盖较广,也是初级和中级间的过度教程,改版后的内容主要是提供程序源码文件及代码修正为32位和64位兼用代码。今后一段时间会给大家陆续推出。今日的内容是第31讲:VBA“定时器”的实现

vba实现动态时间(VBA定时器的实现)(1)

第三十一讲 利用VBA代码实现“定时器”功能

大家好,今日继续讲解我们的VBA代码第31讲,利用VBA代码实现“定时器”功能。

Excel VBA并没有提供定时器控件,但是用户可以通过Application对象的OnTime方法实现简单的定时器功能。

1 OnTime方法

应用于Application对象的OnTime方法能够安排一个过程在将来的特定时间运行,语法如下: expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

参数:

a) expression是必需的,返回一个Application对象。

b) EarliestTime是必需的,设置指定的过程开始运行的时间。使用Now TimeValue(time)可以安排从现在开始经过一段时间之后运行某个过程,使用TimeValue(time)可以安排在指定的时间运行某个过程。

c) Procedure是必需的,设置要运行的过程名称。

d) LatestTime是可选的,设置过程开始运行的最晚时间。例如将参数LatestTime设置为EarliestTime 10,当时间到了EarliestTime时如果Excel不处于空闲状态,那么Excel将等待10秒,如果在10秒内Excel不能回到空闲状态,则不运行该过程。如果省略该参数,Excel将一直等待到可以运行该过程为止。

e) Schedule是可选的,如果其值为True(默认值),则安排一个新的OnTime过程,如果其值为False,则清除先前设置的过程。

2 实现定时器功能的代码及代码解读

如下面的代码所示:

Sub mynz_31_1() '利用VBA代码实现"定时器"功能

【代码见教程】

End Sub

代码解析:mynz_31_1过程,使用Application对象的OnTime方法循环调用MyStartTimer过程实现每隔一秒钟运行一次MyStartTimer过程,从而在B1单元格中不断地显示程序累计运行时间。

1)第2行代码将B1单元格的值在原有的数字上加1。

2)第3行代码使用OnTime方法在1秒后重新调用mynz_31_1过程,使B1单元格的值不断的加1,从而显示程序累计运行时间。

取消定时的代码如下:

Sub mynz_31_2() '利用VBA代码实现"定时器"功能

【代码见教程】

End Sub

代码解析:Sub mynz_31_2过程取消mynz_31_1过程的计时。

1) 第2行代码错误处理语句,因为如果还没有运行mynz_31_1过程而先运行mynz_31_2过程取消定时,程序会提示错误,因此使用On Error GoTo Line语句在错误发生时执行第7行代码显示一个提示消息框。

2)第3行代码将mynz_31_1过程的Schedule参数设置为False,取消定时设置。

先看下面的代码窗口:

vba实现动态时间(VBA定时器的实现)(2)

运行窗口:

vba实现动态时间(VBA定时器的实现)(3)

停止窗口:

vba实现动态时间(VBA定时器的实现)(4)

今日内容回向:

1 OnTime 方法的作用是什么?

2 EXCEL中定时器是如何实现的?

本讲内容参考程序文件:VBA代码解决方案修订(1-48).xlsm

vba实现动态时间(VBA定时器的实现)(5)

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

vba实现动态时间(VBA定时器的实现)(6)

【分享成果,随喜正能量】爱心得匠意,则杰作在望。趁一切还来得及,做自己喜欢的事,就是一生最幸福的事!随着自己的热爱去做事,就没有不能成功的。

,