VBA定时执行某程序
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 SubSub 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定时执行某程序的更多相关文章
- Linux 下用 crontab 设置定时执行python 程序
Linux 下用 crontab 设置定时执行python 程序 方法/步骤 1,先大概了解crontab,/etc/crontab 就是crontab 的配置文件. crontab命令详解可以查 ...
- Shell脚本实现每个工作日定时执行指定程序
我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...
- [MVC框架]利用@Scheduled注解创建定时执行的程序
新写的项目中有一个地方要用到定时器,然后就用了spring的@Scheduled注解,顺手就给记录下来了,免得下次用的时候还要翻以前的项目,顺便分享出来,给没用过的兄弟姐妹们做个参考. 这次主要用的是 ...
- vb 定时执行php程序
托盘模块 Option Explicit Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const ...
- 最简单的???ubuntu 通过crontab定时执行一个程序
crontab在liunx系统中下载,我默认是认为下载安装了的.. crontab貌似只能在liunx系统中存在,如果是windows系统我不知道 创建一个名为jiaoben的文件夹存储sh文件,进入 ...
- Windows自动执行应用程序或脚本(可以通过写bat文件定时关机等)
1. Windows每天定时执行某个应用程序 1.1 右键我的电脑选择管理,并选择任务计划程序,如下 演示 --- 1.2 创建基本任务 演示 1.3 Windows每天定时关机设置参数 演示 1. ...
- 使用System.Timers.Timer类实现程序定时执行
使用System.Timers.Timer类实现程序定时执行 在C#里关于定时器类有3个:System.Windows.Forms.Timer类.System.Threading.Timer类和Sys ...
- webapi + windows计划 + mshta 实现定时执行任务
当然,实现定时任务有更好的操作方式,比如方式一:asp.net mvc+quartz.net +corn +webapi,asp.net mvc做任务管理的平台,使用CronTrigger做定时触发, ...
- C#定时执行
代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
随机推荐
- Maven Web Projest经Update Projest报错:Cannot nest 'myApp/src/main/resource' inside 'myApp/src'. To enable the nesting exclude 'main/' from 'myApp/src'
1,报错场景 2,解决方法 修改pom.xml,去掉该行:<sourceDirectory>src/</sourceDirectory>
- PHP防止网页快速刷新+代理ip访问
前几天网站收到了一些CC攻击,比较郁闷...这里分享一下,防止网页自动刷新的方法以及阻止代理IP访问网站的方法,代码是分开的,两个功能,需要那个用那个,可以自定义时间间隔,这个代码不止可以防CC攻击, ...
- 剑指offer(54)字符流中第一个不重复的数字
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- 剑指offer(55)链表中环的入口节点
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 1.一快一慢指针,先找到碰撞点. 2.然后碰撞点到入口节点的距离就是头结点到入口节点的距离. 具体原理可 ...
- HTML基础【4】:表格标签
表格标签 在过去表格标签用的非常非常的多,绝大多数的网站都是使用表格标签来制作的,也就是说表格标签是一个时代的代表 作用:以表格形式将数据显示出来,当数据量非常大的时候,表格这种展现形式被认为是最为清 ...
- CORS跨域请求
一.问题: 服务器端代码 from flask import Flask from flask import make_response from flask import jsonify app = ...
- Selenium如何在谷歌浏览器模拟H5页面
一.基于java语言(转载:http://www.mamicode.com/info-detail-1972340.html) public class runtest { WebDriver dri ...
- python 字符串与16进制 转化
def str_to_hex(s): return r"/x"+r'/x'.join([hex(ord(c)).replace('0x', '') for c in s]) def ...
- Java对象的访问方式
之前写过一篇随笔 https://www.cnblogs.com/qianjinyan/p/10352749.html 现在看看,貌似不是很准确,方法区和栈应当区分开来,两者有很大的区别 看下面的一个 ...
- DAY8 文件操作(二)
一.写 1.1写文件 # w:没有文件新建文件,有文件就清空文件 w = open('1.txt', 'w', encoding='utf-8') w.write('000\n') # 在写入大量数据 ...