如何在vba中实现vb中的Timer控件定时器功能? 您所在的位置:网站首页 vba时钟 如何在vba中实现vb中的Timer控件定时器功能?

如何在vba中实现vb中的Timer控件定时器功能?

2024-06-29 02:38| 来源: 网络整理| 查看: 265

如何在vba中实现vb中的Timer控件定时器功能? 2018年3月29日 作者:水星Excel 15,857 次浏览 2条评论 vb中的Timer控件可以实现有规律地隔一段时间执行一次代码。 在vba中没有timer控件,但是Application对象的OnTime方法可以实现类似的功能。

它的作用是指定某个过程在具体的某个时间允许或者在间隔具体的时间后运行。

它的语法如下:

expression .OnTime(EarliestTime, Procedure, LatestTime, Schedule)

其中参数EarliestTime表示要运行Procedure参数所表示的过程的时间。

LatestTime参数表示由于各种原因过程没有在EarliestTime设定的时间运行,则最迟在LatestTime设定的时间运行。

Schedule参数的值可以是True或者False,默认是True。如果是True,则表示设定一个新的OnTime定时执行过程,如果是False,则表示清除一个之前设置的定时执行过程。

假设在vba中的标准模块1中有如下过程:

Sub test() Debug.Print 1 End Sub

运行以上过程将在立即窗口中输出1。

如果我们使用Application对象的OnTime方法,运行以下过程,将于5秒后在立即窗户中输出1:

Sub lyq() Excel.Application.OnTime Now() + TimeValue("0:0:5"), "test" End Sub

如果要循环间隔5秒后在立即窗口中输出1,则可以添加反复调用lyq过程的语句如下:

Sub test() Debug.Print 1 Call lyq End Sub Sub lyq() Excel.Application.OnTime Now() + TimeValue("0:0:5"), "test" End Sub

通过执行以上的过程,将永不间断的反复间隔5秒在立即窗口中输出1。

如果要终止某个Application.OnTime 则需要将当时设置的时间准确记录下来,然后将Application.OnTime的Schedule参数设置为False就可以终止。如下所示:

'定义一个公共变量存储设定的时间 Public dTime Sub test() Debug.Print 1 Call lyq '将定时的功能关闭 Excel.Application.OnTime dTime, "test", , False End Sub Sub lyq() '用变量记录下设定的时间,以免不断变化 dTime = Now() + TimeValue("0:0:5") Excel.Application.OnTime dTime, "test" End Sub

通过执行以上的代码,则只在立即窗口中输出1次1,就终止了之前的定时。

通过上述的分析,如果要在vba中构造完整的开、关定时功能,可以使用如下的通用格式代码:

'定义一个公共变量存储定时运行过程的时间 Public dTime As Date Sub TimeClose() '取消定时功能,不再循环运行子过程QQ1722187970 Excel.Application.OnTime dTime, "QQ1722187970", , False End Sub Sub TimeBegin() '设置变量dIntervalTime用于存储设置的循环运行过程的间隔时间,这里以秒为单位 Dim dIntervalTime As Long dIntervalTime = 5 '用dTime变量记录下设定的过程运行时间,以免不断变化 dTime = Now() + TimeValue("0:0:" & dIntervalTime) '用指定要运行的子过程的名称(这里是QQ1722187970)和要运行的时间(这里是dTime) Excel.Application.OnTime dTime, "QQ1722187970" End Sub Sub QQ1722187970() Debug.Print "这是一个循环输出的字符" '在子过程的结尾调用启动定时功能,从而实现循环运行 Call TimeBegin End Sub

 

其它相关文章推荐:如何在vba中返回单元格Range对象的地址?如何用vba在word文档中实现文本内容的修改、删除、添加等各种操作?vba中OnAction属性指定宏名时如何传递参数?如何用vba遍历所有的excel加载项?如何在vba中获取xml的根元素节点?如何用vba批量保护或取消保护excel工作表? 分类 :  VBA , VBA 基础知识 标签 :  Application , ontime , Timer , 定时器        

声明: 本站文章均属原创,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则视为侵权。如果想要每天都收到本站的技术文章推送,可以微信搜索公众号:水星Excel或者Excel_Office关注。其它事宜请加QQ:1722187970 或微信号:xycgenius 联系。 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有