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,
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.
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
Enviar un comentario
Últimas publicaciones
Excelente el codigo, funciona a la perfeccion
Gracias por el comentario 😉