2017-03-03 3 views
1

J'ai ce classeur et je veux le faire ressembler à un programme. Je veux aussi que les gens qui l'utilisent ne puissent quitter l'application que par un bouton de commande spécifique.Application de fermeture uniquement via VBA

Voici le code que j'ai

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Application.OnKey "{ESC}" 
Cancel = True 
MsgBox "Please use the QUIT button to save and close the database." 
End Sub 

Et pour le Quit:

Sub SAVE_CLOSE 
ActiveWorkbook.Save 
If Workbooks.Count < 2 Then 
Application.Quit 
Else 
ActiveWorkbook.Close 
End If 
End Sub 

Mon problème est que lorsque l'utilisateur quitte l'application à travers ce bouton, il déclenche le Private Sub Workbook_BeforeClose événement et annuler le processus d'abandon. Comment voulez-vous résoudre ce problème?

Merci!

Répondre

2

Il suffit de définir un drapeau dans le gestionnaire de bouton et test en cas BeforeClose:

En ThisWorkbook ...

Public okToClose As Boolean      '<--module level. 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    If Not okToClose Then 
     Application.OnKey "{ESC}" 
     Cancel = True 
     MsgBox "Please use the QUIT button to save and close the database." 
    End If 
End Sub 

... et dans le gestionnaire ...

Sub SAVE_CLOSE() 
    ActiveWorkbook.Save 
    ThisWorkbook.okToClose = True 
    If Workbooks.Count < 2 Then 
     Application.Quit 
    Else 
     ActiveWorkbook.Close 
    End If 
End Sub 

Notez que vous devez éviter d'appeler ActiveWorkbook.Close - utilisez plutôt une référence matérielle. Workbook_BeforeClose() est appelé chaque fois que le classeur est sur le point de se fermer (que ce soit votre méthode ou non), vous aurez besoin d'un moyen dans cette méthode pour détruire la valeur de travail de quelqu'un ...

+0

Oh hey, ce que je tapais, mais avec des exemples! Agréable. :) – steegness

+0

Travailler comme un charme! Je vous remercie! – Alex

-1

Sachez que c'est votre bouton qui l'a appelé. Peut-être une variable globale, ou une valeur dans une cellule donnée sur une feuille cachée?