web-dev-qa-db-fra.com

Fermeture d'une application Excel à l'aide de VBA

J'ai utilisé ce qui suit sans succès. Le classeur actif se ferme, certes, mais la fenêtre Excel reste ouverte.

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

Quelle est la commande qui termine l'application?

MODIFIER

Pour en dire un peu plus: Dans le classeur Ouvrir événement, je lance une macro. Je veux terminer l'application lorsque cette macro est terminée. J'ai aussi essayé cela sans succès.

Private Sub Workbook_Open()
   Macro_MyJob
   Application.Quit
End Sub

Où devrais-je placer cette commande Application.Quit?

29
Brani

Je pense que votre problème est que c'est la fermeture du document qui appelle la macro avant d'envoyer la commande pour quitter l'application.

Dans ce cas, votre solution consiste à ne pas envoyer de commande pour fermer le classeur. Au lieu de cela, vous pouvez définir l'état "Saved" du classeur sur true, ce qui contournerait les messages relatifs à la fermeture d'un livre non enregistré. Remarque: cela n'enregistre pas le classeur. cela donne simplement l'impression que c'est sauvegardé.

ThisWorkbook.Saved = True

et puis, juste après

Application.Quit
48
variant

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

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

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

Application.Quit

Ne mettez pas simplement ces lignes dans Private Sub Workbook_Open () à moins que vous ne vérifiiez correctement les conditions, sinon vous risquez de gâcher votre fichier Excel. 

Pour des raisons de sécurité, veuillez créer un module pour l’exécuter. Voici les codes que je mets:

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

J'espère que cela vous aidera à résoudre le problème.

7
Leng Keong
Application.Quit 

Devrait faire l'affaire.

4
Michael
Sub TestSave()
Application.Quit
ThisWorkBook.Close SaveChanges = False
End Sub

Cela semble fonctionner pour moi, même si on dirait que je quitte l'application avant de sauvegarder, mais cela sauve ... 

3
kc kalama

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

Dans mon cas, je devais fermer une seule fenêtre Excel et non l’application entière. Je devais donc indiquer quelle fenêtre exacte fermer sans la sauvegarder.

Les lignes suivantes fonctionnent très bien:

Windows("filename.xlsx").Activate
ActiveWorkbook.Close SaveChanges:=False