una ruta renombrar para obtener nombres nombre masivamente masiva macro listar forma eliminar carpeta cambiar buscar archivos archivo vba file-io delete-file file-exists

ruta - Eliminar un archivo en VBA



macro para obtener ruta de un archivo (9)

Usando VBA, ¿cómo puedo:

  1. probar si existe un archivo, y si es así,
  2. ¿bórralo?

1.) Marque here . Básicamente haz esto:

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

Dejaré que te des cuenta de los diversos manejos de errores necesarios, pero estos son algunos de los errores que manejaría las cosas que estaría considerando:

  • Verifique que se haya pasado una cadena vacía.
  • Busca una cadena que contenga caracteres ilegales en un nombre de archivo / ruta

2.) Cómo eliminar un archivo. Mira this. Básicamente, use 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

Una vez más, dejaré que te traten los errores y nuevamente estas son las cosas que consideraría:

  • ¿Debería esto comportarse de manera diferente para un directorio vs. un archivo? ¿Debería un usuario tener que indicar explícitamente que quiere eliminar un directorio?

  • ¿Desea que el código restablezca automáticamente el atributo de solo lectura o debería darse al usuario algún tipo de indicación de que el atributo de solo lectura está configurado?

EDITAR: Marca esta respuesta como wiki de la comunidad para que cualquiera pueda modificarla si es necesario.


2 líneas de código en VBA ..

Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FileExists(strPath) Then FSO.DeleteFile ("" & strPath & "")


Aquí hay un consejo: ¿está volviendo a utilizar el nombre del archivo o planea hacer algo que requiere la eliminación de inmediato?

¿No?

Puede hacer que VBA dispare el comando DEL "C: / TEMP / scratchpad.txt" / F desde el símbolo del sistema asincrónicamente usando VBA.Shell:

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

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 se trata de 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 a la red.


En VB normalmente es Dir para encontrar el directorio del archivo. Si no está en blanco, entonces existe y luego usa Kill para deshacerse del archivo.

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


Lo siguiente se puede usar para probar la existencia de un archivo y luego para eliminarlo.

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


Probablemente me llame la atención por esto, pero ¿de qué sirve probar si existe la posibilidad de eliminarlo? Una de mis principales preocupaciones es una aplicación que arroja un cuadro de diálogo de error con algo así 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!


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 here .


Una forma alternativa de codificar la respuesta de Brettski, con la que estoy de acuerdo por completo, podría ser

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

Mismo efecto pero menos (bueno, nada) declaraciones de variables.

FileSystemObject es una herramienta realmente útil y vale la pena hacerse amigable. Aparte de todo lo demás, para la escritura de archivos de texto en realidad puede ser más rápido que la alternativa heredada, lo que puede sorprender a algunas personas. (En mi experiencia al menos, YMMV).


establezca una referencia a la biblioteca Scripting.Runtime y luego use FileSystemObject:

Dim fso as New FileSystemObject, aFile as File if (fso.FileExists("PathToFile")) then aFile = fso.GetFile("PathToFile") aFile.Delete End if