Hojas de cálculo en Excel - página principal

Crear carpetas desde excel

¿Sabíais que desde excel, y desde muchas otras aplicaciones, se pueden crear carpetas?. Sí, sí, tal y como lo oyes, crear carpetas, es decir, directorios.

Imaginemos que tenemos estos datos en nuestra hoja de cálculo:



Si queremos crear tantas carpetas como nombres hayamos incluido en nuestra hoja de excel, tan solo tendremos que ejecutar este macro:


Sub Crear_carpetas()
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'llamamos al objeto FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
'pasamos a una variable, la ruta donde se encuentra el
'fichero de excel donde se está ejecutando este código

ruta = ActiveWorkbook.Path
'seleccionamos la primera celda que contiene
'los nombres de las carpetas (suponemos que es A4)

Range("A4").Select
'recorremos toda la columna, hasta que encuentre una fila vacía, y
'por cada fila con texto, crearemos una carpeta con el nombre
'de ese mismo texto

Do While Not IsEmpty(ActiveCell)
'si el fichero no existe, entonces lo creamos
If Not fso.FolderExists(ruta & "\" & ActiveCell.Value) Then
fso.CreateFolder (ruta & "\" & ActiveCell.Value)
End If
'pasamos a la fila siguiente, y volvemos a recorrer el bucle
ActiveCell.Offset(1, 0).Select
Loop
'limpiamos el objeto
Set fso = Nothing
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub


Ejecutando el macro del ejemplo, se nos habrán creado 3 directorios en la misma carpeta donde tengamos guardado el fichero con el macro, y esos directorios se llamarán: pepe, luis, y antonio.

Las limitaciones son dos:

1.- Los nombres que tengamos en la hoja de excel (en nuestro ejemplo tenemos 3 nombres de personas), deben estar de forma continua, es decir, sin filas en blanco entre ellos.

2.- Las carpetas se crean en el mismo directorio donde se encuentre el fichero donde vas a ejecutar el macro, por lo que deberás tenerlo previamente guardado en tu ordenador, ya sea en tu carpeta de Mis Documentos, o donde desees. Será en ese directorio donde se creen esas nuevas carpetas.



15 comentarios:

C.P. Gerardo García dijo...

Hola, he estado leyendo tu blog y bueno esta por demas interesante.

Comento por que tengo una duda, se puede ademas, crear un archivo de texto dentro de esas carpetas, es decir...
Yo tengo varias empresas, cada una tiene x numero de empleados, y que por ejemplo se guarde en un archivo TXT, los datos de los empleadas, en la carpeta correspondiente.
Y lo inverso, de algun modo, que la hoja de excel tambien se pueda retroalimentar con el texto, guardado en la carpeta, tal vez escribiendo en una form, el nombre de la empresa, que corresponderia con el nombre de la carpeta, no se si me explique

Javier Marco dijo...

Gracias por tu comentario.

Te has explicado perfectamente. Mira, en este artículo explico como leer un fichero de texto, y en este otro, como escribir en un fichero de texto.

Solo tienes que estudiarlo un poco, y podrás hacer lo que planteas, de una forma bastante sencilla.

Salu2

Admin dijo...

Hola JM. Tu blog esta excelente.

Tengo una problema que al a fecha no he podido solucionar.

Tengo nombres en celdas contiguas de una misma fila y a continuación numeros igualmente contiguos en la misma fila. Se upone que el primer numero corresponde al primer nombre.
Pero en la siguiente fila la cantidad de nombres y numeros varia es decir si en la primera tenia 6 nombres y cantidades en la segunda puedo tener 4 y asi indistintamente. Es decir el primer numero puede estar en la columna C o en la H o en la G etc...

Lo que necesito es mover todos los numeros para que todos empiecen en la columna K y sus respectivos numeros consecutivos a partir de alli.

¿como le hago?

Anónimo dijo...

Javier hay alguna forma de crear una carpeta para descargar un arcio adjunto del outlook 2003?

Es decir a mi me llega de forma diaria un correo del mismo destinatario, y el archivo simpre con el mismo nombre (En .xls), y yo desde el excel poder ejecutar una macro que me descargue ese archivo para poder utilizar la data que hay dentro del excel adjunto?.


Asi mismo hay alguna forma de ejecutar una macro en excel de forma automatica?
Es decir que una macro en excel se ejecute todos los dias a las 16:00pm de cada dia. Sin que nadie tenga que activar la macro.

atte
augusto

MAVA dijo...

Disculpa despues de leer la columna A1....An

Puedo leer B1 y crear las subcarpetas de A1 que corresponderian a B1 y luego C1 dentro de B1 y asi sucesivamente.

Como hago la macro ? Gracias

Anónimo dijo...

Hola. Tu bloq sensacional. Aunque soy novato en esto de visual basic, me has resuelto casi todos los problemas.
El casi que falta es este: Tengo un listado de carpetas con nombres de autores de libros y en su interior varios archivos con el titulo de los libros de ese autor precedido de "nombre autor - " (espacio guion espacio). Seria asi: Carpeta= Juan Perez, Archivo=Juan Perez - Nombre del libro. Lo que necesito es recorrer las carpetas y quitarles "nombre autor - ", dejando solo el Nombre del libro. Anticipadamente muchas gracias x todo.

Anónimo dijo...

descargate un programa gratuito que se llama renamer

Anónimo dijo...

Hola, ante todo muchas gracias por tus consejos de Excel.
Me gustaria saber si alguien me puede decir si hay alguna manera de automatizar esto:

Tengo un directorio en la unidad G: del servidor con las carpetas de mis clientes. Cada carpeta es de la siguiente manera:
0239 - Nombre Cliente
Y dentro hay una subcarpeta:
0239 - 0001 - Nombre SubCliente
Hasta aqui, es lo que dispongo actualmente en mi servidor.

Por otro lado, tengo una hoja de Excel con varias celdas de este tipo:
0239 - 0001 - XXXX - NombrePersona

Esta macro funciona perfectamente, pues yo quiero crear una carpeta para cada celda de mi Excel. Pero lo que necesitaria, es poder guardar o mover una vez creadas las carpetas a su correspondiente sitio en la red.

Se deberia ver asi desde el Explorador de Windows:

Ejemplo 1:
0239 - Nombre Cliente
0239 - 0001 - Nombre SubCliente
0239 - 0001 - XXXX - NombrePersona

Ejemplo 2:
0506 - Nombre Cliente
0506 - 0205 - Nombre SubCliente
0506 - 0205 - XXXX - NombrePersona

En resumen, seria mover las carpetas creadas con Excel a su correspondiente sitio en la red.

No sé si se puede hacer con macros o quiza con algun programa externo. O quizá no se puede hacer, pero si alguien me puede ayudar se lo agradeceria.

Muchas gracias de antemano,

David

Javier Marco dijo...

Si se puede. Te invito a que busques información en internet sobre el objeto "file system object". El mismo objeto que hemos utilizado en esa macro ;-)

Se puede hacer de todo: mover, copiar, crear, borrar...

Un saludo.

Parcerus dijo...

HOla, muchas gracias, el código para guardar en el mismo lugar donde se encuentra el archivo me sirvió pero bastante. Muy amable.

Rodrigo dijo...

Javier,

Hay alguna macro que pueda crear una carpeta y a la vez me genere en una celda un hipervinculo a esa carpeta??

tengo esta macro que me inserta una ficha de Proveedor y no se como hacer que aparte de insertarme la ficha, me cree una carpeta con el nombre del proveedor (ubicado en B23) y al interior de esta carpeta me cree 4 carpetas mas:
1)ficha técnica
2)Certificaciones
3)Presentación de la empresa
4)Planes de contingencia

y poder ingresar a cada una de estas 4 carpetas mediante un hipervinculo generado por la macro, ubicados en 4 celdas distintas.

esta macro me inserta la ficha,


Sub Insertar_ficha()
'
' Insertar_ficha Macro
'

'
Application.ScreenUpdating = False

Sheets("Formato Ficha").Select
Selection.Copy
Sheets("Info").Select
Rows("7:7").Select
Selection.Insert Shift:=xlDown

Application.ScreenUpdating = True

Range("B23").Select


End Sub


Saludos, Rodrigo

Rodrigo dijo...

Javier,

con respecto a la consulta anterior, la macro que cree la nueva carpeta y a la vez el hipervinculo a esta deberia ser aparte a la macro que me inserte la ficha del proveedor, ya que primero debo insertar la ficha, luego ingresar el nombre del proveedor en la ficha (en B23) y despues de esto ejecutar la otra macro que me cree una carpeta con el nombre del proveedor y al interior de esta carpeta me cree 4 carpetas mas:
1)ficha técnica
2)Certificaciones
3)Presentación de la empresa
4)Planes de contingencia

y poder ingresar a cada una de estas 4 carpetas mediante un hipervinculo generado por la macro, ubicados en 4 celdas distintas.

Desde ya Muchas gracias, saludos, Rodrigo

Rodrigo dijo...

hola, he tratado de hacer que esta macro aparte de crear una carpeta con el nombre de la celda especificada, me genere un hipervinculo al interior de la carpeta creada. no se que poner en address...

Sub Crear_carpetas()
Application.ScreenUpdating = False
Set fso = CreateObject("Scripting.FileSystemObject")
ruta = "C:\Documents and Settings\rodrigo.sims\Escritorio\Ficha Proveedor\Base Datos (Hipervinculos)\Proveedores"
Range("A10").Select

If Not fso.FolderExists(ruta & "\" & ActiveCell.Value) Then
fso.CreateFolder (ruta & "\" & ActiveCell.Value)
End If



ActiveSheet.Hyperlinks.Add _
Anchor:=Range("B10"), _
Address:="C:\Documents and Settings\rodrigo.sims\Escritorio\Ficha Proveedor\Base Datos (Hipervinculos)\Proveedores\", _
TextToDisplay:="Documentos del Proveedor", _
ScreenTip:="Enlace a Carpeta Proveedor"

Set fso = Nothing

Application.ScreenUpdating = True
End Sub


ojala me puedan ayudar me tiene super complicado esto, saludos

Javier Marco dijo...

Pásate por este artículo: listar los archivos de un directorio y mira el comentario del 1 de febrero del 2012, donde se lo he contestado a otro usuario.

Es un ejemplo para crear enlaces a ficheros de Excel. Para enlazar a una carpeta, solo tienes que quitar el condicional.

Saludos.

Anónimo dijo...

Javier buen día,
Déjame felicitarte por tu blog, me ha ayudado en mi trabajo como no tienes idea!
Necesito tu ayuda con referencia a esta entrada. Ya me hace las carpetas en relación a cierta celda con tu macro, pero ahora lo que quiero es copiar determinados archivos que están en la carpeta x y pegarlos a la carpeta que acabo de crear.
Ya puedo copiarlos si le doy la ruta completa, pero lo que quiero es poner la ruta como variable. Como no tengo mucha idea de programacion, esto es lo que he podido hacer, pero me marca un error en la ruta.

Sub copiar_carpeta()

Dim objeto
Set objeto = CreateObject("Scripting.FileSystemObject")
ruta = ActiveWorkbook.Path
Range("W2").Select
objeto.CopyFolder "C:\Documents and Settings\lbalvanerao\Mis documentos\Balvanera\Formatos\GRUPO SOCIAL\GRUPO SOCIAL ABRIR MAYOR A 100 MIL", "(ruta & "\" & ActiveCell.Value)", True
End Sub

Ojala me haya explicado y me puedas ayudar.

Saludos!

Eduardo Balvanera