Pregunta

Usando VBA, ¿cómo puedo:

  1. comprobar si existe un archivo y, de ser así,
  2. ¿bórralo?
¿Fue útil?

Solución

1.) Verificar aquí.Básicamente haz esto:

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

Dejaré que usted descubra los diversos manejos de errores necesarios, pero estos se encuentran entre los aspectos de manejo de errores que estaría considerando:

  • Compruebe si se pasa una cadena vacía.
  • Compruebe si hay una cadena que contenga caracteres ilegales en un nombre/ruta de archivo

2.) Cómo eliminar un archivo.Mira a este. Básicamente use el comando Matar, pero debe permitir la posibilidad de que un archivo sea de solo lectura.Aquí tienes una función:

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, te dejaré el manejo de errores y nuevamente estas son las cosas que consideraría:

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

  • ¿Quiere 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á configurado?


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

Otros consejos

Una forma alternativa de codificar la respuesta de Brettski, con la que por lo demás estoy totalmente de acuerdo, podría ser

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

El mismo efecto pero menos (bueno, ninguna) declaraciones de variables.

FileSystemObject es una herramienta realmente útil y vale la pena familiarizarse con ella.Aparte de cualquier otra cosa, para escribir archivos de texto, a veces puede ser más rápido que la alternativa heredada, lo que puede sorprender a algunas personas.(Al menos en mi experiencia, YMMV).

Probablemente me criticarán por esto, pero ¿cuál es el punto de probar su existencia si simplemente vas a eliminarlo?Una de mis principales cosas que me molestan 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!

Lo siguiente se puede utilizar para comprobar 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 

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

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

Dim fso as New FileSystemObject, aFile as File

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

Aquí tienes un consejo:¿Está reutilizando el nombre del archivo o planea hacer algo que requiera eliminarlo inmediatamente?

¿No?

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

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

Tenga en cuenta las comillas dobles (carácter ASCII 34) alrededor del nombre del 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 podrás ver si esto funcionó o no;pero reanuda su VBA inmediatamente y hay ocasiones en las que esto es mejor que esperar 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.

Ver el artículo de MSDN aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top