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

  1. Elimina el contenido interno de una carpeta.
  2. Elimina la carpeta.
  3. 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, Kill y RmDir generan un error; con esta instrucción la macro lo ignora y continúa.

Limitaciones del código original

  • Kill no borra subcarpetas. Si dentro hay otra carpeta, RmDir fallará 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 Explicit al 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

  1. Guarda tu libro como .xlsm (libro habilitado para macros).
  2. Presiona Alt + F11 para abrir el editor de VBA.
  3. Menú Insertar → Módulo y pega el código.
  4. Cambia "NombreNuevaCarpeta" por el nombre que quieras.
  5. Ejecuta con F5 o asigna la macro a un botón (Programador → Insertar → Botón).

⚠ Cuidados importantes

  • Los archivos borrados con Kill o DeleteFolder no 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.Path puede 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.

No hay comentarios