Excel VBA Application.OnTime。我觉得使用这个想法是个坏主意......想法无论如何?

问题描述 投票:3回答:2

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

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

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


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

excel excel-vba timer scheduling vba
2个回答
12
投票

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

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

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

合理?


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.