如何在 Excel VBA 中检查或取消多个待处理的 application.ontime 事件?

2023-11-25

我正在使用 Application.Ontime 事件从单元格中提取时间字段,并安排一个子例程在那时运行。我的 Application.Ontime 事件在 Workbook_BeforeSave 事件上运行。因此,如果用户(更改所需时间+保存工作簿)多次创建多个 Application.Ontime 事件。理论上,我可以使用唯一的时间变量来跟踪每个事件。但是有没有办法检查/解析/取消待处理的事件?

Private Sub Workbook_BeforeSave
    SendTime = Sheets("Email").Range("B9")
    Application.OnTime SendTime, "SendEmail"
End Sub

Private Sub Workbook_BeforeClose
    Application.OnTime SendTime, "SendEmail", , False
End Sub

So if I:
将B9更改为12:01,保存工作簿
将B9更改为12:03,保存工作簿
将B9更改为12:05,保存工作簿
将B9更改为12:07,保存工作簿
etc

我最终触发了多个事件。我只想触发一个事件(最近安排的事件)

如何取消 Workbook_BeforeClose 事件上的所有待处理事件(或至少枚举它们)?


我不认为你可以迭代所有待处理的事件或一次性取消它们。我建议设置一个模块级别或全局布尔值来指示是否触发您的事件。所以你最终会得到这样的结果:

Dim m_AllowSendMailEvent As Boolean
Sub SendMail()
If Not m_AllowSendMailEvent Then Exit Sub

'fire event here

End Sub

Edit:

将其添加到工作表模块的顶部,该模块包含包含您要查找的日期/时间值的范围:

' Most recently scheduled OnTime event. (Module level variable.)
Dim PendingEventDate As Date

' Indicates whether an event has been set. (Module level variable.)
Dim EventSet As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

Dim SendTimeRange As Range

' Change to your range.
Set SendTimeRange = Me.Range("B9")

' If the range that was changed is the same as that which holds
' your date/time field, schedule an OnTime event.
If Target = SendTimeRange Then

    ' If an event has previously been set AND that time has not yet been
    ' reached, cancel it. (OnTime will fail if the EarliestTime parameter has
    ' already elapsed.)
    If EventSet And Now > PendingEventDate Then

        ' Cancel the event.
        Application.OnTime PendingEventDate, "SendEmail", , False

    End If

    ' Store the new scheduled OnTime event.
    PendingEventDate = SendTimeRange.Value

    ' Set the new event.
    Application.OnTime PendingEventDate, "SendEmail"

    ' Indicate that an event has been set.
    EventSet = True

End If

End Sub

这是一个标准模块:

Sub SendEmail()

    'add your proc here

End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Excel VBA 中检查或取消多个待处理的 application.ontime 事件? 的相关文章

随机推荐

  • Unity IAP 未初始化

    我使用 Unity 购买者脚本 在 Unity 的 IAP 示例中 来测试 IAP 但它们在测试期间不会在手机上初始化 即使它们确实初始化并传递到编辑器中 我知道 Unity 编辑器总是通过 IAP 因此这意味着我没有在 Apple 方面采
  • 从控制器生成 http post 请求

    如果这是一个愚蠢的问题 请原谅我 我对网络编程不太有经验 我正在实现 net mvc 应用程序的支付组件 该组件与外部支付服务交互 支付服务接受以下形式的http post请求 http somepaymentservice com pay
  • 如何在 Struts 2 中使用具有两个条件的

    我迭代项目列表 如果元素的状态等于学生或教师 则需要显示特定的下拉列表 以下代码显示所有字段 但不显示任何元素的下拉列表
  • malloc 未定义

    我目前正在重写链表模块 并且收到一些奇怪的错误 在两个 IDE Netbeans 和 Visual Studio Express 中 我收到一条警告 malloc未定义 并且在 linkedlist c 文件中找到的函数也未定义 下面是我的
  • 如何使用 javascript_include_tag 获取文件夹中的所有脚本

    我想用javascript include tag使用递归获取所有与视图相关的脚本 将其放置在public javascripts views 我想javascript include tag views recursive gt true
  • Java 8矩阵*向量乘法

    我想知道是否有一种更简洁的方法可以在 Java 8 中使用流执行以下操作 public static double multiply double matrix double vector int rows matrix length in
  • 如何在我的 HTTP 请求中使用带有身份验证的代理?

    我有一个代理 IP 地址 还需要用户名和密码 当我尝试使用它们访问网页时 我收到 需要代理身份验证 我发现了 2016 年的另一篇 Stackoverflow 帖子 以及这个已关闭的 Github 问题 但他们没有提供任何有用的东西 代理
  • 使用 ASP NET MVC 4 和 webapi 自定义 http 处理程序和路由处理程序

    我正在开发 ASPNET MVC 4 和 WebApi webapi 方法将由移动设备使用 我们需要保护服务的安全 而我们正在使用的是以某种特定方式加密数据 现在 我需要在到达控制器之前解密该调用 如果解密的信息有效 它应该像平常一样继续发
  • Apache 2.4“..身份验证失败..:密码不匹配”

    我在 Windows Server 2008 R2 中运行 Apache 2 4 我正在尝试用密码保护子目录 并在 Apache 2 0 中成功做到了这一点 升级后 我采纳了 Apache 的建议 并尝试将身份验证配置放入 httpd co
  • 如何防止android对讲说话seekbar进度

    我有一个自定义控件扩展SeekBar 其中我已经覆盖了onInitializeAccessibilityNodeInfo如下 Override public void onInitializeAccessibilityNodeInfo Ac
  • 在C#中用鼠标画线的正确方法是什么

    这是我的绘图代码 用于用鼠标在图表上绘制自定义线条 你能帮我以正确的方式做吗 namespace Grafi public partial class Form1 Form bool isDrawing false Point prevPo
  • 如何确定数组是否包含单独数组中的所有整数

    我在学校的计算机科学课上 我被这个问题困扰了 甚至无法真正想出如何解决它的想法 这里是逐字逐句 编写一个名为的静态方法contains接受两个整数数组 a1 和 a2 作为参数 并返回一个布尔值 指示 a2 的元素序列是否出现在 a1 中
  • DB Plugin 未在 Play 2.0 中注册

    我刚刚开始使用 play 并且修改了执行 SQL 读取的方式 现在收到以下错误 Exception DB plugin is not registered 我这个类的代码是 package models import play api db
  • 从 RichTextBox 复制选定的文本

    我在网上搜索过 但找不到从文件中复制 剪切 粘贴所选文本的方法RichTextBox 就连MSDN也没有给出答案 他们提供的代码不起作用 Copy 似乎仅适用于 TextBox 不适用于 RichTextBox 如果我复制这个方法 Clip
  • Pygame Joystick.get_axis() 始终返回零

    我购买了罗技游戏手柄 F310 来远程控制机器人 我在 Linux Mint 版本 18 Sarah 上使用 Pygame 版本 1 9 1 Python 版本 2 7 11 作为检查操纵杆功能的简单测试 我编写了这个简短的脚本 用于输出不
  • 在 asp.net 中创建自定义 .config 文件 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有没有一种方法可以在 asp net 中创建 blah config 文件 并以与访问常规 web config 文件中的项目相同的方式访问节点的名称 值对 这个想法是不必为此编
  • 使用 one-hot 代码的 Tensorflow 混淆矩阵

    我使用 RNN 进行多类分类 这是我的 RNN 主要代码 def RNN x weights biases x tf unstack x input size 1 lstm cell rnn BasicLSTMCell num unit f
  • ES6 Promises 和 PEP3148 Futures 的连锁差异

    我对 ES6 Promises 和 PEP3148 Futures 实现差异的推理有些困惑 在 Javascript 中 当 Promise 与另一个 Promise 一起解决时 一旦解决或拒绝 外部 Promise 就会继承 内部 Pro
  • 使用 JOIN 而不是 WHERE 进行过滤

    在 SQL MSSQL Oracle 等 中 当连接表时 向 JOIN 语句添加过滤器而不是在 WHERE 子句中添加过滤器有什么好处 i e SELECT FROM X INNER JOIN Y ON X A Y A WHERE X B
  • 如何在 Excel VBA 中检查或取消多个待处理的 application.ontime 事件?

    我正在使用 Application Ontime 事件从单元格中提取时间字段 并安排一个子例程在那时运行 我的 Application Ontime 事件在 Workbook BeforeSave 事件上运行 因此 如果用户 更改所需时间