2010-09-02 6 views
29

J'ai utilisé ce qui suit sans succès. Le classeur actif se ferme, en effet, mais la fenêtre Excel reste ouverte.Fermeture de l'application Excel en utilisant VBA

Application.ActiveWindow.Close SaveChanges:=False 
ActiveWorkbook.Close SaveChanges:=False 

Quelle est la commande qui met fin à l'application?

EDIT

Pour dire un peu plus: Dans le classeur événement Open exécuter une macro. Je veux mettre fin à l'application lorsque cette macro se termine. J'ai aussi essayé cela sans succès.

Private Sub Workbook_Open() 
    Macro_MyJob 
    Application.Quit 
End Sub 

Où dois-je mettre cette commande Application.Quit?

Répondre

44

Je pense que votre problème est qu'il ferme le document qui appelle la macro avant d'envoyer la commande pour quitter l'application.

Votre solution dans ce cas est de ne pas envoyer une commande pour fermer le classeur. Au lieu de cela, vous pouvez définir l'état "Saved" du classeur sur true, ce qui contournerait tout message relatif à la fermeture d'un livre non enregistré. Remarque: cela ne sauvegarde pas le classeur; ça donne l'impression que c'est enregistré.

ThisWorkbook.Saved = True 

puis, juste après

Application.Quit 
4
Application.Quit 

Doit faire l'affaire.

+1

Où devrais-je le mettre? – Brani

6

Pour éviter le message d'invite Enregistrer, vous devez insérer ces lignes

Application.DisplayAlerts = False 
ThisWorkbook.Save 
Application.DisplayAlerts = True 

Après avoir enregistré votre travail, vous devez utiliser ligne pour quitter l'application Excel

Application.Quit 

Ne mettez pas simplement ces lignes dans Private Sub Workbook_Open() à moins que vous ayez effectué une vérification de condition correcte, sinon vous risquez de gâcher votre fichier Excel.

Pour des raisons de sécurité, veuillez créer un module pour l'exécuter. Ce qui suit sont les codes que j'ai mis:

Sub testSave() 
Application.DisplayAlerts = False 
ThisWorkbook.Save 
Application.DisplayAlerts = True 
Application.Quit 
End Sub 

Espérons que cela vous aidera à résoudre le problème.

+0

Oui, le code d'un module fonctionne mieux. –

1

J'ai essayé une certaine séquence qui semble fonctionner comme vous pouvez le voir ci-dessous:

ThisWorkbook.Saved = True 
Application.Quit 
Application.ActiveWindow.Close SaveChanges:=False 
ActiveWorkbook.Close SaveChanges:=False 
-2
Sub button2_click() 
' 
' Button2_Click Macro 
' 
' Keyboard Shortcut: Ctrl+Shift+Q 
' 
    ActiveSheet.Shapes("Button 2").Select 
    Selection.Characters.Text = "Logout" 
    ActiveSheet.Shapes("Button 2").Select 
    Selection.OnAction = "Button2_Click" 
    ActiveWorkbook.Saved = True 
    ActiveWorkbook.Save 
    Application.Quit 
End Sub 
2
Sub TestSave() 
Application.Quit 
ThisWorkBook.Close SaveChanges = False 
End Sub 

Cela semble fonctionner pour moi, Même si ressemble suis stoppent application avant de l'enregistrer, mais il économise ...

+0

Cela a fonctionné pour moi aussi. Cependant, il vous manque deux points avant le signe égal, comme ceci: SaveChanges: = False – pylund