Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Abrir todos los libros de una carpeta o directorio

| 12 comentarios

Lo que hace esta macro es abrir uno por uno los archivos de Excel que tengamos almacenados en una carpeta y ejecuta el código que nosotros le asignemos. Luego, nos manda un cuadro de mensaje con el nombre del archivo. Y finalmente, guarda los cambios y los cierra.

Esta macro es útil cuando nosotros tengamos que correr un mismo código para varios libros; ya que, de otro modo tendríamos que abrir cada uno de los archivos y ejecutar en cada uno de ellos dicho código, lo cual no resultaría práctico.

A continuación, se presenta un ejemplo de esta macro.  Supongamos que el código que queremos correr en cada archivo es el siguiente:

Range("a1").ClearContents

 

Es decir, queremos borrar el contenido de la celda A1. Es importante mencionar que en lugar de este código usted puede ingresar el código que desee según lo que quiera que se ejecute.

Entonces, si queremos borrar el contenido de la celda A1 en todos los libros, tendremos que ingresar lo siguiente en nuestro módulo:

 

Abrir archivos de directorio

(Para mayor visualización de la imagen, hacer click en la misma)

 

Para usar esta macro debe hacer algunos cambios:

  • Para efectos de este ejemplo la carpeta elegida fue “temporal”; sin embargo, es probable que la carpeta con la que usted trabaje tenga un nombre distinto. Por ello, deberá cambiar la palabra “temporal” cada vez que aparece en la macro, por el nombre de la carpeta que utilizará. Asimismo, debe percatarse que el tipo de archivos de Excel que abrirá serán los de tipo “xslx”.
  •  En lugar de poner “Range("a1").ClearContents”  usted deberá escribir el código que quiera que la macro ejecute.

A continuación se adjunta el archivo de excel

Abrir todos los libros de un directorio

 

Por: Fiorella Mallqui Colonia

 

12 comentarios

  1. Buenas tardes. Gracias por este artículo, me ha servido de gran ayuda. He intentado utilizar el código que proponen y me funciona correctamente; sin embargo, cada vez que me abre un excel (contenido en la carpeta directorio que le he indicado) me aparece un cuadro de diálogo con el nombre del archivo y le tengo que dar a aceptar (antes de que pueda continuar abriendo el resto de archivos) ¿cómo puedo evitar que aparezca ese cuadro? tengo que manejar un elevado número de archivos y tener que darle 1000 veces a aceptar ralentiza mucho el proceso. Muchas gracias" Un saludo

    • APPLICATION.DISPLAYALERTS=FALSE

    • Borre la parte que dice MSGBOX ACTIVE workbook.name q es lo que hace q aparezca esa ventan
      No es necesario para q funcione el resto

  2. Buenas.
    Estuve leyendo el articulo y me pareció muy interesante, ademas de ayudar mucho,en cuanto se requiere de abrir varios archivos contenidos en una carpeta que pueden estar en constante cambio(hoy hay uno , mañana hay mas).

    Tengo una inquietud y es sobre el orden en el que abrirá los archivos
    ¿lo hace en orden alfabético? o ¿lo hace según el orden como los tengamos organizados en las carpetas:Por nombre, Por fecha, Por Tipo, Por Tamaño).

    Muchas Gracias.

    • Buenas,
      El orden en. Así de DIR es según su tipo de formato del disco, si es NTFS es en orden alfabético, si es FAT devuelve en el orden que los archivos se guardaron en el disco.
      La mayoría de discos hoy son en NFTS pero las memorias USB aún son FAT. Si es importante que se abran en orden alfabético debería percatarse de ese detalle. Podría funcionar bien en su disco pero si hace lo mismo con una USB memory quizá el resultado sea inesperado.
      Mucha suerte

  3. y si quisiera aplicarlo en todas las carpetas y subcarpetas que tengan nombres diferentes, como se haría?, de antemano gracias

    • Tengo esta misma duda. ¿Cómo se haría para que aplicase a exceles que estén en subcarpetas?

      • Hola, Sebastian, yo también tuve el mismo interrogante asi que vi un ejemplo y lo adapte a lo necesitaba. Alli te copio el texto.

        Sub ponerNombre()
        Mostrar_Archivos (ThisWorkbook.Path & "\carpeta1")
        End Sub

        Sub Mostrar_Archivos(ruta)

        Dim fs, carpeta, archivo, subcarpeta As Object
        Set fs = CreateObject("Scripting.FileSystemObject")

        If ruta = "" Then
        Exit Sub
        ElseIf Right(ruta, 1) "" Then
        ruta = ruta & ""
        End If

        On Error GoTo ErrHandler
        Set carpeta = fs.GetFolder(ruta)

        For Each archivo In carpeta.Files
        Workbooks.Open ruta & "\" & archivo.Name
        Range("a1") = "Este es mi texto"
        ActiveWorkbook.Close savechanges:=True
        Next

        For Each subcarpeta In carpeta.SubFolders
        Mostrar_Archivos (subcarpeta)
        Next

        ActiveCell.EntireColumn.AutoFit
        Exit Sub

        ErrHandler:
        ActiveCell.Value = "Ruta inexistente"

        End Sub

  4. Super util gracias

  5. Ahora cuando pongo este código (siendo MACROSEGTEMES la carpeta y nov-masu el archivo Excel que está dentro en el cual se requiere que se ejecute la macro)

    Sub Archivos()
    Dim Archivos As String
    Archivos = Dir("C:\MACROSEGTEMES\*.xlsx")
    Do While (Archivos "nov-masu")

    Set wb = Workbooks(nov - masu.xlsm)
    (Aquí me aparece un error 424 "Se requiere un objeto")

    wb.Sheet.Activate

    Range("A1:AZ1").Select
    Selection.AutoFilter
    Columns("C:AW").Select
    Selection.EntireColumn.Hidden = True
    Columns("AY:AZ").Select
    Selection.EntireColumn.Hidden = True

    ActiveWorkbook.Close SaveChanges:=True

    Archivos = Dir
    Loop

    End Sub

  6. Primero que nada me sirvió mucho este articulo
    Pero tengo esta situacion si tengo todo en una usb y lo quiero usar en otras pc como le hago si cambia la ruta al pasarla ya que me cambia la ruta de origen del los archivos que abre
    Por favor ayuda
    O acaso lo que se escribe dentro de la función dir se puede guardar como variable ?

  7. ¡Funciona a la perfección! ¡Y lo mejor es que es sencillísimo! ¡Muchísimas gracias!

Deja una respuesta

Los campos requeridos estan marcados con *.