在Excel 2003中使用VBA,我正在尝试使用以下代码取消Application.OnTime事件:
Application.OnTime EarliestTime:=varNextRunTime, Procedure:="SomeMethod", Schedule:=False
其中varNextRunTime是一个包含下次运行时的全局变量。此代码在Workbook_BeforeClose事件处理程序中运行,因此在工作簿关闭时始终运行,这是我的意图。
但是,如果用户尝试关闭工作簿,但在提示保存(是,否,取消)时改变主意并按下取消按钮,则仍会取消Application.OnTime事件。 BeforeClose总是在他们决定取消之前运行,所以有人知道如何在工作簿关闭时取消Application.OnTime事件吗?
答案 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