2009-07-25 5 views
0

Je suis en train d'annuler un événement Application.OnTime utilisation de VBA dans Excel 2003, en utilisant le code suivant:Où annuler Application.OnTime dans VBA

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

où varNextRunTime est une variable globale contenant la prochaine fois il est dû à courir. Ce code s'exécute dans le gestionnaire d'événements Workbook_BeforeClose. Il est donc toujours exécuté lorsque le classeur est fermé, ce qui est mon intention. Toutefois, si l'utilisateur tente de fermer le classeur mais change d'avis et clique sur le bouton Annuler lorsque vous êtes invité à Enregistrer (Oui, Non, Annuler), l'événement Application.OnTime est toujours annulé. BeforeClose est toujours exécuté avant qu'ils décident d'appuyer sur annuler, donc quelqu'un a-t-il des idées comment je peux seulement annuler l'événement Application.OnTime lorsque le classeur est fermé?

Répondre

0

en utilisant Enquêter:

Application.Quit 

Si vous trouvez cette commande les résultats dans le programme Excel restant ouvert bien que le document a fermé, vous pouvez suivre avec

ActiveWorkbook.Close False 

Je ne suis pas position pour tester cela ou donner plus d'idées, malheureusement.

1

Vérifiez la propriété Saved du Workbook dans votre gestionnaire d'événements. Si le classeur n'est pas enregistré, affichez votre propre boîte de dialogue pour savoir si les utilisateurs souhaitent enregistrer les modifications, ne pas enregistrer les modifications ou annuler.

Voici un code approximatif. De toute évidence décommenter la ligne qui traite de la Application.OnTime partie et changer le titre MsgBox à quelque chose de convenable

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 
+1

Comme l'écrit ce enregistre le classeur si l'utilisateur clique sur Oui ou Non, n'est-ce pas? – nekomatic

+0

@nekomatic Maintenant corrigé - merci pour le heads-up – barrowc