🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Borrar Archivo en Excel — Kill, FileSystemObject.DeleteFile, y por qué no hay deshacer

|

VBA Borrar Archivo en Excel — Kill, FileSystemObject.DeleteFile, y por qué no hay deshacer

TL;DRKill path borra un archivo de forma permanente. No hay Papelera de reciclaje, ni confirmación, ni deshacer — un Kill está más cerca de una trituradora que de arrastrar un archivo a la papelera. Además da error en lugar de no hacer nada si el archivo falta o está abierto, así que el patrón seguro siempre comprueba primero:

Sub DeleteTempFile()
    Dim path As String
    path = "C:\Reports\~temp.xlsx"
    If Dir(path) <> "" Then Kill path      ' solo haz Kill de lo que existe de verdad - y desaparece para siempre
End Sub

Después de que una macro ha copiado o procesado sus archivos, el último paso suele ser limpiar — borrar el archivo temporal, vaciar las exportaciones de ayer. Kill es el built-in que lo hace, y es genuinamente peligroso de una forma en que FileCopy no lo es: no hay manera de recuperar el archivo. Todo lo que vale la pena saber sobre Kill es una regla para mantenerte del lado correcto de esa puerta de un solo sentido.

Lo que aprenderás

  • El modelo mental — Kill es borrado permanente, no «mover a la Papelera de reciclaje»
  • Por qué Kill da error en un archivo que falta o está abierto en lugar de no hacer nada en silencio
  • Cómo un comodín borra muchos archivos a la vez — potente, e implacable con las erratas
  • Por qué Kill no puede borrar una carpeta, y cómo RmDir y DeleteFolder reparten ese trabajo
  • Cuándo FileSystemObject.DeleteFile con su flag Force le gana a Kill en archivos de solo lectura
  • El patrón de borrado seguro — comprueba, luego borra, y archiva primero cuando haya duda

El modelo mental: Kill es permanente, no la Papelera de reciclaje

Lo más importante de Kill es lo que no hace: no mueve el archivo a la Papelera de reciclaje. Cuando borras un archivo en el Explorador de archivos, Windows guarda en silencio una copia que puedes restaurar. Kill se salta todo eso. El archivo se desvincula del disco de inmediato y no hay ninguna forma soportada de recuperarlo desde VBA.

Trata Kill como un administrador de Unix trata rm — como una operación irreversible que apuntas con cuidado y disparas de forma deliberada. Ese encuadre impulsa cada regla de abajo. Si un archivo pudiera seguir siendo necesario, la jugada correcta no es un Kill más ingenioso; es copiarlo a un archivo histórico antes de borrar el original.

Kill da error en un archivo que falta o está abierto — no es un no-op

Un número sorprendente de personas asume que Kill sobre un archivo inexistente simplemente no hace nada. No es así — lanza un error en tiempo de ejecución:

Kill "C:\Reports\does-not-exist.xlsx"   ' error 53 - "File not found"
Kill "C:\Reports\open-book.xlsx"        ' error 70 - "Permission denied" (el archivo esta abierto/bloqueado)
  • error 53 — el archivo no está ahí. Protégete con un test de existencia antes de llamar a Kill.
  • error 70 — el archivo está abierto, es de solo lectura, o está bloqueado por otro proceso. No puedes hacer Kill de un libro que está abierto en Excel; Close primero.

Así que el borrado canónico es una protección de dos partes: comprueba que el archivo existe con Dir(path) <> "" para el caso común de «no está», y envuelve la llamada en On Error para el caso menos frecuente de bloqueo — porque un archivo puede pasar el test de existencia y aun así estar bloqueado un milisegundo después:

If Dir(path) <> "" Then
    On Error Resume Next          ' maneja el caso del archivo bloqueado explicitamente
    Kill path
    If Err.Number <> 0 Then MsgBox "Could not delete: " & path & " (" & Err.Description & ")"
    On Error GoTo 0
End If

Fíjate en la diferencia con copiar: aquí On Error es un manejador deliberado para un fallo conocido y raro, no un supresor general. Envolver a ciegas cada Kill en On Error Resume Next sin comprobar Err es como la limpieza deja de ocurrir en silencio.

Los comodines borran muchos archivos a la vez — sin ningún aviso

Kill acepta los mismos comodines * y ? que Dir, y los aplica a cada coincidencia en una sola instrucción:

Kill "C:\Reports\Temp\*.tmp"     ' borra CADA .tmp de esa carpeta - sin aviso, sin deshacer

Esto es enormemente útil para la limpieza y genuinamente peligroso. No hay confirmación, así que una errata en el patrón — *.xls* cuando querías decir *.tmp, o la carpeta equivocada — borra mucho más de lo que pretendías, al instante y de forma permanente. Dos hábitos de seguridad:

  • Lee antes de borrar. Si el patrón es en algo dinámico, recórrelo primero con Dir y haz Debug.Print o registra cada nombre que se borraría, y luego borra en una segunda pasada.
  • Nunca construyas la ruta a partir de una entrada sin comprobar. Una variable en blanco convierte Kill folder & "\*.*" en Kill "\*.*" — apuntado al lugar completamente equivocado.

Una sutileza con los comodines y los bucles: no puedes ejecutar de forma segura una enumeración Dir y hacer Kill de las coincidencias dentro del mismo bucle, porque borrar archivos muta la carpeta que el cursor de Dir está recorriendo. Reúne primero los nombres en un array, luego borra — el patrón de dos pasadas de la guía de Dir.

Kill borra archivos, no carpetas — RmDir y DeleteFolder

Kill elimina archivos. Apúntalo a una carpeta y obtienes error 5 (llamada a procedimiento no válida). Las carpetas son un conjunto de herramientas distinto, y se dividen según si la carpeta está vacía:

  • RmDir path — elimina una carpeta vacía solamente. Si todavía hay algo dentro, error 75. Así que la forma built-in de borrar una carpeta es: haz Kill de su contenido (o de los archivos que coincidan), luego RmDir de la carpeta.
  • fso.DeleteFolder path — la versión del FileSystemObject elimina una carpeta y todo lo que contiene, de forma recursiva, en una sola llamada. Esta es la herramienta cuando necesitas arrasar un árbol entero — y, como Kill, no usa la Papelera de reciclaje.

Confundirlos es común: la gente prueba Kill "C:\OldExports" para eliminar una carpeta y le sorprende el error. Los archivos usan Kill; las carpetas vacías usan RmDir; los árboles llenos usan fso.DeleteFolder.

FileSystemObject.DeleteFile: el flag Force para archivos de solo lectura

Kill se niega a borrar un archivo de solo lectura — lanza error 70, el mismo error de permisos que un archivo abierto. El FileSystemObject te da una herramienta más limpia con una anulación explícita:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")   ' enlace tardio - corre en cualquier maquina
If fso.FileExists(path) Then fso.DeleteFile path, True  ' Force:=True borra tambien los archivos de solo lectura

DeleteFile también combina con fso.FileExists para una comprobación de existencia sin estado que nunca perturba un bucle Dir, y acepta comodines como Kill. Echa mano de él cuando ya estés usando el FileSystemObject para el resto del trabajo, o específicamente cuando haya archivos de solo lectura en juego — pero respeta que Force:=True es más peligroso que Kill, no menos: borra archivos que alguien protegió deliberadamente.

El veredicto honesto: comprueba, luego borra — y archiva cuando no estés seguro

Kill es la herramienta correcta para la limpieza, y exige más respeto que cualquier otra instrucción de archivos precisamente porque no se puede deshacer. Cuatro reglas:

  • Protege la existenciaIf Dir(path) <> "" Then Kill path, para que un archivo que falta sea un no-op, no un error 53.
  • Maneja el caso bloqueado — envuelve Kill en un manejador On Error de verdad con una comprobación de Err para el archivo abierto o de solo lectura; no suprimas de forma general.
  • Trata los comodines como munición real — lee (o registra) las coincidencias antes de un Kill *.* dinámico, y reúne-y-luego-borra en lugar de borrar dentro de un bucle Dir.
  • Archiva antes de borrar cualquier cosa que pudieras querer de vuelta — un FileCopy a una carpeta de archivo histórico es barato; recuperar un archivo al que hiciste Kill es imposible.

Cuando no tengas la certeza de que un archivo es desechable, no lo borres — cópialo aparte primero. Kill no tiene deshacer, así que eres el deshacer.

Cómo ayuda ExcelMaster

Borrar archivos de forma segura significa proteger la existencia, manejar el caso del archivo bloqueado sin silenciar errores de verdad, respetar los comodines que borran muchos archivos a la vez, y saber que las carpetas necesitan RmDir o DeleteFolder en lugar de Kill — mucha cautela para envolver una sola instrucción irreversible.

ExcelMaster escribe la versión segura. Describe la limpieza — «borra cada archivo temporal de esta carpeta después de la exportación» o «elimina la carpeta de archivo histórico del mes pasado» — y produce el Kill protegido con la comprobación de existencia y el manejador de errores, el bucle de reunir-y-luego-borrar cuando los archivos se enumeran, la división RmDir/DeleteFolder para las carpetas, y una copia de archivo histórico primero cuando los archivos todavía pudieran ser necesarios. Tú describes el resultado; él evita que la puerta de un solo sentido te atrape.

Preguntas frecuentes

¿Cómo borro un archivo en VBA?

Usa el built-in Kill path — por ejemplo Kill "C:\Reports\temp.xlsx". Protégelo primero con un test de existencia, If Dir(path) <> "" Then Kill path, porque Kill lanza error 53 en un archivo que no existe en lugar de no hacer nada. Recuerda que Kill borra de forma permanente — no hay Papelera de reciclaje ni deshacer — así que copia cualquier cosa que pudieras necesitar a un archivo histórico antes de borrarla.

¿VBA Kill mueve el archivo a la Papelera de reciclaje?

No. Kill borra el archivo de inmediato y de forma permanente; no va a la Papelera de reciclaje y no hay ninguna forma soportada de recuperarlo desde VBA. Esto es distinto de borrar en el Explorador de archivos, que guarda una copia restaurable. Si necesitas comportamiento de papelera debes llamar a la API del Shell de Windows — de lo contrario trata cada Kill como definitivo y archiva primero cuando haya duda.

¿Por qué VBA Kill da error 70 o error 53?

error 53 (File not found) significa que el archivo no existe — protégete con If Dir(path) <> "" Then antes de hacer Kill. error 70 (Permission denied) significa que el archivo está abierto, es de solo lectura, o está bloqueado por otro proceso — cierra cualquier libro abierto primero, y para archivos de solo lectura usa fso.DeleteFile path, True con el flag Force. Kill da error en estos casos en lugar de no hacer nada en silencio.

¿Cómo borro varios archivos con un comodín en VBA?

Kill acepta comodines, así que Kill "C:\Temp\*.tmp" borra cada archivo .tmp de esa carpeta en una sola instrucción — sin ningún aviso y sin deshacer. Como no hay confirmación, registra primero las coincidencias con un bucle Dir si el patrón es dinámico, y nunca borres dentro de un bucle Dir (reúne los nombres en un array, luego borra) ya que borrar muta la carpeta que el cursor está recorriendo.

¿Cómo borro una carpeta en VBA?

Kill borra archivos, no carpetas. Para eliminar una carpeta vacía usa RmDir path; si todavía tiene contenido, haz Kill de eso primero, luego RmDir. Para borrar una carpeta y todo lo que hay dentro en una sola llamada, usa el FileSystemObject: fso.DeleteFolder path, que elimina todo el árbol de forma recursiva. Como Kill, ninguno usa la Papelera de reciclaje.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 22/08/2026.

Guías relacionadas: VBA Copy File · VBA Rename File · VBA Check If File Exists · VBA Dir · VBA FileSystemObject