我有一些我支持的用户要求自动发生事情(更自动化,但这是另一点!)。
一个人希望事件每120秒发生一次(参见我的另一个问题),另一个人希望在每个工作日下午5点发生一件事。这必须在Excel工作表上,因此VBA作为插件等将是不,因为它需要自包含。
我非常不喜欢使用Application.OnTime
我觉得它危险且不可靠,其他人怎么想?
编辑:交叉发布在VBA Macro On Timer style to run code every set number of seconds, i.e. 120 seconds
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秒触发一次。
合理?
你是对的。 “onTime”调用自身的“无限”间隔创建无限递归。
它会在几千/百万/十亿次函数调用后导致堆栈溢出,并且会“泄漏”内存。