在VBA中取消Application.OnTime的位置

时间:2009-07-25 12:37:04

标签: vba excel-vba excel

在Excel 2003中使用VBA,我正在尝试使用以下代码取消Application.OnTime事件:

Application.OnTime EarliestTime:=varNextRunTime, Procedure:="SomeMethod", Schedule:=False

其中varNextRunTime是一个包含下次运行时的全局变量。此代码在Workbook_BeforeClose事件处理程序中运行,因此在工作簿关闭时始终运行,这是我的意图。

但是,如果用户尝试关闭工作簿,但在提示保存(是,否,取消)时改变主意并按下取消按钮,则仍会取消Application.OnTime事件。 BeforeClose总是在他们决定取消之前运行,所以有人知道如何在工作簿关闭时取消Application.OnTime事件吗?

4 个答案:

答案 0 :(得分:1)

检查事件处理程序中Saved的{​​{1}}属性。如果工作簿未保存,则显示您自己的对话框,以确定用户是否要保存更改,而不是保存更改或取消。

这是一些粗略的代码。显然取消注释处理Workbook部分的行并将Application.OnTime标题更改为适合的内容

MsgBox

答案 1 :(得分:1)

答案 2 :(得分:0)

调查使用:

Application.Quit

如果您发现此命令导致Excel程序保持打开,尽管文档已关闭,您可能希望按照

进行操作
ActiveWorkbook.Close False

不幸的是,我无法对此进行测试或提供更多见解。

答案 3 :(得分:0)

演出晚了一点,但这是我遇到(并测试过)的一个简单解决方案:

如果用户通过关闭工作簿而将其停用,则在触发Workbook_WindowDeactivate事件时,该工作簿仍将保留为ActiveWorkbook。如果用户通过切换到另一个工作簿来停用该工作簿,则在Workbook_WindowDeactivate触发时,新工作簿将变为ActiveWorkbook。您可以使用此行为来确定导致事件触发的操作:

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    If Application.ActiveWorkbook.Name = Me.Name Then
        'Your code here
    End If
End Sub