TL;DR —
RmDirborra una carpeta solo cuando está vacía. Apúntala a una carpeta que todavía guarda archivos o subcarpetas y lanzaerror 75— lo contrario exacto deKill, que borra cualquier archivo sin preguntar. «Borrar esta carpeta» es en realidad «vaciarla primero, y luego eliminarla».
Sub RemoveTempFolder()
RmDir "C:\Temp\Empty" ' funciona solo si C:\Temp\Empty no tiene nada dentro
RmDir "C:\Temp\Reports" ' error 75 si Reports aun contiene algun archivo o subcarpeta
End Sub
RmDir es la imagen especular de Kill. Donde Kill tritura archivos sin confirmación y sin deshacer,
RmDir es quisquilloso en la dirección contraria: se niega a tocar una carpeta que todavía contiene
cualquier cosa. Esa negativa es una característica de seguridad — no puedes arrasar una carpeta llena
por accidente — pero significa que la petición cotidiana de «borrar esta carpeta y todo lo que hay en
ella» no es una sola instrucción. Es una pequeña rutina, y saber por qué es todo el tema.
Lo que aprenderás
- El modelo mental —
RmDirelimina solo una carpeta vacía, lo contrario deKill - Por qué una carpeta no vacía lanza
error 75, y por qué eso es una característica de seguridad - Por qué
RmDirborra carpetas, nunca archivos — yKilles su opuesto - Cómo vaciar una carpeta (
Killde los archivos) antes deRmDir, y cómo las subcarpetas fuerzan la recursión - Cuándo echar mano de
FileSystemObject.DeleteFolder— una llamada, árbol entero, sin deshacer - El patrón de borrado protegido que no atascará una macro desatendida
El modelo mental: RmDir elimina solo una carpeta vacía
La idea clave es que RmDir borra la entrada de la carpeta, no su contenido. Eliminará un directorio
solo cuando no quede nada dentro — ni archivos, ni subcarpetas. Alinéalo con
Kill y los dos forman una pareja limpia:
Killborra archivos, cualquier archivo, de inmediato, sin Papelera de reciclaje.RmDirborra carpetas, pero solo las vacías, rechazando cualquiera con contenido.
Así que las dos instrucciones de borrado de VBA son deliberadamente estrechas: una solo archivos, la otra solo carpetas vacías. Ninguna hace lo que la gente teclea de verdad en un buscador — «borrar una carpeta y todo lo que hay en ella» — porque esa es la operación peligrosa, y los built-ins te obligan a montarla tú mismo.
Error 75: RmDir rechaza una carpeta no vacía
Apunta RmDir a una carpeta que todavía contiene archivos o subcarpetas y se detiene:
RmDir "C:\Temp\Reports" ' error 75 - "Path/File access error" si Reports no esta vacia
Este es el comportamiento que la define, y es intencionado. RmDir no dejará que una sola línea destruya
en silencio una carpeta llena de trabajo. Compáralo con su contrapartida para sentir la asimetría:
Kill "C:\Temp\*.xlsx" borra cada archivo que coincide sin aviso, mientras que RmDir "C:\Temp" sobre la
misma carpeta se niega de plano. Una instrucción es todo peligro; la otra es toda cautela. Para eliminar
una carpeta poblada debes vaciarla primero.
Vaciala primero: Kill de los archivos, luego RmDir
El patrón de dos pasos es borrar los archivos de la carpeta con Kill y luego
eliminar la carpeta ya vacía con RmDir:
Kill "C:\Temp\Reports\*.*" ' borra cada archivo de la carpeta (permanente - sin deshacer)
RmDir "C:\Temp\Reports" ' ahora la carpeta esta vacia, asi que esto tiene exito
Eso funciona cuando la carpeta guarda solo archivos. Si también contiene subcarpetas, Kill no
puede ayudar — Kill borra archivos, nunca carpetas — y cada subcarpeta debe vaciarse y eliminarse a su
vez. Un árbol de carpetas requiere por tanto recursión: baja al nivel más profundo, haz Kill de sus
archivos, RmDir de ella, y sube de vuelta. Como Kill sobre *.* es
permanente, haz esto solo cuando estés seguro de que el contenido es
desechable, y registra lo que estás a punto de borrar antes de borrarlo.
FileSystemObject.DeleteFolder: una llamada, árbol entero, sin deshacer
Cuando de verdad quieres «la carpeta y todo lo que hay en ella, fuera», el FileSystemObject tiene la
única llamada que RmDir se niega a ser:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") ' enlace tardio - corre en cualquier maquina
fso.DeleteFolder "C:\Temp\Reports" ' borra la carpeta Y todo su contenido
DeleteFolder elimina la carpeta, sus archivos y cada subcarpeta de un solo golpe — sin vaciado manual,
sin recursión que escribir. Ese poder es también el peligro: como Kill, se
salta la Papelera de reciclaje y no hay deshacer. Acepta comodines en el último elemento de la ruta, y
un segundo argumento True fuerza el borrado de archivos de solo lectura. Trata fso.DeleteFolder como
munición real — protégelo exactamente tan fuerte como protegerías a Kill, y nunca lo apuntes a una ruta
proporcionada por el usuario sin comprobarla.
El otro error: RmDir sobre una carpeta que falta
El segundo error en tiempo de ejecución es el caso de la carpeta que falta, y no coincide con el
número de Kill:
RmDir "C:\Temp\Gone" ' error 76 - "Path not found" si la carpeta no existe
error 76— la carpeta no está ahí. Protégete conIf Dir(path, vbDirectory) <> "" Thenantes de eliminar, para que una carpeta que ya se fue se trate como un éxito, no como una caída.error 75— la carpeta no está vacía (o está en uso / es de solo lectura). Vaciala primero, o usafso.DeleteFolder.
Fíjate en la diferencia con Kill, que lanza error 53 ante un archivo
que falta; RmDir sobre una carpeta que falta lanza error 76. La misma idea, distinto número,
porque una trabaja sobre archivos y la otra sobre carpetas — la
comprobación de existencia usa el flag vbDirectory para carpetas.
El patrón de borrado seguro para una macro desatendida
Juntando las protecciones, el borrado de carpeta que no atascará una ejecución programada:
Sub SafeRemoveFolder(ByVal folder As String)
If Dir(folder, vbDirectory) = "" Then Exit Sub ' ya no esta - nada que hacer
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder folder ' carpeta + todo el contenido, en una sola llamada
End Sub
La protección Dir(folder, vbDirectory) absorbe el caso común de «no está ahí» para que error 76 nunca
se dispare, y fso.DeleteFolder maneja una carpeta poblada sin recursión escrita a mano. Si quieres
específicamente el comportamiento seguro — negarte a borrar cualquier cosa no vacía — quédate con
RmDir y deja que error 75 sea tu cinturón de seguridad. Elige la herramienta según cuánto quieras
proteger el contenido.
El veredicto honesto: RmDir para lo vacío, DeleteFolder para el árbol
RmDir es la herramienta correcta para eliminar una carpeta que sabes que está vacía; cualquier otra cosa
es una decisión sobre cuánta seguridad quieres. Cuatro reglas:
- Carpeta vacía →
RmDir path— una instrucción, y se niega (error 75) si te equivocabas al creerla vacía. - Carpeta de archivos → haz
Killde los archivos primero, luegoRmDirdel cascarón vacío. - Árbol de carpetas, contenido desechable →
fso.DeleteFolder— una llamada, pero trátala como aKill: sin Papelera de reciclaje, sin deshacer. - Protege la existencia →
If Dir(path, vbDirectory) <> "" Thenpara que una carpeta que falta sea una operación nula, noerror 76.
En el momento en que te descubras echando mano de On Error Resume Next para que RmDir «funcione sin
más», detente — ese error te está diciendo que la carpeta no está vacía, y el arreglo es decidir,
deliberadamente, si su contenido debe sobrevivir.
Cómo ayuda ExcelMaster
Borrar una carpeta de forma segura significa saber que RmDir elimina solo una carpeta vacía
(error 75 en caso contrario), que borra carpetas pero nunca archivos, que una carpeta que falta es
error 76 y no 53, y que fso.DeleteFolder es la única llamada que arrasa un árbol entero — sin
deshacer.
ExcelMaster escribe el borrado que
coincide con tu intención. Describe el trabajo — «elimina la carpeta temporal después de cada ejecución» o
«limpia el árbol de exportación del mes pasado» — y produce el código correcto: RmDir con una protección
de existencia para una carpeta vacía, una pasada de Kill-y-luego-RmDir
cuando guarda archivos, o un fso.DeleteFolder protegido cuando el árbol entero debe irse. Tú describes lo
que debe quedar; él elige la herramienta que lo deja.
Preguntas frecuentes
¿Cómo borro una carpeta en VBA?
Usa la instrucción RmDir: RmDir "C:\Temp\Old". Elimina la carpeta, pero solo si la carpeta está
vacía — una carpeta que todavía contiene archivos o subcarpetas lanza error 75. Protégela con una
comprobación de existencia primero — If Dir("C:\Temp\Old", vbDirectory) <> "" Then RmDir "C:\Temp\Old" —
para que una carpeta que ya se fue no lance error 76.
¿Por qué VBA RmDir da error 75?
Porque la carpeta no está vacía. RmDir borra solo una carpeta vacía; si todavía contiene algún
archivo o subcarpeta, se detiene con error 75, «Path/File access error». Esta es una característica de
seguridad que evita que una sola línea arrase una carpeta llena. Para eliminar una carpeta poblada, borra
sus archivos con Kill primero, luego RmDir de la carpeta vacía — o usa FileSystemObject.DeleteFolder,
que elimina la carpeta y todo su contenido en una sola llamada.
¿Cómo borro una carpeta que no está vacía en VBA?
RmDir no puede — rechaza una carpeta no vacía. O la vacías primero (Kill "C:\Temp\Old\*.*" para borrar
los archivos, luego RmDir "C:\Temp\Old", manejando cualquier subcarpeta de forma recursiva), o usas el
FileSystemObject: fso.DeleteFolder "C:\Temp\Old" borra la carpeta y todo lo que hay dentro en una sola
llamada. DeleteFolder se salta la Papelera de reciclaje y no se puede deshacer, así que protégela tan
cuidadosamente como protegerías a Kill.
¿Cuál es la diferencia entre RmDir y Kill en VBA?
Son opuestos. Kill borra archivos — cualquier archivo, de inmediato, sin Papelera de reciclaje — y
lanza error 53 ante un archivo que falta. RmDir borra carpetas, pero solo las vacías, lanzando
error 75 ante una carpeta no vacía y error 76 ante una que falta. Kill nunca borra una carpeta y
RmDir nunca borra un archivo, así que eliminar una carpeta llena de archivos necesita ambos: Kill del
contenido, luego RmDir del cascarón.
¿RmDir mueve una carpeta a la Papelera de reciclaje?
No. RmDir borra la entrada de la carpeta directamente — no hay Papelera de reciclaje ni deshacer,
exactamente como Kill para los archivos. Lo mismo ocurre con FileSystemObject.DeleteFolder. Como
ninguno de estos se puede deshacer, confirma que la carpeta es desechable antes de borrar, y protege la
ruta para que una macro desatendida no elimine el directorio equivocado.
Probado en
Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 23/08/2026.
Guías relacionadas: VBA MkDir · VBA CurDir · VBA Delete File · VBA Check If File Exists · VBA FileSystemObject
