Usando VBA, ¿cómo puedo:
1.) Compruebe aquí . Básicamente haz esto:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Le dejaré a usted que averigüe los diversos tipos de errores que se necesitan, pero estos son algunos de los aspectos de los que estaría considerando:
2.) Cómo eliminar un archivo. Mira esto. Básicamente, utilice el comando Kill, pero debe tener en cuenta la posibilidad de que un archivo sea de solo lectura. Aquí hay una función para ti:
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
Nuevamente, le dejaré el manejo del error y nuevamente estas son las cosas que consideraría:
¿Debería esto comportarse de manera diferente para un directorio en lugar de un archivo? ¿Debería un usuario tener que indicar explícitamente que desea eliminar un directorio?
¿Desea que el código restablezca automáticamente el atributo de solo lectura o se le debe dar al usuario algún tipo de indicación de que el atributo de solo lectura está establecido?
EDITAR: Marcar esta respuesta como wiki de la comunidad para que cualquiera pueda modificarla si es necesario.
Una forma alternativa de codificar la respuesta de Brettski, con la que estoy completamente de acuerdo, podría ser
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
Mismo efecto pero menos declaraciones de variables (bueno, ninguna en absoluto).
El FileSystemObject es una herramienta realmente útil y vale la pena ser amigable. Aparte de todo lo demás, la escritura de archivos de texto puede ser a veces más rápida que la alternativa heredada, lo que puede sorprender a algunas personas. (En mi experiencia al menos, YMMV).
Se puede usar lo siguiente para probar la existencia de un archivo y luego eliminarlo.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
Probablemente me enojaré por esto, pero ¿cuál es el punto de la prueba de existencia si solo lo va a eliminar? Una de mis principales acciones de mascotas es una aplicación que muestra un cuadro de diálogo de error con algo como "No se pudo eliminar el archivo, ¡no existe!"
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 el archivo no existe en primer lugar, ¡misión cumplida!
En VB es normalmente Dir
para encontrar el directorio del archivo. Si no está en blanco, entonces existe y luego use Kill
para deshacerse del archivo.
test = Dir(Filename)
If Not test = "" Then
Kill (Filename)
End If
establece una referencia a la biblioteca Scripting.Runtime y luego usa FileSystemObject:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
Aquí hay una sugerencia: ¿está reutilizando el nombre del archivo o planea hacer algo que requiera la eliminación inmediata?
¿No?
Puede hacer que VBA ejecute el comando DEL "C:\TEMP\scratchpad.txt"/F desde el Indicador de comando asincrónicamente usando VBA.Shell:
Shell "DEL" & chr (34) & strPath & chr (34) & "/ F", vbOcultar
Tenga en cuenta las comillas dobles (carácter ASCII 34) alrededor del nombre de archivo: Supongo que tiene una ruta de red o un nombre de archivo largo que contiene espacios.
Si es un archivo grande, o está en una conexión de red lenta, disparar y olvidar es el camino a seguir. Por supuesto, nunca puedes ver si esto funcionó o no; pero reanuda su VBA inmediatamente, y hay momentos en que esto es mejor que esperar por la red.
Puede establecer una referencia a la biblioteca Scripting.Runtime y luego usar FileSystemObject. Tiene un método DeleteFile y un método FileExists.
Vea el artículo de MSDN aquí .