Question

Avec VBA, comment puis-je:

  1. teste l'existence d'un fichier et, le cas échéant,
  2. le supprimer?
Était-ce utile?

La solution

1.) Vérifiez ici . Fondamentalement, faites ceci:

Function FileExists(ByVal FileToTest As String) As Boolean
   FileExists = (Dir(FileToTest) <> "")
End Function

Je vous laisse le soin de déterminer les différentes méthodes de traitement des erreurs nécessaires, mais celles-ci font partie des problèmes de traitement des erreurs que je prendrais en considération:

  • Vérifiez si une chaîne vide est passée.
  • Recherche une chaîne contenant des caractères non autorisés dans un nom de fichier / chemin

2.) Comment supprimer un fichier. Regardez this. Utilisez essentiellement la commande Kill, mais vous devez autoriser la possibilité d'un fichier en lecture seule. Voici une fonction pour vous:

Sub DeleteFile(ByVal FileToDelete As String)
   If FileExists(FileToDelete) Then 'See above          
      ' First remove readonly attribute, if set
      SetAttr FileToDelete, vbNormal          
      ' Then delete the file
      Kill FileToDelete
   End If
End Sub

Encore une fois, je vous laisserai le traitement des erreurs et voici les points que je prendrais en considération:

  • Cela devrait-il se comporter différemment d’un répertoire à un fichier? Un utilisateur doit-il explicitement indiquer son intention de supprimer un répertoire?

  • Voulez-vous que le code réinitialise automatiquement l'attribut en lecture seule ou devez-vous indiquer à l'utilisateur une sorte d'indication que l'attribut en lecture seule est défini?

EDIT: Marquer cette réponse comme un wiki de communauté afin que tout le monde puisse la modifier si besoin est.

Autres conseils

Une autre façon de coder la réponse de Brettski, avec laquelle je suis entièrement d'accord, pourrait être

With New FileSystemObject
    If .FileExists(yourFilePath) Then
        .DeleteFile yourFilepath
    End If
End With

Même effet mais moins de déclarations de variables (enfin, aucune).

FileSystemObject est un outil vraiment utile et qui mérite d’être convivial. En dehors de toute autre chose, l'écriture de fichier texte peut parfois être plus rapide que l'alternative classique, ce qui peut surprendre quelques personnes. (Dans mon expérience au moins, YMMV).

Je vais probablement me faire flamber pour cela, mais quel est l'intérêt de tester l'existence si vous voulez juste le supprimer? L'un de mes principaux ennemis est une application qui ouvre une boîte de dialogue d'erreur avec le message "Impossible de supprimer le fichier, il n'existe pas!"

On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.

Si le fichier n'existe pas, mission accomplie!

Vous pouvez utiliser les éléments suivants pour vérifier l'existence d'un fichier, puis pour le supprimer.

Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
     Kill aFile
End If 

En VB, son Dir sert normalement à trouver le répertoire du fichier. S'il n'est pas vide, il existe et utilisez Kill pour supprimer le fichier.

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If

définissez une référence à la bibliothèque Scripting.Runtime , puis utilisez FileSystemObject:

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if

Voici un conseil: réutilisez-vous le nom du fichier ou prévoyez-vous quelque chose qui nécessite la suppression immédiate?

Non?

Vous pouvez demander à VBA d'activer la commande DEL & C; \ C: \ TEMP \ scratchpad.txt & "; / F à partir de l'invite de commande de manière asynchrone à l'aide de VBA.Shell:

    Shell & DEL; DEL " & amp; chr (34) & amp; strPath & amp; chr (34) & amp; " / F ", vbHide

Notez les guillemets (caractère ASCII 34) autour du nom du fichier: je suppose que vous avez un chemin réseau ou un nom de fichier long contenant des espaces.

Si le fichier est volumineux ou s’il s’agit d’une connexion réseau lente, il est impératif de procéder de manière autonome.  Bien sûr, vous ne voyez jamais si cela a fonctionné ou non; mais vous reprenez immédiatement votre VBA, et il est parfois préférable d’attendre le réseau.

Vous pouvez définir une référence à la bibliothèque Scripting.Runtime, puis utiliser FileSystemObject. Il a une méthode DeleteFile et une méthode FileExists.

Voir l'article MSDN ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top