TL;DR —
Kill pathborra un archivo de forma permanente. No hay Papelera de reciclaje, ni confirmación, ni deshacer — unKillestá 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 —
Killes borrado permanente, no «mover a la Papelera de reciclaje» - Por qué
Killda 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é
Killno puede borrar una carpeta, y cómoRmDiryDeleteFolderreparten ese trabajo - Cuándo
FileSystemObject.DeleteFilecon su flag Force le gana aKillen 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 aKill.error 70— el archivo está abierto, es de solo lectura, o está bloqueado por otro proceso. No puedes hacerKillde un libro que está abierto en Excel;Closeprimero.
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
Diry hazDebug.Printo 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 & "\*.*"enKill "\*.*"— 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: hazKillde su contenido (o de los archivos que coincidan), luegoRmDirde la carpeta.fso.DeleteFolder path— la versión delFileSystemObjectelimina 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, comoKill, 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 existencia —
If Dir(path) <> "" Then Kill path, para que un archivo que falta sea un no-op, no unerror 53. - Maneja el caso bloqueado — envuelve
Killen un manejadorOn Errorde verdad con una comprobación deErrpara 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 bucleDir. - Archiva antes de borrar cualquier cosa que pudieras querer de vuelta — un
FileCopya una carpeta de archivo histórico es barato; recuperar un archivo al que hicisteKilles 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 tú 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
