大家好,上节介绍application主程序对象的属性,后续开始介绍其常用方法。本节主要介绍ontime方法。
基 础 知 识
ontime方法可以安排一个过程在特定的时间运行。(既可以是具体指定的某个时间,也可以是指定的一段时间之后。)具体语法结构和参数如下:
Application.OnTime(EarliestTime,Procedure,[LatestTime],[Schedule])
1、参数EarliestTime,必选,指定想要程序在什么时间运行。
2、参数Procedure,必选,要运行的程序的名字。
3、参数LatestTime,可选,指定程序最迟运行的时间。例如,如果参数LatestTime设置为EarliestTime 30,Excel因为在运行另一个程序而在EarliestTime时没有在准备、复制、剪切或查找模式,那么Excel将等待30秒以便该程序运行完成。如果Excel在30秒内还不处于准备模式,那么程序将不再运行。如果忽略该参数,那么Excel将等待直到能够运行该程序。
4、参数Schedule,可选,设置为True来计划运行一个新的OnTime程序;设置为False来清除之前设置的程序。默认值为True。
应 用 方 式
需要注意的是:如果定义了ontime事件,即使关闭工作簿,ontime事件仍然会按设定时间发生。如果是循环的ontime事件,所以需要编写对应的停止事件的过程。
基础知识介绍完,下面通过示例来介绍如何使用application对象的ontime方法。
通常的应用场景有两种:
1、 Now TimeValue(time) 表示从现在开始计时,过一定时间后运行某个过程。
2、 TimeValue(time) 表示设定在指定的时间运行过程。
注意TimeValue(time)中的time形式是字符串形式,需要用双引号 “ ”。
具 体 示 例
下面通过示例来学习:
一、定时提醒或闹钟
首先创建一个过程,命名为tixing,程序过程是 一个简单的弹窗提示。
然后创建新的过程test,设置参数从现在开始3秒后调用该提醒过程。(此处为了演示设置3秒后运行tixing)
代码如下:创建过程tixing,设置msgbox弹窗。
Sub tixing()
MsgBox "工作时间超过两个小时,起身活动下吧"
End Sub
ontime方法,设置从现在开始计时3秒后,运行tixing过程。
Sub test()
Application.OnTime Now TimeValue("00:00:03"), "tixing"
End Sub
注意看Now TimeValue("00:00:03")中的时间的格式,注意是字符串需要双引号。同时过程名称tixing在参数中也是字符串,也需要双引号" " 。
用于设置闹钟也是同样的方式,时间直接TimeValue("17:00:00")设置确定的时间调用过程。
二、定时刷新
下面设置一个简单定时刷新。每隔10秒钟,让A2:A6单元格的数据等于C2:C6中的值。
具体代码如下,首先是定时刷新的代码:
Dim nexttime As Date
Sub test1()
'刷新数据代码
Sheet1.Range("a2:a6").Value = Sheet1.Range("c2:c6").Value
'设置重复刷新时间间隔
nexttime = Now TimeValue("00:00:10")
Application.OnTime nexttime, "test1"
End Sub
定义了nexttime为日期型变量,将它赋值为现在的时间之后10秒。然后设置ontime方法,每10秒运行一次test1。由于每次运行都会导致10秒后再运行一次,就形成了一个间隔的循环,加上更新数据的相关代码后就实现了定时刷新数据的功能。
ontime方法如果循环不能自行停止,就需要编写停止刷新的代码,如下:
Sub stoptest()
On Error Resume Next '表示程序出现错误会继续运行
Application.OnTime nexttime, "test1", , False
Application.EnableEvents = False
End Sub
注意的是代码中Application.OnTime nexttime, "test1", , False 这句的时间和调用程序都要与上个循环过程中的一致,同时最后一个参数为False。即可以清除之前的ontime方法设置。
今天下雨
本节主要介绍application主程序对象的ontime方法,其实它也可以算excel事件,后期介绍事件时也会说明。后面将会介绍其他方法,祝大家学习快乐。