OnTime 方法
参阅应用于示例特性安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后)。

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
expression      必需。该表达式返回一个 Application 对象。

EarliestTime      Variant 类型,必需。设置过程开始运行的时间。

Procedure      String 类型,必需。设置要运行的过程名。

LatestTime      Variant 类型,可选。过程开始运行的最晚时间。例如,LatestTime 参数设为 EarliestTime + 30,当时间到了 EarliestTime 时,如果由于其他程序处于运行状态 Microsoft Excel 不处于“就绪”、“复制”、“剪切”或“查找”模式,则 Microsoft Excel 将等待 30 秒让第一个过程先结束运行。如果 30 秒内 Microsoft Excel 不能回到“就绪”模式,则不运行此过程。如果省略该参数,Microsoft Excel 将一直等待到可以运行该过程为止。

Schedule      Variant 类型,可选。如果该值为 True,则安排一个新的 OnTime 过程。如果该值为 False,则清除先前设置的过程。默认值为 True。

说明
使用 Now + TimeValue(time) 可安排经过一段时间(从现在开始计时)之后运行某个过程。使用 TimeValue(time) 可安排某个过程只运行指定的时间。

示例
本示例设置 15 秒后运行 my_Procedure 过程,从现在开始计时。

Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

本示例设置 my_Procedure 在下午 5 点开始运行。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

本示例撤消前一个示例对 OnTime 的设置。

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
    Procedure:="my_Procedure", Schedule:=False

Sub hi()
Debug.Print "hello"
End Sub Sub AutoRun()
hi
Application.OnTime TimeValue("14:03:00"), "AutoRun"
End Sub

  

在工作中我们经常需要定时执行某程序,或者有时需要每隔特定时间执行某个程序,例如我们需要每15分钟执行一次保存的动作,这个功能在VBA中是通过Application.OnTime函数来实现的。这个函数有两个参数,一个是执行程序的时间,另一个是要执行的程序名称。下面来看一代简单代码

Sub macro1()
Dim NewTime As Date
NewTime = Now + TimeValue("00:00:05")
Application.OnTime NewTime, "Macro2"
End Sub

Sub macro2()
MsgBox "你执行了程序Macro2"
End Sub

上面Macro1代码的意思是在5秒之后执行宏Macro2,在Macro1中我们定义了一个日期变量NewTime,其值是当前时间加上5秒,注意下这里时间的写法,"hh:mm:ss"时、分、秒。之后用到application.ontime函数,两个参数上面说过了,一个代表时间,一个代表要执行的程序。要想在5秒之后执行Macro2,你首先要手动运行Macro1,这样5秒之后才会运行Macro2,这点很重要,不要以为写出了这个代码其就可以自动运行了。

上面只是在特定时间执行某程序,那现在如果我们要循环执行某程序怎么办?比如我们每隔10秒钟就要执行一次自动保存的动作。这也好办,看下面的代码

Sub 自动保存()
Dim NewTime
NewTime = Now + TimeValue("00:00:05")
ThisWorkbook.Save
Application.OnTime NewTime, "自动保存"
End Sub

在这里我们没有用两个程序,而是将要执行的代码也嵌入到了Application.OnTime程序中,Application.OnTime NewTime, "自动保存",看到了吧,我们执行的是程序自身,每5秒调用一下本程序,运行的时候又设定了5秒之后执行本程序,形成了一个循环,这就达到了我们定时循环执行某动作的目的。

Sub hi()
Debug.Print "hello"
End Sub Sub AutoRun()
hi
Application.OnTime Now + TimeValue("00:00:05"), "AutoRun"
End Sub

  

上面说过要这些程序首先要手动运行一次,如果想要打开工作簿就自动执行,那在Open事件中调用一下就可以了

Private Sub Workbook_Open()
Call 自动保存
End Sub

Public TimerEnabled As Boolean

  Sub EnableTimer() '开始
TimerEnabled = True
StartTimer
End Sub Sub DisableTimer() '停用
TimerEnabled = False
End Sub Sub StartTimer() '注意改代码需要放在模块级
If TimerEnabled = True Then
Application.OnTime Now + TimeValue("00:00:01"), "StartTimer" '每1秒钟自动运行一次
Work '需要每秒运行的代码
End If
End Sub Sub Work()
Sheet1.Cells(1, 1) = Sheet1.Cells(1, 1) + 1
End Sub

  

VBA定时执行某程序的更多相关文章

  1. Linux 下用 crontab 设置定时执行python 程序

    Linux 下用 crontab 设置定时执行python 程序 方法/步骤   1,先大概了解crontab,/etc/crontab 就是crontab 的配置文件. crontab命令详解可以查 ...

  2. Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...

  3. [MVC框架]利用@Scheduled注解创建定时执行的程序

    新写的项目中有一个地方要用到定时器,然后就用了spring的@Scheduled注解,顺手就给记录下来了,免得下次用的时候还要翻以前的项目,顺便分享出来,给没用过的兄弟姐妹们做个参考. 这次主要用的是 ...

  4. vb 定时执行php程序

    托盘模块 Option Explicit Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const ...

  5. 最简单的???ubuntu 通过crontab定时执行一个程序

    crontab在liunx系统中下载,我默认是认为下载安装了的.. crontab貌似只能在liunx系统中存在,如果是windows系统我不知道 创建一个名为jiaoben的文件夹存储sh文件,进入 ...

  6. Windows自动执行应用程序或脚本(可以通过写bat文件定时关机等)

    1. Windows每天定时执行某个应用程序 1.1 右键我的电脑选择管理,并选择任务计划程序,如下 演示 --- 1.2 创建基本任务 演示 1.3 Windows每天定时关机设置参数 演示 1. ...

  7. 使用System.Timers.Timer类实现程序定时执行

    使用System.Timers.Timer类实现程序定时执行 在C#里关于定时器类有3个:System.Windows.Forms.Timer类.System.Threading.Timer类和Sys ...

  8. webapi + windows计划 + mshta 实现定时执行任务

    当然,实现定时任务有更好的操作方式,比如方式一:asp.net mvc+quartz.net +corn +webapi,asp.net mvc做任务管理的平台,使用CronTrigger做定时触发, ...

  9. C#定时执行

    代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

随机推荐

  1. 20190402Linux进阶命令week1.2

    Linux常用命令详解(week1_day1_2) aliasunaliasunamesuhostnamehistorywhichwcwwhowhoamipingkillseqdudffreedate ...

  2. vue组件传值

    组件的传值(组件之间的通讯) 1.父子通信 1)父传子 传递:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据 接收:在子组件内部通过props进行接收 接收的 ...

  3. “Nested exception: 前言中不允许有内容"错误处理

    最近在做一个小项目,使用org.dom4j.DocumentHelper.parseText方法时一直报错”Nested exception: 前言中不允许有内容",这个parseText解 ...

  4. CentOS 6.5优化开机启动服务

    使用chkconfig命令列举出所有服务,配合管道筛选出开机默认启动的服务,再去掉level0(关机).level4(无意义)和level6(重启)的显示,使结果更直观. chkconfig | gr ...

  5. [c/c++] programming之路(22)、字符串(三)——字符串封装

    项目结构 头文件.h #include<stdio.h> #include<stdlib.h> #include<string.h> //字符串封装,需要库函数 / ...

  6. nginx访问不到

    nginx访问不到 今天,一朋友的一台linux服务器上部署了nginx,但是外部(公网)就是不能访问,于是协助其排查.整体思路如下: 1.确认nginx配置是否ok. 2.确认网络是否可达. 3.是 ...

  7. python第一阶段总结(2)

    python3第一阶段的总结 首先申明一下,本人是看网络课程“老男孩”过来写博客的,想把自己学到的东西分享一下.同时给老男孩打个广告,其教学水平真的挺好的.仅据我个人多年的学习评价. 好,接下来是我对 ...

  8. SQLServer “无法对数据库'XX' 执行删除,因为它正用于复制”的解决方法

    修改数据库某个字段的长度时出现: “无法修改表.无法对 表'dbo.N_Client_content' 执行 删除,因为它正用于复制.” 不能直接对该数据库进行操作,通过alter 的办法来修改,问题 ...

  9. URL URI

    URL 是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理 ...

  10. Asp.net core 学习笔记 (AutoMapper)

    参考 : http://www.cnblogs.com/xishuai/p/3700052.html http://www.cnblogs.com/xishuai/p/3704435.html htt ...