Contar el número de páginas de un PDF/DOC/DOCx desde Excel usando VBA

Escrito por Administrador

22 de noviembre de 2023

Hoy vamos a ver cómo contar el número de páginas de un archivo PDF/DOC/DOCx desde Microsoft Excel usando VBA.

Para ello he preparado el ejemplo que os muestro a continuación,

saber-usuarios-conectados-base-datos

Como veis, hay dos columnas diferenciadas. En la columna izquierda, seleccionaremos los archivos PDF/DOC/DOCx mediante un cuadro de diálogo que se abrirá al pulsar el botón Múltiples Archivos.

En la columna derecha, aparecerán todos los archivos PDF/DOC/DOCx incluidos en la carpeta que seleccionemos en el cuadro de diálogo que se abrirá al pulsar el botón Seleccionar Carpeta.

Simplemente son dos maneras distintas de buscar los archivos de los que queremos saber el número de páginas que contienen.

A continuación, os comparto el código de cada uno de los botones.

Sub leer_pdf_unico_archivo()

'Selección directa de archivos PDF

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

'Permitimos multiselección

row = 9
xFd.AllowMultiSelect = True
Range("B" & row & ":F100").ClearContents

For Each vrtSelectedItem In xFd.SelectedItems

extension = fso.GetExtensionName(vrtSelectedItem)
xFdItem = vrtSelectedItem
xStr = ""

'Buscamos archivos PDF y mediante la función adicionar_link los añadimos al listado

If (extension = "pdf") Then

Range("B" & row).Value = xFdItem
Call adicionar_link("B" & row, CStr(xFdItem))

'Calculamos el número de páginas

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

'Buscamos archivos DOC/DOCx y mediante la función adicionar_link los añadimos al listado

ElseIf (extension = "doc" Or extension = "docx") Then

Range("B" & row).Value = xFdItem
Call adicionar_link("B" & row, CStr(xFdItem))

'Calculamos el número de páginas

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()

'Selección de carpeta y lectura de todos los PDF incluidos

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)

'Leemos los archivos PDF

If (extension = "pdf") Then

Range("E" & row).Value = xFdItem & xFileName
Call adicionar_link("E" & row, xFdItem & xFileName)

'Calculamos el número de páginas

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

'Leemos los archivos DOC/DOCx

ElseIf (extension = "doc" Or extension = "docx") Then

Range("E" & row).Value = xFdItem & xFileName
Call adicionar_link("E" & row, xFdItem & xFileName)

'Calculamos el número de páginas

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)

'Función para añadir links

With Range(celda)

.Hyperlinks.Add Anchor:=Range(celda), Address:=archivo

End With

End Sub

Si pulsamos el botón Múltiples Archivos, aparece una ventana de diálogo para seleccionar los archivos de los que queremos conocer el número de páginas. En mi caso, voy a seleccionar dos, y automáticamente me aparecerá la ruta y el número de páginas de cada uno de ellos.

Si ahora pulsamos el botón Seleccionar Carpeta, importaremos todos los archivos PDF/DOC/DOCx incluidos.

saber-usuarios-conectados-base-datos
saber-usuarios-conectados-base-datos

Espero que con este ejemplo hayas aprendido a contar las páginas de archivos PDF/DOC/DOCx desde Microsoft Excel usando VBA.

Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.

Hasta la próxima.

Si te ha servido y quieres donar

Descarga el archivo del ejemplo

2 Comentarios

  1. Avatar

    Excelente el codigo, funciona a la perfeccion

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Últimas publicaciones

Categorías

abril 2024
LMXJVSD
1234567
891011121314
15161718192021
22232425262728
2930 

Debates en el foro

Avatar
Buscar Datos en Columnas
Avatar
Formularios con ADO

Contacto