fbpx

Contar páginas de archivos PDF DOC y DOCX desde EXCEL

Un Saludo!!

He actualizado este artículo basado en una pregunta realizada por correo, ya que me pareció muy interesante, y es para contar las páginas de archivos de Word.

Así que ahora puedes contar páginas tanto de PDF como de archivos DOC y DOCX

Me han hecho varias preguntas directamente al correo, o en las encuestas, y esta es una que me hicieron que me pareció interesante compartir.

Nos solicitan lo siguiente:

«Macro para abrir un cuadro de diálogo que me permita seleccionar un PDF, hacer su hipervínculo en un celda y automáticamente en la celda de su costado me cuenta cuántas páginas tiene dicho PDF»

Suena algo complejo, pero acá te muestro la solución que se dió.

Solución para contar páginas en PDF DOC y DOCX

El archivo se compone de 2 tablas:

  • Una para leer un múltiples archivos PDF, DOC o DOCX y extraer la cantidad de páginas.
  • Y la otra tabla es para seleccionar una carpeta de donde se leen todos los archivos PDF, DOC o DOCX que se encuentran dentro para obtener la cantidad de páginas por cada archivo.

También al final del código, se adiciona el hipervínculo para poder abrir el archivo al seleccionar la celda.

Acá te muestro una imagen del archivo resultado.

Contar paginas de archivos PDF DOC DOCX desde Excel con Ejemplo
Contar paginas de archivos PDF DOC DOCX desde Excel con Ejemplo

Código para contar páginas de PDF DOC o DOCX

A continuación te muestro el código para contar las páginas de archivos PDF DOC o DOCX.

'Creado por Practicaprende.com

Sub leer_pdf_unico_archivo()
    Dim xStr As String
    Dim row As Integer
    Dim xFd As FileDialog
    Dim xFdItem As Variant
    Dim xFileName As String
    Dim xFileNum As Long
    Dim RegExp As Object
    Set xFd = Application.FileDialog(msoFileDialogFilePicker)
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If xFd.Show = -1 Then
        row = 9
        xFd.AllowMultiSelect = True
        Range("B" & row & ":F100").ClearContents
        For Each vrtSelectedItem In xFd.SelectedItems
            extension = fso.GetExtensionName(vrtSelectedItem)
            xFdItem = vrtSelectedItem
            xStr = ""
            
            If (extension = "pdf") Then 'Leer desde PDF
                Range("B" & row).Value = xFdItem
                Call adicionar_link("B" & row, CStr(xFdItem))
                Set RegExp = CreateObject("VBscript.RegExp")
                RegExp.Global = True
                RegExp.Pattern = "/Type\s*/Page[^s]"
                xFileNum = FreeFile
                Open (xFdItem) For Binary As #xFileNum
                    xStr = Space(LOF(xFileNum))
                    Get #xFileNum, , xStr
                Close #xFileNum
                Range("C" & row).Value = RegExp.Execute(xStr).Count
            ElseIf (extension = "doc" Or extension = "docx") Then 'Leer desde Doc o Docx
                Range("B" & row).Value = xFdItem
                Call adicionar_link("B" & row, CStr(xFdItem))
                Range("C" & row).Value = "Loading..."
                Set xWdApp = CreateObject("Word.Application")
                Set xWd = GetObject(vrtSelectedItem)
                Range("C" & row).Value = xWd.ActiveWindow.Panes(1).Pages.Count
                xWd.Close False
            End If
            row = row + 1
        Next
    End If
End Sub

Sub leer_pdf_desde_carpeta()
    Dim xStr As String
    Dim row As Integer
    Dim xFd As FileDialog
    Dim xFdItem As Variant
    Dim xFileName As String
    Dim xFileNum As Long
    Dim RegExp As Object
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If xFd.Show = -1 Then
        row = 9
        xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
        xFileName = Dir(xFdItem & "*.*", vbDirectory)
        xStr = ""
        Range("B" & row & ":F100").ClearContents
        Do While xFileName <> ""
            extension = fso.GetExtensionName(xFileName)
            If (extension = "pdf") Then 'Leer desde PDF
                Range("E" & row).Value = xFdItem & xFileName
                Call adicionar_link("E" & row, xFdItem & xFileName)
                Set RegExp = CreateObject("VBscript.RegExp")
                RegExp.Global = True
                RegExp.Pattern = "/Type\s*/Page[^s]"
                xFileNum = FreeFile
                Open (xFdItem & xFileName) For Binary As #xFileNum
                    xStr = Space(LOF(xFileNum))
                    Get #xFileNum, , xStr
                Close #xFileNum
                Range("F" & row).Value = RegExp.Execute(xStr).Count
                row = row + 1
            ElseIf (extension = "doc" Or extension = "docx") Then 'Leer desde Doc o Docx
                Range("E" & row).Value = xFdItem & xFileName
                Call adicionar_link("E" & row, xFdItem & xFileName)
                Range("F" & row).Value = "Loading..."
                Set xWdApp = CreateObject("Word.Application")
                Set xWd = GetObject(xFdItem & xFileName)
                Range("F" & row).Value = xWd.ActiveWindow.Panes(1).Pages.Count
                xWd.Close False
                row = row + 1
            End If
            xFileName = Dir
        Loop
    End If
End Sub

Private Sub adicionar_link(celda As String, archivo As String)
    With Range(celda)
        .Hyperlinks.Add Anchor:=Range(celda), _
        Address:=archivo
    End With
End Sub

La idea de esta página es compartir todo el conocimiento que se pueda, y que mejor que compartir una duda real de un seguidor de la página.

Espero sea de tu ayuda.

CONCLUSION

Ya viste como contar las páginas de archivos PDF DOC o DOCX, una solicitud de un seguidor de la página.

Si quieres ver mas ejemplos que tenemos visita nuestro Blog

Espero te guste!

Saludos!

Si te ha gustado el contenido puedes invitarme un café!


DESCARGAR EJEMPLO

En el siguiente link puedes descargar el archivo utilizado, Si tienes alguna duda o sugerencia para mejorar el código, simplemente comenta en el formulario de Contacto

Para descargar el archivo utilizado es necesario estar registrado. Acá Puedes Registrarte y si ya estas registrado puedes ingresar a tu cuenta de usuario.

29 comentarios en «Contar páginas de archivos PDF DOC y DOCX desde EXCEL»

  1. Buenas noches!
    Me gusta mucho tu código, pero tengo una pregunta, cómo puedo evitar el cuadro de diálogo, que tome la ruta desde una celda o desde «ThisWorkbook.Path», que tome automáticamente la ruta del archivo y me liste los PDFs y sus páginas.
    Muchas gracias,
    Diana A

    Responder
    • Hola Diana! Espero estés bien!! Gracias por preguntar.

      El código toma la ruta del Cuadro de Dialogo, pero si quieres especificar una en concreto puedes omitir esto:

      Set xFd = Application.FileDialog(msoFileDialogFolderPicker)

      y omitir todo el código que tenga «xFd», ya que eso corresponde al cuadro de dialogo y sus archivos.

      Por otro, lado revisa la variable «xFdItem», es en donde se guarda la carpeta seleccionada, entonces puedes reemplazar el valor de esta variable por tu carpeta.

      Ya que el código lo que hace es buscar todos los archivos(*.*) dentro de esa carpeta y luego los condiciona a PDF DOC o DOCX.

      Un saludo Diana y espero te sirva!!! 🙂👍

      Responder
    • Hola Miller! muchas gracias por comentar, interesante tu solicitud, déjame lo valido y dado caso actualizo el artículo para incluir las subcarpetas. Un saludo 👍

      Responder
          • Marlon!!

            Puede no dar el valor real en la medida que el pdf tenga ciertas características, ya que lo que el código hace es una verificación binaría del pdf y de allí se obtiene la cantidad de páginas.

            Para tener una mayor garantía se debe utilizar la referencia de adobe, pero esta no es gratuita por lo cual no se muestra en este artículo.

            Un saludo!

    • A Mí me pasa algo parecido con Excel 2016, la cantidad de páginas que recupera no es correcta.
      Por su comentario me atrevo a pensar que el nuevo formato de Adobe ya no se ajusta al string de consulta que se usa en esta macro y habría que considerar si el archivo firmado digitalmente también ha variado su estructura interna
      Ya busqué por varias fuentes una solución pero la única más sencilla es a través de comandos de linux, y empatar esto es peor

      Responder
  2. Lo descargué y probé varias veces. En algunas funcionó y el resto ya no. Quise contar folios de una carpeta con aproximadamente 100 archivos que contienen entre 1 y 4 folios cada uno, pero no mostró resultados. 🙁

    Responder
  3. HOLA…. pueden ayudarme..
    hice prueba con un grupo de archivo de pdf…. uno de ello tiene 9 paginas pero el contador me indica que tiene 14.. ya lo revise bien el archivo por si tiene hojas en blanco y nada….. mmm a que se debe???

    Responder
  4. Es muy buen codigo. la verdad me gustaria saber donde puedo aprender esos codigos avanzados de macros. ya que solo veo cursos basicos en la red, ni siquiera en libros he encontrado un codigo de esa manera

    Responder
    • Harles! gracias por comentar!

      Este código en particular por ejemplo hace uso de «regex» o «Expresiones Regulares», pero son totalmente separados de Excel, me refiero son temas que se necesitan aprender por aparte y luego venir a vba a implementarlos.

      Mas que todo uno aprende es buscando codigos y adaptandolos a tus necesidades.

      Por ejemplo en https://practicaprende.com/11 tienes un codigo para obtener las estadisticas del coronavirus por país, echale un vistazo y me cuentas que te pareció.

      La única forma de aprender es practicando bastante y haciendo tus propios codigos.

      Un saludo!

      Responder
    • Julian! gracias por comentar! revisando con el codigo actual no es posible, ya sería revisar otro tipo de implementación para leer un pdf desde vba!

      Responder
  5. Hola, lo probé pero me sale en todos una página de más y quisiera saber de que manera puedo hacer para que salga de manera exacta. Gracias por tu ayuda.

    Responder
    • Kety!!

      el código que se muestra en el artículo es con referencias gratuitas, por lo cual si el pdf tiene ciertas características y cierta encriptación puede no funcionar.

      Para tener una mayor garantía se debe utilizar la referencia de adobe, pero esta no es gratuita por lo cual no se muestra en este artículo.

      Un saludo!

      Responder

Deja un comentario