Cómo abrir todos los archivos de una carpeta con VBA

Hace poco, me llegó una consulta en el trabajo donde un compañero necesitaba una macro para abrir todos los archivos Excel de una carpeta y ejecutar un mismo proceso en cada uno de los archivos abiertos. 


Abrir un archivo detrás de otro

En este post vamos a ver cómo abrir todos los archivos Excel con VBA de una carpeta de nuestro ordenador. En concreto, vamos a abrir cada archivo de la carpeta y vamos a escribir la palabra "prueba" en la celda A1.

Definir variables

Antes de nada, deberemos tener localizada la ruta donde van a estar los archivos a abrir.

Ruta = "C:\Users\Documentos\"

No hay que olvidar la última barra ( \ ) de la ruta, ya que cuando unamos ruta y nombre del archivo, debe estar separado por esa barra para que lo identifique y lo abra.


Seguidamente, empleando el método Dir, le indicaremos el tipo de archivos que queremos abrir, que en este caso serán los archivos Excel. Nuestros archivos tendrán la extensión xls sin son anteriores a la versión 2007 y xlsx si son posteriores. Sustituyendo el final de la extensión por dos interrogantes, conseguiremos abrir todo tipo de archivos.

Nombre = Dir(Ruta & "*.xl??")

Uniendo estas 2 variables obtendremos por ejemplo esto:

C:\Users\Documentos\Libro1.xlsx


Proceso loop

Lo que básicamente hace un proceso loop es ejecutar un código, y al finalizarlo, vuelve a empezar si cumple alguna condición.

Primeramente, le indicaremos a ese proceso reiterativo, que se ejecute hasta que encuentre que la variable Nombre deje de ser cero, que querrá decir, que no haya más archivos.


Do While Len(Nombre) > 0


Seguidamente, le diremos que abra el primer archivo uniendo las 2 variables definidas anteriormente.     

Workbooks.Open fileName:=Ruta & Nombre

A continuación, la variable Nombre en el siguiente punto hará que cambie el nombre del archivo siguiente. Por ello, y para quedarnos aún con el nombre del libro sobre el cuál estamos trabajamos, declaramos la variable n que será igual a la variable Nombre.

n = Nombre

Nombre = Dir()


Código

En el siguiente punto iría todo el código que queramos ejecutar en ese archivo. En este caso, nuestro código es tan simple como escribir la palabra prueba en la celda A1 y después cerrar el archivo.

Range("A1").Value = "Prueba"
Workbooks(n).Close SaveChanges:=True

Finalmente, habría que añadir la palabra Loop.

Loop

Cambios necesarios

El primer cambio, evidentemente debe ser modificar la variable ruta que debe seguir nuestra macro, ya que cada uno deberá adaptar la macro a la carpeta donde tenga los archivos.

Y el segundo cambio, son las acciones que debe hacer la macro una vez, es decir el apartado Código. En mi ejemplo únicamente escribe una palabra y guarda el archivo.

Macro Completa

Tras esta explicación paso a paso, esta es la macro completa para abrir uno a uno todos los archivos Excel de una carpeta.

Ruta = "C:\Users\Documentos\"

    Nombre = Dir(ruta & "*.xl??")

        Do While Len(nombre) > 0
    
            Workbooks.Open fileName:=Ruta & Nombre
                   
        n = nombre   

        nombre = Dir()

            Range("A1").Value = "Prueba"
            Workbooks(n).Close SaveChanges:=True

Loop

No hay comentarios:

Publicar un comentario

Otras entradas