28 noviembre, 2021

LISTAR LAS PROPIEDADES DE TODOS LOS ARCHIVOS DE UNA CARPETA Y SUBCARPETAS

Hola a todos!

Hace varios meses publiqué un post en el que trataba la forma de listar todos los archivos contenidos en una carpeta y subcarpetas: LISTAR TODOS LOS ARCHIVOS DE UNA CARPETA Y SUS SUBCARPETAS CON VBA

Hoy un lector me preguntaba la posibilidad de añadir a esta información la fecha de la última modificación en cada archivo listado. En realidad podemos obtener muchas más propiedades que nos pueden ser de utilidad según el tipo de necesidad que tengamos.

Para obtener lo que nos indica el lector, tan solo vamos a tener que realizar una pequeña modificación en la función original:

Function CARPETA(ByVal nCarpeta)
'Declaramos variables
Dim j As Long, Subcarpeta As Object
With ActiveSheet
'Iniciamos dos loop, uno que recorre las carpetas
For Each Subcarpeta In nCarpeta.SubFolders
CARPETA Subcarpeta
Next
j = Application.CountA(.Range("A:A")) + 1
'y otro que recorre los archivos y extrae propiedades
For Each file In nCarpeta.Files
.Cells(j, 1).Select
'fecha de creación
.Cells(j, 2) = file.DateCreated
'fecha de última modificación
.Cells(j, 3) = file.DateLastModified
'fecha del último acceso
.Cells(j, 4) = file.DateLastAccessed
'tipo de archivo
.Cells(j, 5) = file.Type
'tamaño
.Cells(j, 6) = file.Size
'por último activamos hipervínculo en el path del archivo
.Hyperlinks.Add Anchor:=Selection, Address:=file.Path, TextToDisplay:=file.Path
j = j + 1
Next
End With
End Function

Como podéis observar, utilizando el objeto file con el que anteriormente obtenemos su ruta, también podemos obtener una serie de propiedades, entre ellas la fecha de la última modificación DateLastModified

Pero también otras como el tipo de archivo, su tamaño, la fecha de creación y la del último acceso.

El resultado sería este:

LISTAR LAS PROPIEDADES DE TODOS LOS ARCHIVOS DE UNA CARPETA Y SUBCARPETAS

Así la consulta quedaría contestada y el lector ya tiene toda la información que necesita.

Y esto es todo!

Descarga el archivo de ejemplo pulsando en: LISTAR LAS PROPIEDADES DE TODOS LOS ARCHIVOS DE UNA CARPETA Y SUBCARPETAS

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡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

Comparte este post

63 comentario en “LISTAR LAS PROPIEDADES DE TODOS LOS ARCHIVOS DE UNA CARPETA Y SUBCARPETAS

  1. Estimado,

    Supongamos que todos los archivos excel listados en A tienen la misma estructura y deseo extraer lo que contiene la celda M3, J5 y G4 por ejemplo y pegarlos al lado de la ruta que esta en A,

    me podría ayudar con esta duda?

    de ante mano gracias

    1. Hola Alejandro:

      Perdona por no haber contestado antes, estaba de vacaciones.

      Para obtener lo que indicas, es necesarios que incluyas en el código las siguientes líneas de código:

      Lo nuevo a incluir es a partir del "Set milibro", hasta el "false":

      .Hyperlinks.Add Anchor:=Selection, Address:=file.Path, TextToDisplay:=file.Path
      Set milibro = Workbooks.Open(file.Path)
      .Cells(j, 7) = milibro.Sheets("Hoja1").Range("M3")
      .Cells(j, 8) = milibro.Sheets("Hoja1").Range("J5")
      .Cells(j, 9) = milibro.Sheets("Hoja1").Range("G4")
      milibro.Close Savechanges:=False
      j = j + 1

  2. buen dia , hago una nueva consulta relacionada con la anterior:

    Soy administrador de un contrato de traducciones y manejo un gran volumen de archivos en su mayoria Word pero hay algunos Excel y pdf , la consulta es si hay alguna forma de poder contar las palabras de esos archivos sin abrirlos y volcar esos datos en un Excel, muchas gracias.

  3. Hola Alejandro:

    Lo desconozco, en esta web todo lo que programo está relacionado con Excel y VBA. Por ejemplo el listar todas las palabras de archivos Excel (que me habías preguntado) te lo publiqué como un post. Siento no poder ayudarte con esto, pero intenta buscar en la red si existe algún tipo de programa específico que sea capaz de leer el contenido de archivos Excel y PDF y listar palabras o contarlas.

    Un saludo y de nuevo, siento no poder ayudarte.

  4. Hola! Me podrías ayudar para que en el listado también se registre el tamaño (dimensiones, alto y ancho) de cada archivo de imágen.... cambio los títulos por éstas propiedades pero no me las reconoce... Muchas gracias!

    1. Hola Glass:

      Ninguna de las propiedades el objecto file permite extraer el ancho y algo de la imagen. Eso solo lo podremos hacer si tenemos la imagen en la hoja Excel, a la que podremos acceder a través de las propiedades del objeto shape.

      No obstante, revisaré con detalle la documentación a ver si existe alguna forma o método alternativo que no sea con file.

      Saludos.

  5. buen dia Segu, la macro la corro en Excel 2016 el cual tiene 1 millon de celdas, pero cuando la ejecuto solo llega hasta la fila 65533 y se detiene con error en la línea .Hyperlinks.Add Anchor:=Selection, Address:=file.Path, TextToDisplay:=file.Path

    tienes la macro diseñada para Excel 2016? mil gracias.

    1. Hola la Esperanza la macro dsta diseñada para cualquier versión. La hoja de descarga es .xls por eso te ocurre el error. Descarga el archivo, abrelo y guardarlo como xlsm.

      Así funcionará como indicas.

      Saludos

        1. oK, Sí tienes razón. El error no es por la versión ni por las filas, es el límite que microsoft tiene para cuantos hipervínculos se pueden indicar en un archivo Excel. Por lo que he podido investigar es así desde 2003 en adelante (2019).

          tendría que ver si existe una solución, aunque creo que no la hay.

          tendrías que utilizar varias archivos.

          Saludos.

          1. Entonces solo tienes que eliminar la parte que agrega un hipervínculo y añadir el path: .Cells(j, 1) = file.Path

            Es decir en la macro, eliminas la línea del hipervínculo y añades .Cells(j, 1) = file.Path

            For Each file In nCarpeta.Files
            .Cells(j, 1).Select
            'fecha de creación
            .Cells(j, 2) = file.DateCreated
            'fecha de última modificación
            .Cells(j, 3) = file.DateLastModified
            'fecha del último acceso
            .Cells(j, 4) = file.DateLastAccessed
            'tipo de archivo
            .Cells(j, 5) = file.Type
            'tamaño
            .Cells(j, 6) = file.Size
            'añadir esto!!!!!!!!!!!!
            .Cells(j, 1) = file.Path
            j = j + 1

            '---------
            Saludos.

  6. Buenos días Segu,

    Primeramente, agradecerte el aporte. Es excelente.
    En segundo lugar, agradecería mucho que me ayudaras a crear una macro que permita seleccionar un archivo en concreto y listar todas sus propiedades (hipervínculo, fecha de creación, fecha de última modificación, etc.), agregando dicha información en la primera fila sin datos.

    Muchas gracias de antemano.
    Saludos,

  7. Hola N:

    Es muy sencillo hacerlo, con esta macro lo podrás realizar.

    Solo te he indicado dos propiedades: fecha de creación y último acceso:

    Sub LISTAR_ARCHIVOS()
    'Definimos variables
    Dim i As Long, j As Long
    Dim nArchivo As String, dir_Archivo As Variant
    'Creamos ventana de diálogo para seleccionar los archivos que queremos listar
    dir_Archivo = Application.GetOpenFilename(Title:="SELECCIONA ARCHIVOS", MultiSelect:=True)
    'Si no seleccionamos archivos, salimos del proceso
    If Not IsArray(dir_Archivo) Then
    Exit Sub
    End If
    With ActiveSheet
    'Iniciamos un for con para identificar los archivos seleccionados
    Set SFSO = CreateObject("Scripting.FileSystemObject")
    If IsArray(dir_Archivo) Then
    For j = LBound(dir_Archivo) To UBound(dir_Archivo)
    i = Application.CountA(Range("A:A")) + 1
    nArchivo = dir_Archivo(j)
    'pasamos el link de cada archivo seleccionado a la hoja
    .Cells(i, 1).Select
    .Hyperlinks.Add Anchor:=Selection, Address:=nArchivo, TextToDisplay:=nArchivo
    .Cells(i, 2) = SFSO.GetFile(nArchivo).DateCreated
    .Cells(i, 3) = SFSO.GetFile(nArchivo).DateLastAccessed
    Next j
    End If
    End With
    End Sub

    Saludos!!

  8. Buen día Segu,

    Excelente aporte, muchas gracias.

    Disculpa hay una forma de listar solo una parte del nombre del archivo con la macro?

    Me explico mis archivos suelen ser XX-11-28-2019-D123.pdf y quisiera poder extraer solo el D123, de antemano gracias,

    Saludos

    1. Hola Raul:

      Hay una parte de la macro con el siguiente código:

      TextToDisplay:=file.Path
      Debes sustituirlo por esto:
      TextToDisplay:=Split(file.Path, "-")(UBound(Split(file.Path, "-")) - 1)

  9. Hola Segu
    me gustaria saber si se puede listar las coordenadas de una carpeta que contiene archivos de fotografías que contienen metadatos con las coordenadas gps de donde se realizo las fotografías

    Muchas gracias por tu trabajo

    1. Hola Luis:

      Perdona por al demora en responder. Se podría listar si el dato es una propiedad del archivo. Tendría que ver un ejemplo de lo que quieres realizar o un ejemplo de uno de esos archivos y lo que esperas poder extraer.

      Saludos.

      1. Hola
        Muchas gracias por tu rápida respuesta
        Las coordenadas gps de los archivos jpg no están en las propiedades están dentro de los metadatos
        Lo que pretendo hacer es listas en Excel los nombres de los archivos de una carpeta y en otra columna las coordenadas GPS que están en todas las fotografías que se toman con teléfono que tenga activado el GPS
        Saludos

        1. Ok Luis, Sí creo que es posible hacerlo. Si tienes una foto o imagen con coordenadas que me puedas pasar, lo intento. Solo que estos días lo voy a tener complicado. Pero creo que se puede hacer.

          Saludos.

  10. Hola Segu buen dia
    personalmente quisiera agradecer todos tus aportes me ha sacado de verios apuros
    quisiera hacerte una consulta espero me pudieras ayudar

    el archivo esta perfecto solo requiero unas modificaciones

    en la columna a en lugar de que pregunte la carpeta yo necesito poner las direcciones (N candidad de direcciones) y que a la derecha me ponga la nombre archivo, fecha modificacion (solo del arvhico modificado mas recientemente y el mas antiguo)

    ejemplo
    *************************************************************************************************************
    A:A / B:B / C:C / D:D / E:E /
    Direccion / Archivo 1 / Modificacion mas vieja / Archivo 2 /Modificacion mas reciente /
    agrego manual / arch.xlsx / 20.01.2019 / arch2.pdf / 04.01.2020 /
    *************************************************************************************************************

    espero me puedas ayudar con este problema que tengo ya que ahora lo hago manual solo que las direcciones son cientos obviamente es desgastante hacerlo asi

    NOTA: me debe poner dar el archivo mas reciente y mas antiguo que se encuentre en la direccion de la columna A (debe considerar todos los archivos que se encuentren dentro incluyendo subcarpetas, pero al final solo mostrar el ultimo y el primero de todos)

    espero que se entienda mi peticion

    desde ya muchas gracias

    Atte: Jerry

    1. Hola Jerry,

      Me alegro que te resulten de interés los post. Sobre tu consulta, indicarte que no es una simple modificación lo que indicas, sino reprogramar completamente el código.

      En estos momentos tengo varias consultas pendientes de responder, en cuanto tenga tiempo te responderé. Saludos.

  11. Hola Segu, gran trabajo y no solo inicial, si no ademas contestando y mejorandolo con todas las preguntas.
    Yo te quisiera hacer otra: Dentro de las propiedadas de ficheros TIFF, jpg y pdf tambien tenemos las propiedades de Resolucion Horizontal y Resolucion Vertical (son propiedades como las de fecha de ultima modificacion o tamaño) ¿Como se podrian extraer?.
    Muchas gracias de antemano.

  12. Hola! Muchas gracias por vuestros aportes. Mi duda es parecida a lo que se habla en este hilo, pero mucho más sencilla ( creo ). Sólo necesito listar las subcarpetas que hay dentro de una carpeta dada y la fecha de creación de esas subcarpetas. Es decir, necesito obtener un listado de dos columnas, la primera con el nombre de la subcarpeta ( no la ruta, sólo el nombre ) y otra columna con la fecha de su creación en formato dd/mm/yyyy. Es muy complicado esto? Muchas gracias de antemano

    1. Hola:

      Lo que comentas es muy sencillo de hacer, debes realizarlo en el código, en concreto modificando la parte de la función "carpeta":

      With ActiveSheet
      'Iniciamos dos loop, uno que recorre las carpetas
      j = Application.CountA(.Range("A:A")) + 1
      For Each Subcarpeta In nCarpeta.SubFolders
      CARPETA Subcarpeta
      .Cells(j, 1) = Subcarpeta.Name
      .Cells(j, 2) = Subcarpeta.DateCreated
      .Cells(j, 2).NumberFormat = "dd/mm/yyyy"
      j = j + 1
      Next
      End With

      Te envío el archivo, en caso de que no sepas modificar la macro.

      Saludos.

  13. Hola buen dia, agradezco de antemano los aportes dados. Ahora, es posible hacer el listado para un tipo de archivo exclusivo? Es decir, si tengo varios tipos de archivos (pdf, excel, word...) y solo quiero listar los archivos de excel, podría hacerlo?

  14. Buenas, lo primero muchas gracias por el aporte. Tengo una carpeta con muchos ficheros de dibujo de los cuales de algunos los tengo guardados en varios formatos ( PDF, DWG...) Me gustaría si fuera posible que la macro me sacara en la primera columna los ficheros de un tipo (por ejemplo PDF) y por ejemplo en la columna 2, me mostrara también los DWG que existen, cada uno en su fila correspondiente ( mismo nombre que el PDF).

    1. Hola carlos, según tu petición sería necesario programar la macro de nuevo, dado que está diseñada para mostrar resultados por filas no por columnas. Si quieres listar un tipo de archivo solo tienes que utilizar un condicional después del For, (creo que en los comentarios lo indico).

      Saludos

  15. Hola Segu que buenísima pagina tienes para aclarar y ayudar con las dudas, tengo una consulta adicional a este Post, se podrá realizar luego de hacer el listado de los archivos de una Carpeta, mediante alguna función de Excel la extracción de lo que esta escrito en una Celda X del Archivo?. Es decir la macro me lisa los archivos de la Carpeta N; ya tengo mi listado y el nom bre del Archivo1, Archivo 2, Archivo n.
    En una columna Vacia yo quisiera traer lo que esta escrito en una Celda del Archivo 1 sin necesidad de abrir el archivo para que sea una formula automatica.
    GRacias

    1. Hola Rafael:

      Para realizar lo que indicas, es necesario lo siguiente:
      - que el código únicamente tenga en cuenta archivos en excel.
      - abrir cada uno de los archivos para leer la celda
      - cerrar cada archivo.

      En resumen, tendrías que modificar la parte del código:

      Analízala, estúdiala.

      For Each file In nCarpeta.Files
      If Mid(Split(file, ".")(1), 1, 3) = "xls" Then
      .Cells(j, 1).Select
      'fecha de creación
      .Cells(j, 2) = file.DateCreated
      'fecha de última modificación
      .Cells(j, 3) = file.DateLastModified
      'fecha del último acceso
      .Cells(j, 4) = file.DateLastAccessed
      'tipo de archivo
      .Cells(j, 5) = file.Type
      'tamaño
      .Cells(j, 6) = file.Size
      'por último activamos hipervínculo en el path del archivo
      .Hyperlinks.Add Anchor:=Selection, Address:=file.Path, TextToDisplay:=file.Path
      Application.DisplayAlerts = False
      Set ilibro = Workbooks.Open(Filename:=file)
      .Cells(j, 7) = ilibro.Sheets(1).Cells(1, 1)
      ActiveWorkbook.Close True
      Application.DisplayAlerts = True
      j = j + 1
      End If
      Next

      Saludos

      1. Hola Segu, excelente me ayudaste mucho, le hice unos cambios por que necesitaba extraer una informacion de algunas celdas de los archivos listados, ahora bien quisera solicitarte un ultimo consejo, como veras en el archivo que estoy listando estoy agregando un * en una celda.
        Como puedo hacer para que la funcion haga que si encuentra el *, no me liste ese archivo en el excel donde estoy recopilando la informacion; esto es por que el directorio cada dia crece mas con archivos de excel y quisiera correr la macro pero que solo me agregue los que no estan ya en el listado

        Gracias

        For Each file In nCarpeta.Files
        If Mid(Split(file, ".")(1), 1, 3) = "xls" Then
        .Cells(j, 1).Select
        'fecha de creación
        '.Cells(j, 2) = file.DateCreated
        'fecha de última modificación
        '.Cells(j, 3) = file.DateLastModified
        'fecha del último acceso
        '.Cells(j, 4) = file.DateLastAccessed
        'tipo de archivo
        '.Cells(j, 5) = file.Type
        'tamaño
        '.Cells(j, 6) = file.Size
        'por último activamos hipervínculo en el path del archivo
        .Hyperlinks.Add Anchor:=Selection, Address:=file.Path, TextToDisplay:=file.Path
        Application.DisplayAlerts = False
        Set ilibro = Workbooks.Open(Filename:=file)
        If IsEmpty(Cells(8, 2)) Then
        .Cells(j, 2) = ilibro.Sheets(1).Cells(6, 2)
        Else
        .Cells(j, 2) = ilibro.Sheets(1).Cells(8, 2)
        End If
        .Cells(j, 3) = ilibro.Sheets(1).Cells(1, 27)
        .Cells(j, 4) = "*"
        ActiveWorkbook.Close True
        Application.DisplayAlerts = True
        j = j + 1
        End If
        Next

        1. Hola Rafael:

          Tienes que ser más explícito. El asterisco dónde se encuentra, en una celda? en el nombre del archivo?, dónde?, estaría dentro de una palabra, solo en la celda.

          Saludos

          1. Hola Segu, el "*" lo estoy escribiendo en las coordenadas .Cells(j, 5) = "*" de cada línea que voy agregando al archivo donde se inserta la información que ingresa a través de la Macro.
            Lo que quisiera hacer es que al correr nuevamente la Macro si ya existen registros en el archivo de listado de carpetas que revise a través de este "*" que ya existe esa información; es decir que solamente se agreguen los nombres de los archivos nuevos que voy ingresando en la carpeta a Diario.
            Te dejo como tengo la macro.
            Gracias de antemano Segu

            Sub LISTAR_ARCHIVOS()
            'Declaramos variables
            Dim sFSO As Object, Directorio As String
            Dim dir_Archivo As Variant
            'Abrimos ventana de diálogo para seleccionar carpeta
            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
            'Capturamos el directorio del archivo seleccionado
            Directorio = dir_Archivo.SelectedItems(1)
            'Creamos objeto y ejecutamos función Carpeta
            Set sFSO = CreateObject("Scripting.FileSystemObject")
            CARPETA sFSO.GetFolder(Directorio)
            End Sub
            Function CARPETA(ByVal nCarpeta)
            'Declaramos variables
            Dim j As Long, Subcarpeta As Object
            'Con la hoja activa
            With ActiveSheet
            'Iniciamos dos loop, uno que recorre las carpetas
            'For Each Subcarpeta In nCarpeta.SubFolders
            ' CARPETA Subcarpeta
            'Next
            j = Application.CountA(.Range("A:A")) + 1
            'y otro que recorre los archivos y los indexa y activa hipervínculo
            For Each file In nCarpeta.Files
            If Mid(Split(file, ".")(1), 1, 3) = "xls" Then
            .Cells(j, 1).Select
            'fecha de creación
            '.Cells(j, 2) = file.DateCreated
            'fecha de última modificación
            '.Cells(j, 3) = file.DateLastModified
            'fecha del último acceso
            '.Cells(j, 4) = file.DateLastAccessed
            'tipo de archivo
            '.Cells(j, 5) = file.Type
            'tamaño
            '.Cells(j, 6) = file.Size
            'por último activamos hipervínculo en el path del archivo
            .Hyperlinks.Add Anchor:=Selection, Address:=file.Path, TextToDisplay:=file.Path
            Application.DisplayAlerts = False
            Set ilibro = Workbooks.Open(Filename:=file)
            If IsEmpty(Cells(8, 2)) Then
            .Cells(j, 2) = ilibro.Sheets(1).Cells(6, 2)
            Else
            .Cells(j, 2) = ilibro.Sheets(1).Cells(8, 2)
            End If
            .Cells(j, 3) = file.DateCreated
            .Cells(j, 4) = ilibro.Sheets(1).Cells(1, 27)
            .Cells(j, 5) = "*"
            ActiveWorkbook.Close False
            Application.DisplayAlerts = False
            j = j + 1
            End If
            Next
            End With
            End Function

  16. He tenido un momento para ver tu consulta, y lo que te recomiendo es que realices un condicional con el nombre del archivo:

    Declaras NOMBRE como la variable que lleva el nombre del archivo y a la vez listas el campo nombre.

    Luego solo tienes que programar un contar.si y si es menor que 1 (no se repite) y lo puedes listar, si el mayor, no lo listas).

    For Each FILE In nCarpeta.Files
    NOMBRE = FILE.Name
    Control = Application.WorksheetFunction.CountIf(Sheets("Hoja1").Range("B:B"), NOMBRE)
    If Control < 1 Then .Cells(j, 1).Select 'fecha de creación .Cells(j, 2) = FILE.Name 'UTILIZA ESTE CAMPO .Cells(j, 3) = FILE.DateLastModified .Cells(j, 4) = FILE.DateLastAccessed .Cells(j, 5) = FILE.Type .Cells(j, 6) = FILE.Size .Hyperlinks.Add Anchor:=Selection, Address:=FILE.Path, TextToDisplay:=FILE.Path j = j + 1 End If Next

    1. Segu te agradezco por tu ayuda a realizar el proceso que necesita, me ha funcionado de lo mejor.
      Gracias y exitos.
      Seguiremos aqui en la pagina aprendiendo mas todos los dias.

  17. me pueden ayudar con una macro que me muestre todas las carpetas y subcarpetas que tengan cada una y las muestre por columnas

    ejemplo:

    carpeta original subcarpeta subcarpeta 1 subcarpeta 2 ....
    ojo abril no si
    ojo mayo 1 2

    y asi sucesivamente

    gracias

    1. Hola:

      Para realizar lo que solicitas se deben realizar cambios en la macro original y en estos momentos no tengo tiempo, tan pronto como me sea posibles estudiaré una solución,. Saludos

  18. Hola muchas gracias por todos los aportes, tu respondiste a esperanza lo de los hipervínculos que solo llega a 65 mil mas o menos, y le sugeriste cambiar una fila en el código por otro, así lo hice pero me sale error en .Cells(j, 1).Select y sigue solo procesando 65 mil filas pero sin hipervínculo, que puede ser? agradezco tu ayuda mucho... saludos a todos

  19. Hola, Sergio, muy BUEN APORTE HE LEIDO CADA UNO DE LOS COMENTARIOS, TALVEZ ME PUEDAS APOYAR, COMO EXTRAIGO LA "DURACIÓN" DE LOS ARCHIVOS MULTIMEDIA,

  20. Buenas tardes, Muchas gracias por la información. Quería consultarte, a partir de la función que pusiste, ¿es posible listar los campos "De", "Para", "Fecha de Envío", "Asunto" y "CC"? los cuales son útiles cuando tenemos archivos *.eml.

    Nuevamente muchas gracias por tu ayuda.

  21. Hola buena tarde tu aporte con este codigo a sido de mucha ayuda en mis labores diarias te agradesco mucho, a hora tengo una consulta yo lo uso para listar exclusivamente archivos PDF quiciera aber si se puede obtener dentro de las propiedades del documento el numero de paginas que cada archivo PDF contiene? te agradesco tu ayuda de antemano

      1. Hola me encanto tu macro ojalá pudiera ayudarme por favor me pasa que tengo que hacer una base de datos de muchos Pdf y me gustaría solo listar los archivos pdf de carpetas y sub carpetas con Nombre, Ruta y Numero de páginas para hacer una biblioteca, pero la verdad no entiendo nada de macros

        Veras tu macro me ha ayudado muchísimo, pero quiero unir su el suyo con este que lo que hace es listar la cantidad de página y el nombre, pero no la ruta y no se como unirlo todo me da error

        Este es el macro que lista las páginas, pero no lo entiendo me ayudarías por favor

        Sub listaPDF(): Application.ScreenUpdating = False
        Dim ruta As String, tipo As String, lista, n As Long: On Error Resume Next
        ruta = LCase(ThisWorkbook.Path) ' toma la ruta donde esta guardado este libro '
        tipo = "pdf" ' indica la EXTension para el tipo de archivo a listar '
        Names.Add "archivos", "=files(""" & ruta & "\*.*"")" ' guarda TODOS los archivos de la ruta '
        Names.Add "lista", "=if(right(archivos," & Len(tipo) & ")=""" & tipo & """,archivos)" ' filtra por el tipo '
        lista = Filter([index(lista,0)], False, False): n = UBound(lista) + 1 ' limpia y cuenta por el tipo '
        Worksheets.Add After:=Worksheets(Worksheets.Count): [a1] = ruta & "\" ' se agrega una hoja '
        [a3].Resize(n).Value = Application.Transpose(lista) ' traslada la lista de archivos '
        With [b3].Resize(n): .Formula = "=paginasenpdf(a$1&a3)": .Value = .Value: End With ' cuenta las paginas '
        Names("lista").Delete: Names("archivos").Delete: [a1].ClearContents ' borra los nombres temporales '
        [a2:b2].Value = Array("documento", "paginas"): [a2].CurrentRegion.EntireColumn.AutoFit: [a1] = ruta ' FIN '
        End Sub
        Function paginasEnPDF(archivo As String) As Long
        ' UDF para contar las paginas de archivos *.PDF ' _
        R&D: Héctor Miguel Orozco Díaz (septiembre de 2015) '
        Dim tmp As String, x As Long: x = FreeFile
        Open archivo For Binary As #x: tmp = Space(LOF(x)): Get #x, , tmp: Close #x
        With CreateObject("vbscript.regexp")
        .Global = True: .IgnoreCase = True: .Pattern = "/type\s*/page[^s]"
        paginasEnPDF = .Execute(tmp).Count: End With
        End Function

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies