web-dev-qa-db-fra.com

Désactiver l'invite du Presse-papiers dans Excel VBA sur le classeur fermer

J'ai un classeur Excel qui, à l'aide d'un code VBA ouvrant un autre classeur, copie des données dans l'original, puis ferme le deuxième classeur.

Lorsque je ferme le deuxième classeur (avec Application.Close), je reçois un message pour:

Voulez-vous enregistrer le presse-papiers.

Existe-t-il une commande dans VBA qui contournera cette invite?

10
Craig T

Je peux offrir deux options

  1. Copie directe

Sur la base de votre description, je suppose que vous faites quelque chose comme 

Set wb2 = Application.Workbooks.Open("YourFile.xls")
wb2.Sheets("YourSheet").[<YourRange>].Copy
ThisWorkbook.Sheets("SomeSheet").Paste
wb2.close

Si tel est le cas, vous n'avez pas besoin de copier via le presse-papiers. Cette méthode copie directement de la source à la destination. Aucune donnée dans le presse-papiers = pas d'invite

Set wb2 = Application.Workbooks.Open("YourFile.xls")
wb2.Sheets("YourSheet").[<YourRange>].Copy ThisWorkbook.Sheets("SomeSheet").Cells(<YourCell")
wb2.close
  1. Supprimer l'invite

Vous pouvez empêcher toutes les alertes pop-up en configurant

Application.DisplayAlerts = False

[Modifier]

  1. Copier uniquement les valeurs : ne pas utiliser du tout copier/coller

Dim rSrc As Range
Dim rDst As Range
Set rSrc = wb2.Sheets("YourSheet").Range("YourRange")
Set rDst = ThisWorkbook.Sheets("SomeSheet").Cells("YourCell").Resize(rSrc.Rows.Count, rSrc.Columns.Count)
rDst = rSrc.Value
28
chris neilsen

Si je peux ajouter une solution supplémentaire: vous pouvez simplement annuler le presse-papiers avec cette commande:

Application.CutCopyMode = False
11
Sergiu

J'ai déjà rencontré ce problème par le passé - à première vue, si vous n'avez pas réellement besoin du presse-papiers au moment de quitter, vous pouvez donc utiliser la même solution simple que celle que j'avais auparavant. Vient de vider le presse-papiers. :)

ActiveCell.Copy

Chris

3
Chris Rae

Il suffit de vider le presse-papiers avant de fermer. 

Application.CutCopyMode=False
ActiveWindow.Close
0
Raleigh Paenitz

Il y a un travail simple autour. L'alerte n'apparaît que lorsque vous avez une grande quantité de données dans votre presse-papiers. Copiez simplement une cellule au hasard avant de fermer le classeur et elle ne s'affichera plus!

0
kid

Si vous ne souhaitez pas enregistrer les modifications et que vous ne voulez pas que Enregistrer l'invite lors de l'enregistrement d'un fichier Excel à l'aide d'une macro, ce morceau de code peut vous être utile.

Sub Auto_Close()

     ThisWorkbook.Saved = True

End Sub

Étant donné que la propriété Saved est définie sur True, Excel répond comme si le classeur avait déjà été enregistré et qu'aucune modification ne s'était produite depuis ce dernier enregistrement; par conséquent, aucune invite d'enregistrement.

0
Anil Chahal