web-dev-qa-db-fra.com

Comment utiliser classeur.saveas avec écrasement automatique

Dans cette section de code, Excel indique TOUJOURS: "Le fichier existe déjà, voulez-vous écraser?"

Application.DisplayAlerts = False
Set xls = CreateObject("Excel.Application")
Set wb = xls.Workbooks.Add
fullFilePath = importFolderPath & "\" & "A.xlsx"

wb.SaveAs fullFilePath, AccessMode:=xlExclusive, ConflictResolution:=True   

wb.Close(True)

Pourquoi db.SaveAs m'invite-t-il toujours à écraser le fichier existant si j'ai DisplayAlerts = False?

Merci d'avance!

52
bob.mazzo

Pour ne pas voir le jeu d'invites xls.DisplayAlerts = False

ConflictResolution n'est pas une propriété true ou false, mais xlLocalSessionChanges - notez que cela n'a rien à voir avec l'affichage de l'invite de remplacement!

Set xls = CreateObject("Excel.Application")    
xls.DisplayAlerts = False
Set wb = xls.Workbooks.Add
fullFilePath = importFolderPath & "\" & "A.xlsx"

wb.SaveAs fullFilePath, AccessMode:=xlExclusive,ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges    
wb.Close (True)
71
Sorceri

Je recommande que, avant d'exécuter SaveAs, supprimez le fichier qu'il existe.

If Dir("f:ull\path\with\filename.xls") <> "" Then
    Kill "f:ull\path\with\filename.xls"
End If

C’est plus simple que de désactiver et d’activer DisplayAlerts. De plus, si DisplayAlerts reste désactivé en raison d’un blocage du code, des problèmes peuvent survenir si vous utilisez Excel dans la même session.

7
Uttam

Diviser la différence d'opinion

Je préfère:

   xls.DisplayAlerts = False    
   wb.SaveAs fullFilePath, AccessMode:=xlExclusive, ConflictResolution:=True   
   xls.DisplayAlerts = True

..

0
Harry S