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

VBA RmDir en Excel — borra una carpeta, pero solo si está vacía

|

VBA RmDir en Excel — borra una carpeta, pero solo si está vacía

TL;DRRmDir borra una carpeta solo cuando está vacía. Apúntala a una carpeta que todavía guarda archivos o subcarpetas y lanza error 75 — lo contrario exacto de Kill, 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 — RmDir elimina solo una carpeta vacía, lo contrario de Kill
  • Por qué una carpeta no vacía lanza error 75, y por qué eso es una característica de seguridad
  • Por qué RmDir borra carpetas, nunca archivos — y Kill es su opuesto
  • Cómo vaciar una carpeta (Kill de los archivos) antes de RmDir, 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:

  • Kill borra archivos, cualquier archivo, de inmediato, sin Papelera de reciclaje.
  • RmDir borra 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 con If Dir(path, vbDirectory) <> "" Then antes 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 usa fso.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íaRmDir path — una instrucción, y se niega (error 75) si te equivocabas al creerla vacía.
  • Carpeta de archivos → haz Kill de los archivos primero, luego RmDir del cascarón vacío.
  • Árbol de carpetas, contenido desechablefso.DeleteFolder — una llamada, pero trátala como a Kill: sin Papelera de reciclaje, sin deshacer.
  • Protege la existenciaIf Dir(path, vbDirectory) <> "" Then para que una carpeta que falta sea una operación nula, no error 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