如果我使用通过Application.OnTime安排的过程复制Excel文档,是否将计划复制到新文档?

时间:2017-08-30 08:45:39

标签: excel excel-vba vba

这是一个非常简单的问题,但我无法在任何地方找到答案。

可能需要更多信息。我将来有一本工作手册和一些程序表。

现在我知道没有简单的方法来摆脱时间表,所以我想知道我是否要复制文件,是否也会复制时间表?

2 个答案:

答案 0 :(得分:2)

使用Application.OnTime,您将在当前Application对象的范围内安排程序。例如。如果你关闭它,所有活动的时间表都将被取消。

可能是计划的运行在Workbook_Open事件或类似事件中设置 - 在这种情况下,只要您打开(复制或原始)文档,计划就会恢复。

正如Zeretil所暗示他的回答:时间表将在创建时间表时参考工作簿的程序。复制并打开工作簿时,这不会更改,副本中的过程当然不会运行。 如果使用原始工作簿关闭应用程序,则计划也将停止运行。

最后但并非最不重要:通过使用Schedule方法的OnTime参数,可以轻松地取消当前工作簿中的计划: 取消程序的时间表"测试":

编辑:包含可变时间的时间表+在设定时间取消

Sub RunTestOnTime()
Dim eTime as Variant
eTime = Now() + TimeValue("00:00:20") 'Store the time in a variable

Application.Ontime EarliestTime:=eTime, Procedure:="test" 'Schedule it
Application.OnTime EarliestTime:=eTime, Procedure:="test", Schedule:=False 'Delete schedule.
End Sub

有关OnTime方法here on MSDN

的完整文档

答案 1 :(得分:0)

因为我是一个非常不耐烦的人,我决定自己测试一下。

以下是我使用的代码:

Testcode

虽然"测试"程序正在每20秒正确执行一次,我复制并打开了工作簿的副本。 Workbooks

事实上,时间表确实没有被复制,因此复制和替换文档似乎是摆脱OnTime事件的最简单的解决方案。将文档重命名为原始名称不会导致计划在复制的文档上运行。