zoukankan      html  css  js  c++  java
  • 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 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
    

      

  • 相关阅读:
    PHP 大小写转换、首字母大写、每个单词首字母大写转换相关函数
    【论文学习4】BiSample: Bidirectional Sampling for Handling Missing Data with Local Differential Privacy
    【论文学习3】Local Differential Privacy for Deep Learning
    【论文学习2】 Differential Privacy Reinforcement Learning
    深度学习中的优化算法
    Spatial crowdsourcing
    “pip install tensorflow ”出现错误
    python或pip'不是内部或外部命令”
    pip install torch出现错误
    打不开gitHub的解决方法
  • 原文地址:https://www.cnblogs.com/yuhuameng/p/10224249.html
Copyright © 2011-2022 走看看