Macro VBA en Excel para crear y borrar carpetas
Hola, amigos. Tengo un archivo de Excel guardado en una carpeta de Documentos y necesitaba que, con una macro, se eliminara una carpeta con todo su contenido y luego se volviera a crear vacía. Es algo muy útil cuando una macro genera reportes, PDF o copias de seguridad y quieres empezar cada vez con una carpeta limpia. En este post te comparto el código que diseñé, te explico cada instrucción, lo mejoro con una versión más robusta y te advierto sobre los cuidados necesarios, porque borrar archivos con VBA no tiene vuelta atrás.
Qué hace la macro
- Elimina el contenido interno de una carpeta.
- Elimina la carpeta.
- Crea una carpeta nueva con el mismo nombre.
La carpeta se ubica en la misma ruta donde está guardado el libro de Excel, gracias a ThisWorkbook.Path.
El código original
Sub MostrarRutaArchivo()
micarpeta = ThisWorkbook.Path
uiss = micarpeta & "\" & "NombreNuevaCarpeta"
Call borar_contenido_carpeta
Call borar_carpeta
If Len(Dir(uiss, vbDirectory)) = 0 Then
MkDir uiss ' crear carpeta
End If
End Sub
Sub borar_contenido_carpeta()
micarpeta = ThisWorkbook.Path
uiss = micarpeta & "\" & "NombreNuevaCarpeta"
On Error GoTo final ' en caso de error, salir
Kill uiss & "\*.*"
final:
End Sub
Sub borar_carpeta()
micarpeta = ThisWorkbook.Path
uiss = micarpeta & "\" & "NombreNuevaCarpeta"
On Error GoTo final1 ' en caso de error, salir
RmDir uiss ' eliminar carpeta
final1:
End Sub
Explicación de cada instrucción
- ThisWorkbook.Path: devuelve la ruta de la carpeta donde está guardado el libro, por ejemplo
C:\Users\TuUsuario\Documents. Si el libro nunca se ha guardado, devuelve una cadena vacía. - uiss = micarpeta & "\" & "NombreNuevaCarpeta": arma la ruta completa de la carpeta que queremos manejar.
- Kill uiss & "\*.*": borra todos los archivos de la carpeta. Los archivos no van a la papelera de reciclaje: se eliminan definitivamente.
- RmDir uiss: elimina la carpeta, pero solo si está vacía.
- Dir(uiss, vbDirectory): comprueba si la carpeta existe. Si devuelve una cadena vacía (longitud 0), no existe.
- MkDir uiss: crea la carpeta.
- On Error GoTo: si la carpeta no existe o ya está vacía,
KillyRmDirgeneran un error; con esta instrucción la macro lo ignora y continúa.
Limitaciones del código original
Killno borra subcarpetas. Si dentro hay otra carpeta,RmDirfallará y, como el error se ignora, la carpeta no se eliminará sin que te enteres.- La ruta se repite en tres procedimientos; si cambias el nombre de la carpeta, tienes que cambiarlo en tres lugares.
- Las variables no están declaradas. Agregar
Option Explicital inicio del módulo ayuda a detectar errores de escritura.
Versión mejorada con FileSystemObject
El objeto FileSystemObject de Windows permite borrar una carpeta con todas sus subcarpetas en una sola instrucción y da mensajes más claros:
Option Explicit
Sub ReiniciarCarpeta()
Dim fso As Object
Dim ruta As String
If ThisWorkbook.Path = "" Then
MsgBox "Guarda primero el libro para saber dónde crear la carpeta.", vbExclamation
Exit Sub
End If
ruta = ThisWorkbook.Path & Application.PathSeparator & "NombreNuevaCarpeta"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(ruta) Then
If MsgBox("Se borrará la carpeta:" & vbCrLf & ruta & vbCrLf & _
"con TODO su contenido. ¿Continuar?", _
vbYesNo + vbQuestion) = vbNo Then Exit Sub
On Error GoTo ErrorBorrar
fso.DeleteFolder ruta, True ' True = borrar también archivos de solo lectura
On Error GoTo 0
End If
fso.CreateFolder ruta
MsgBox "Carpeta lista: " & ruta, vbInformation
Exit Sub
ErrorBorrar:
MsgBox "No se pudo borrar la carpeta. ¿Hay algún archivo abierto?" & vbCrLf & _
"Detalle: " & Err.Description, vbCritical
End Sub
Ventajas de esta versión
- Borra archivos y subcarpetas con
DeleteFolder. - Pide confirmación antes de borrar, para evitar accidentes.
- Si un archivo está abierto (por ejemplo, un PDF en el visor), muestra un mensaje en lugar de fallar en silencio.
- Verifica que el libro esté guardado antes de usar su ruta.
- Usa
Application.PathSeparator, que funciona tanto en Windows como en Mac (aunque FileSystemObject solo existe en Windows).
Paso a paso para usarla
- Guarda tu libro como .xlsm (libro habilitado para macros).
- Presiona Alt + F11 para abrir el editor de VBA.
- Menú Insertar → Módulo y pega el código.
- Cambia
"NombreNuevaCarpeta"por el nombre que quieras. - Ejecuta con F5 o asigna la macro a un botón (Programador → Insertar → Botón).
⚠ Cuidados importantes
- Los archivos borrados con
KilloDeleteFolderno van a la papelera. Prueba primero con una carpeta de ensayo. - Nunca construyas la ruta con datos que pueda escribir cualquier usuario sin validarlos: una ruta vacía o equivocada podría apuntar a otra carpeta.
- Si la carpeta está sincronizada con OneDrive,
ThisWorkbook.Pathpuede devolver una dirección web (https://…) en lugar de una ruta local, y las instrucciones de carpetas fallarán. En ese caso, usa una ruta local fija o abre el libro desde una carpeta no sincronizada.
Preguntas frecuentes
¿Cómo borro solo los archivos de cierto tipo?
Con Kill ruta & "\*.pdf" borras solo los PDF y dejas el resto.
¿Puedo crear varias carpetas anidadas a la vez?
MkDir crea un nivel por vez: crea primero la carpeta padre y luego la hija.
¿Por qué sale "Error 75: Error de acceso a la ruta"?
Normalmente porque la carpeta no está vacía al usar RmDir, o porque algún archivo está abierto. La versión con FileSystemObject resuelve el primer caso.
Si quieres organizar mejor tus macros, mira cómo ejecutar desde un módulo el código de una hoja, y para practicar Excel sin macros, aprende Excel desde cero con 5 ejercicios.
Conclusión
Con Kill, RmDir y MkDir puedes vaciar, borrar y crear carpetas desde Excel, y con FileSystemObject lo haces de forma más completa y segura, incluso con subcarpetas. Prueba siempre en una carpeta de ensayo y pide confirmación antes de borrar.

Comentarios