Hola a todos!.
El post de hoy surge como respuesta a una consulta que me enviaron hace unos días. La necesidad que me comentaron era el poder crear una o varias carpetas desde VBA en un directorio seleccionado.
Bien, esto es sencillo de realizar en VBA y con unas cuantas líneas de código lo tendremos solucionado. Imaginad que tenemos que crear 16 carpetas con estos nombres:

Con esta sencilla macro lo realizaremos en segundos:
Option Explicit
Sub Crear_Carpeta()
'Definimos variables
Dim Path As String, dir_archivo As Variant
Dim fin As Long, i As Long
'Abrimos ventana de selección
Set dir_archivo = Application.FileDialog(msoFileDialogFolderPicker)
dir_archivo.Show
'Si no seleccionamos nada salimos del proceso
If dir_archivo.SelectedItems.Count = 0 Then
Exit Sub
End If
'Obtenemos ruta
Path = dir_archivo.SelectedItems(1)
fin = Application.CountA(Range("A:A"))
'Creamos carpetas
For i = 2 To fin
MkDir Path & "\" & Cells(i, 1)
Next i
End Sub
Como podéis observar utilizamos la función MKDir creamos muy fácilmente la nueva carpeta, indicando únicamente la ruta y el nombre ya lo tenemos.
El resultado es el siguiente:

Perfectamente logrado y con la duda del lector solucionada.
Y esto es todo, espero que os haya resultado de interés 🙂
A continuación puedes descargar el archivo:
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
¿Y dentro de esas carpetas se podría hacer subcarpetas?
Hola Paula:
Sí se puede, en el ejemplo que he puesto, crea en la columna B otros nombres de carpeta (ejem: subcarpeta1, 2 , 3, así hasta 16) y luego ejecuta este código 🙂
Option Explicit
Sub Crear_Carpeta()
'Definimos variables
Dim Path As String, dir_archivo As Variant
Dim fin As Long, i As Long, nPath As String
'Abrimos ventana de selección
Set dir_archivo = Application.FileDialog(msoFileDialogFolderPicker)
dir_archivo.Show
'Si no seleccionamos nada salimos del proceso
If dir_archivo.SelectedItems.Count = 0 Then
Exit Sub
End If
'Obtenemos ruta
Path = dir_archivo.SelectedItems(1)
fin = Application.CountA(Range("A:A"))
'Creamos carpetas
For i = 2 To fin
MkDir Path & "\" & Cells(i, 1)
nPath = Path & "\" & Cells(i, 1)
MkDir nPath & "\" & Cells(i, 2)
Next i
End Sub
Saludos.
Muy útil, gracias. Quisiera crear una carpeta en caso de que no exista con un nombre definido en el código en la ubicación del archivo si preguntar, es posible?
Necesitas incluir una condición antes en el loop o un on error resume next para que no provoque error cuando el archivo está duplicado.
Saludos