【问题标题】:Where to cancel Application.OnTime in VBA在 VBA 中取消 Application.OnTime 的位置
【发布时间】:2009-07-25 12:37:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:
    【解决方案2】:

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

    这里有一些粗略的代码。显然取消注释处理Application.OnTime 部分的行并将MsgBox 标题更改为合适的名称

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    Dim response As Integer
    
    If Not (Me.Saved) Then
        response = MsgBox("Do you want to save changes to '" & Me.Name & "'?", vbYesNoCancel, "put title here")
    
        If (response = vbCancel) Then
            Cancel = True
        ElseIf (response = vbYes) Then
            Me.Save
        End If
    End If
    
    If Not (Cancel) Then
        ' Application.OnTime EarliestTime:=varNextRunTime, Procedure:="SomeMethod", Schedule:=False
    End If
    
    End Sub
    

    【讨论】:

    • 正如所写,无论用户单击是还是否,这都会保存工作簿,不是吗?
    【解决方案3】:

    调查使用:

    Application.Quit
    

    如果您发现此命令导致 Excel 程序在文档已关闭时仍保持打开状态,您可能需要使用

    ActiveWorkbook.Close False
    

    很遗憾,我无法对此进行测试或提供更多见解。

    【讨论】:

      【解决方案4】:

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

      如果用户通过关闭工作簿来停用它,则在触发 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
      

      【讨论】:

        猜你喜欢
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2015-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多