Avec VBA, comment puis-je:
1.) Vérifiez ici . Fondamentalement faire 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:
2.) Comment supprimer un fichier. Regardez this. Utilisez essentiellement la commande Kill, mais vous devez prévoir la possibilité qu'un fichier soit 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 vais laisser la gestion des erreurs à vous et encore ce sont les choses que je considérerais:
Cela devrait-il se comporter différemment pour un répertoire par rapport à 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.
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.
FileSystemObject est un outil vraiment utile et qui mérite d'être mis à l'aise. 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 être enflammé pour cela, mais quel est l'intérêt de tester l'existence si vous voulez simplement le supprimer? L'un de mes principaux ennemis est une application qui lance 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!
Les éléments suivants peuvent être utilisés pour tester 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
Dans VB c'est normalement Dir
pour trouver le répertoire du fichier. Si ce n'est pas vide, alors il existe et utilisez ensuite 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 faire quelque chose qui nécessite la suppression immédiate?
Non?
Vous pouvez demander à VBA d'activer la commande DEL "C:\TEMP\scratchpad.txt"/F à partir de l'invite de commande de manière asynchrone à l'aide de VBA.Shell:
Shell "DEL" & chr (34) & strPath & chr (34) & "/ F", vbHide
Notez les guillemets (caractère ASCII 34) autour du nom du fichier: je suppose que vous avez un chemin d'accès réseau ou un nom de fichier long contenant des espaces.
Si le fichier est volumineux ou sur une connexion réseau lente, il est préférable de faire feu et d’oublier. 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 .