Coloca a tu burro junto a otros burros y aprenderá a rebuznar

miércoles, 1 de abril de 2009

¿Cómo pasar los nombres de archivos a una hoja de excell?

Cuantas veces nos hemos encontrado con un listado muy grande de fotos, documentos, archivos, con los cuales necesitariamos hacer una lista de lo que tenemos en una determinada carpeta.

¿Cómo importar los nombres de los archivos de una carpeta determinada a excel para trabajar con ellos como texto?. Es decir copiar desde el explorador de windows los nombres de los archivos de una carpeta y que cada uno de estos nombres se copien en celdas diferentes de excel.

Para hacer estoy hay que saber programar una macro en VisualBasic para aplicarla en Excell, utilizaremos la función Dir que representa el nombre de un archivo, directorio o carpeta, en el siguiente ejemplo os explico como hacer esta macro.

Para crear una macro hay que
  1. Abrir una hoja de excell
  2. Herramientas
  3. Desplegar macros y seleccionar Macros


  4. Cuando seleccionemos Macros nos saldra la siguiente ventana.


  5. Escribimos el nombre de la macro que vamos a crear y damos al boton de Crear, nos saldrá una nueva ventana que es la de Visual Basic.


  6. En esta ventana de Visual Basic eliminaremos Sub ma() End Sub y pegaremos el código que más abajo os explico.
  7. Cuando hayamos pegado el código vamos a Archivo -->Cerrar y volver a Microsoft Excel, de esta forma volveremos a Excel para poder ejecutar la macro que hemos creado.
  8. Ya tenemos la macro creada y apunto de ejecutarla, para ejecutar la macro ir a Herramientas
    Desplegar macros y seleccionar Macros
  9. Nos saldrá la macro que hemos creado, la seleccionamos y le damos al Botón Ejecutar para que nos saque el listado
  10. De esta forma crearemos un listado de los archivos que tenemos en una carpeta.

  11. Explicación del código de la Macro

    Sub ListarArchivosCarpeta()

    Dim strArchivos As String

    Dim strNombreCarpeta As String
    'carpeta donde se hará la búsqueda
    strNombreCarpeta = "C:\Documents and Settings\All Users\Documentos\"
    'o también se puede hacer la búsqueda en la carpeta donde se encuentra este libro
    'strNombreCarpeta = ThisWorkbook.Path
    'pasamos al directorio elegido, indicando como tipo de archivo Excel
    ChDir strNombreCarpeta
    strArchivos = Dir("*.xls")
    'podemos buscar otro tipo de archivos, por ejemplo .doc, esta es la parte donde tenemos 'que poner la extensión de archivo a buscar o archivos, para mostrar todos los archivos hay 'que poner *.* , excel *.xls, fotos *.jpg - *.gif , etc
    strArchivos = Dir("*.doc")
    'recorremos los archivos de la carpeta
    Do While strArchivos <> ""
    'podemos mostar el nombre de cada archivo encontrado
    'MsgBox strArchivos
    'o podemos armar una lista en la hoja Excel
    'en este ejemplo comenzará a partir de la celda activa
    ActiveCell.Value = strArchivos
    ActiveCell.Offset(1, 0).Select
    'obtiene la siguiente entrada
    strArchivos = Dir
    Loop
    End Sub

  12. En este código la comilla ' significa comentario, todo lo que contenga la comilla es un comentario en Visual Basic

30 comentarios:

Dj Falko dijo...

hola, mi pregunta es la siguiente,

tengo una base de datos en excel, con los archivos que tengo en diferentes carpetas guardados. estos archivos son archivos de audio, con nombres tipicos como pista001, pista002.... y asi sucesivamente. la base de datos tiene una columna de informacion donde se dice el contenido de cada uno de los archivos, como por ejemplo cancion amor en pista001, avion en pista002.... asi todos. mi pregunta es, se puede cambiar fisicamente el nombre de los archivos por su correspondiente informacion de contenido (es decir, en pista001 que se pase a llmar cancion, en la dos que se llame avion...)
necesitaria acerlo de forma mas o menos automatica por medio de estas tablas ya que la cantidad de archivos es inmensa para hacerlo a mano(son 80000 archivos de audio).
muchas gracias!

djfalko@hotmail.com

Sergio Juárez dijo...

Muchas gracias por la Macro. Funciona fantástico y nos has ahorrado un montón de trabajo. Saludos desde Guatemala!

ARMANDO dijo...

Hola muy buna macro me funciono al 100% gracias

OSCAR dijo...

EXCELENTE, GRACIAS

Anónimo dijo...

Yo hago esto:

Sub ListarArchivosCarpeta()
Dim strArchivos As String
Dim strNombreCarpeta As String
strNombreCarpeta = "C:\Documents and Settings\All Users\Documentos\"
ChDir strNombreCarpeta
strArchivos = Dir("*.pdf")
Do While strArchivos <> ""
ActiveCell.Value = strArchivos
ActiveCell.Offset(1, 0).Select
strArchivos = Dir
Loop
End Sub

Despues guardar sale un cuadro de dialogo que dice:"Este comado detendra el depurador y se subraya en amarillo:
strArchivos = Dir("*.pdf")

Y no puedo hacer nada

Anónimo dijo...

funciono de diez!!! GRACIAS :D!!

Anónimo dijo...

Buenas tardes, tengo una duda, como puedo crear una macro que me cierre un archivo que tengo un PDF

Anónimo dijo...

Muchas gracias Jorge. la macro funcionó a la maravilla. Te agradezco porque me permites ahorrar tiempo... Un abrazo, LilianaS

Anónimo dijo...

Necesito su ayuda, no he podido ejecutar el macro, despues de guardar sale un cuadro de dialogo que dice:"Este comado detendra el depurador y se subraya en amarillo:
strArchivos = Dir("*.pdf"); por favor que debo hacer, es urgente. Gracias.

Anónimo dijo...

me funciono muy bien, gracias.

Anónimo dijo...

Soy la misma persona que escribio el 19 de abril, por favor me indicas que debo hacer para que me funcione el macro, no he podido; lo hago una y otra vez y siempre me sale el mismo error dice:"Este comado detendra el depurador y se subraya en amarillo:
strArchivos = Dir("*.pdf". mi correo es lilirengifojg@hotmail.com, por favor es urgente.

Juan Carlos dijo...

muy buena la ayuda, lo había intentado usando "ejecutar"--> cmd--->buscar directorio, pero se alarga mucho..
eta muy bien! gracias.

Helen Wheels dijo...

Que placer cuando todos los nombres de los archivos se escribieron solos!!!!!! Tenía 950 archivos de partituras para catalogar!!!! MILLONES MILLONES DE GRACIAS!!!!!!!!!!!!!

Anónimo dijo...

MARAVILLOSO! Tenía 1786 fotografías que subir a una base de datos y me funciono a la primera...thanks a lot!

Anónimo dijo...

Realmente sos un genio, no sabes el trabajo que me ahorraste. Gracias y te felicito. Un abrazo.

Anónimo dijo...

Gracias, Gracias mil, de mucha ayuda. Un abrazo

Anónimo dijo...

No puedes imaginar hasta que punto te estoy agradecido por compartir tu macro.
Te mereces todo lo bueno que te pase.
Muchas gracias

Aliiotra dijo...

Muchas Gracias

Es genial

Miller Burbano, Evelyn Chicaiza dijo...

Exelente, y como seria para dar nombre a una serie de carpetas usando una macro de excel. gracias

Anónimo dijo...

Muchas gracias por esta excelente ayuda!

Anónimo dijo...

me funciono super bien, pero cuando hago la prueba con fotos que tengo en un dd externo, no me hace nada, y la ruta la tengo bien, que problema tendra?

Anónimo dijo...

Hola, tuve algunos de los problemas mencionados por otros usuarios al leer archivos desde un CD y lo solucioné con el siguiente código (tomado del original):

Sub ListarArchivosCarpeta()

Dim strArchivos As String
Dim strNombreCarpeta As String

strNombreCarpeta = ActiveCell.Value

ChDir strNombreCarpeta
strArchivos = Dir(strNombreCarpeta)

Do While strArchivos <> ""
ActiveCell.Value = strArchivos
ActiveCell.Offset(1, 0).Select
strArchivos = Dir
Loop

End Sub

El código funciona poniendo en una celda cualquiera la ruta de la carpeta, ej. escribir en A1 D:\Musica\, luego seleccionando esa misma celda ya que se usa ActiveCell en la macro, y finalmente ejecutando la macro.

Ojo, es clave finalizar la ruta con \ y luego seleccionar esa misma celda, de lo contrario el código no hace nada. Este código hace la lista de todos los archivos en la carpeta, luego en Excel filtro los archivos que quiero ver.

Anónimo dijo...

Hola una consulta si yo a esta lista que creo con archivos pdf quiero que cada celda sea un hipervinculo como tengo que hacer, gracias.

Sub ListarArchivosCarpeta()

Dim strArchivos As String

Dim strNombreCarpeta As String
'carpeta donde se hará la búsqueda
strNombreCarpeta = "C:\Documents and Settings\Administrador\Mis documentos\SDS Starcel 2"
'o también se puede hacer la búsqueda en la carpeta donde se encuentra este libro
'strNombreCarpeta = ThisWorkbook.Path
'pasamos al directorio elegido, indicando como tipo de archivo Excel
ChDir strNombreCarpeta
strArchivos = Dir("*.xls")
'podemos buscar otro tipo de archivos, por ejemplo .doc, esta es la parte donde tenemos 'que poner la extensión de archivo a buscar o archivos, para mostrar todos los archivos hay 'que poner *.* , excel *.xls, fotos *.jpg - *.gif , etc
strArchivos = Dir("*.*")
'recorremos los archivos de la carpeta
Do While strArchivos <> ""
'podemos mostar el nombre de cada archivo encontrado
'MsgBox strArchivos
'o podemos armar una lista en la hoja Excel
'en este ejemplo comenzará a partir de la celda activa
ActiveCell.Value = strArchivos
ActiveCell.Offset(1, 0).Select
'obtiene la siguiente entrada
strArchivos = Dir
Loop
End Sub

choskian dijo...

Para mis colegas los makeros
Apple MACOS

A veces la prueba más tonta te da la solución

1. Seleccionar las carpetas deseadas
2. Copiar
3. Edición / Mostrar portapapeles
4. Vais a cualquier procesador de textos plano o no enriquecido y PEGAR

olpasi dijo...

Hola, la macro me ha funcionado perfectamente.

Puestos a pedir, se podría también copiar el tamaño del archivo?

Gracias

adrian varguez dijo...

HOLA, LA VERDAD TARDE COMO MEDIA HORA EN ENTERNDERLO Y ES QUE YO NO SE NADA DE SISTEMAS, PERO FANTASTICO ME SALVO LA VIDA , TENIA UN CATALOGO DE 17,065 FOTOS Y TENIA QUE SACAR LA LISTA DE PRECIOS, Y LISTO. MUCHAS GRACIAS ATTE ADRIAN VARGUEZ

Anónimo dijo...

Muchas gracias, fue de gran ayuda encontrar esto. Saludos, Pamela.

Goran el Gitano dijo...

Hola desde Chile una consulta, tengo varios videos en distintos formatos, intento realizar tu codigo pero no me funciona, me podrias ayudar por favor, agradeciendo vuestra respuesta.
Saludos, Goran

Jorge Delgado Torres dijo...

Disculpar a todos si no he contestado antes, poco a poco os iré respondiendo a las dudas y preguntas y intentare poner los códigos que estáis pidiendo modificados.

Hola Goran el Gitano, pega aquí el código que estas poniendo y le echare un vistazo.

Jorge Delgado Torres dijo...

Para Goran el Gitano si los videos de distinto formato los tienes en la misma carpeta lo que puedes hacer es modificar la entrada que pone:

strArchivos = Dir("*.mp3")

por esto

strArchivos = Dir("*.*")

De esta forma te captara todos los ficheros de la carpeta.