【问题标题】:Excel VBA Application.OnTime. I think its a bad idea to use this... thoughts either way?Excel VBA Application.OnTime。我认为使用这个......无论哪种方式都是一个坏主意?
【发布时间】:2010-02-26 13:10:25
【问题描述】:

我支持的一些用户要求事情自动发生(当然更自动,但这是另一点!)。

一个人希望每 120 秒发生一次事件(请参阅我的另一个问题),另一个人希望在每个工作日下午 5 点发生一件事。这必须在 Excel 工作表上,因此 VBA 作为插件等将是不可以的,因为它需要是自包含的。

我非常不喜欢使用Application.OnTime,我认为它危险且不可靠,其他人怎么看?


编辑: 交叉帖子在VBA Macro On Timer style to run code every set number of seconds, i.e. 120 seconds

【问题讨论】:

    标签: excel timer scheduling vba


    【解决方案1】:

    Application.OnTime 绝对 100% 可靠,绝对没有危险。但是,它通过 VBA 公开,并且出于某种原因您在这里将 VBA 视为“不可以”,因此您似乎无法使用此选项。

    我通常不会将 OnTime 用于长期调度,例如安排 Excel 在每天下午 5 点执行命令。问题是如果用户关闭 Excel,那么 OnTime 调度就会丢失。在这种情况下,您需要使用Task Scheduler,或者创建您自己的应用程序或 Windows 服务来打开 Excel 并执行您的命令。

    但是,对于安排每 120 秒发生一次的事件,使用 Application.OnTime 将是完美的选择 - 您只需重新安排 OnTime 以在每次 OnTime 回调时在 120 秒内再次发生,因为 OnTime每次调度仅触发一次,而不是重复触发。我绝对会使用 VBA 来完成这项任务。如果您不希望 VBA 开始操作,那很好:只需将 VBA 包含在工作簿中,然后由您的程序或通过任务计划程序打开该工作簿。从那时起,VBA 代码可以每 120 秒触发一次。

    有意义吗?

    【讨论】:

    • “onTime 调用自身不会造成无限递归吗?在几千/百万/十亿次函数调用后不会导致堆栈溢出吗?
    【解决方案2】:

    你是对的。 “onTime”调用自身的“无限”间隔,会创建无限递归。

    在几千/百万/十亿次函数调用后导致堆栈溢出,并且它会“泄漏”内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多