You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Application.OnTime指定的宏仅执行一次?避免重复触发

解决Worksheet_Activate重复设置OnTime导致宏多次执行的问题

核心思路是用全局变量记录已设置的定时时间,避免每次激活工作表时重复创建定时任务。

步骤1:声明全局变量

在Excel的标准模块(右键插入→模块)中添加以下代码,用来存储已设置的定时时间:

Public g_scheduledTime As Date

步骤2:修改Worksheet_Activate事件代码

在目标工作表的代码模块中,替换原有的OnTime设置代码为以下内容:

Private Sub Worksheet_Activate()
    Dim targetTime As Date
    targetTime = TimeValue("20:50:12")
    
    ' 仅在未设置过该定时、且当前时间早于目标时间时执行设置
    If g_scheduledTime <> targetTime And Time < targetTime Then
        ' 先取消之前可能存在的无效定时(防止残留旧任务)
        On Error Resume Next
        Application.OnTime EarliestTime:=g_scheduledTime, Procedure:="MyMacro", Schedule:=False
        On Error GoTo 0
        
        ' 保存当前定时时间并设置新任务
        g_scheduledTime = targetTime
        Application.OnTime EarliestTime:=targetTime, Procedure:="MyMacro"
    End If
End Sub

关键说明

  • 全局变量g_scheduledTime会在设置定时后记录目标时间,后续激活工作表时会对比该值,避免重复设置
  • 加入Time < targetTime判断,确保过了20:50:12后不会再创建新的定时任务
  • 错误处理语句用来避免在没有已设置定时的情况下执行取消操作时抛出错误

内容的提问来源于stack exchange,提问作者Alan Tingey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:54:54