Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PDF Seitenanzahl feststellen

Forumthread: PDF Seitenanzahl feststellen

PDF Seitenanzahl feststellen
09.05.2017 13:44:05
Manfred
Hallo zusammen,
habe den Code irgendwo aus dem Internet und ein bischen angepasst.
Ich würde gerne bei einem mehrseitigen PDF die Seiten zählen.
Mit dem Makro schaffe ich aber nur die ersten paar Seiten aber nicht 100 oder 500.
Kann mir bitte jemand helfen ? Ich komm da irgendwie nicht weiter.
Was ist falsch im Code ?
Sub PDFCounter()
Dim buf As String, pfad As String, I As Integer
Dim DateiName As Object, pdf As Object, pos As Integer
'Datei Auswählen
pfad = Application.GetOpenFilename("Alle Dateien (*.*), *.*")
pfad = Mid(pfad, InStrRev(pfad, "\") + 1)
'Dateiname anzeigen
MsgBox (pfad)
Set DateiName = CreateObject("Scripting.FileSystemObject")
Set pdf = DateiName.OpenTextFile(pfad)
Do While Not pdf.AtEndOfStream
buf = pdf.ReadLine
pos = InStr(1, buf, "/Count")
If pos > 0 Then
buf = Mid(buf, pos + 7)
I = CLng(buf)
Exit Do
End If
Loop
Range("a1") = I
End Sub

Mit freundlichen Grüßen
Manfred
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF Seitenanzahl feststellen
09.05.2017 14:07:16
Nepumuk
Hallo Manfred,
teste mal:
Option Explicit

Public Sub PDFCounter()
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        With .Filters
            If .Count > 0 Then .Delete
            Call .Add(Description:="PDF-Dateien", Extensions:="*.pdf")
        End With
        If .Show Then
            Call MsgBox(GetPageCount(.SelectedItems(1)))
        End If
    End With
End Sub

Private Function GetPageCount(ByVal pvstrFileName As String) As Long
    
    Dim strText As String
    Dim strLinearized As String, astrCount() As String
    Dim ialngIndex As Long
    Dim objFileSystemObject As Object, objTextFile As Object
    Dim objRegEx As Object, objMatch As Object, objItem As Object
    Dim blnFound As Boolean
    
    GetPageCount = -1
    
    Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFileSystemObject.OpenTextFile(pvstrFileName, 1, False, 0)
    
    Do Until objTextFile.AtEndOfStream
        
        strText = objTextFile.ReadLine
        strText = Replace(strText, vbLf, vbNullString)
        
        If Cbool(InStr(1, strText, "/Linearized")) Then
            
            If Len(strText) > 20 Then
                
                strLinearized = strText
                blnFound = True
                Exit Do
                
            End If
        End If
        
        If Cbool(InStr(1, strText, "/Count ")) Then
            
            Redim Preserve astrCount(ialngIndex)
            astrCount(ialngIndex) = strText
            ialngIndex = ialngIndex + 1
            blnFound = True
            
        End If
    Loop
    
    Call objTextFile.Close
    
    Set objTextFile = Nothing
    Set objFileSystemObject = Nothing
    
    If blnFound Then
        
        Set objRegEx = CreateObject("VBScript.RegExp")
        
        With objRegEx
            
            .MultiLine = True
            .Global = True
            .IgnoreCase = False
            
            If strLinearized <> vbNullString Then
                
                .Pattern = "\/N.?(\d+).?"
                
                Set objMatch = .Execute(strLinearized)
                
                If objMatch.Count > 0 Then _
                    GetPageCount = Clng(objMatch(0).SubMatches(0))
                
            Else
                
                If ialngIndex = 1 Then
                    
                    .Pattern = "\/Count.?(\d+)"
                    
                    Set objMatch = .Execute(astrCount(0))
                    
                    If objMatch.Count = 1 Then
                        
                        GetPageCount = Clng(objMatch(0).SubMatches(0))
                        
                    Else
                        
                        For Each objItem In objMatch
                            
                            GetPageCount = WorksheetFunction.Max( _
                                GetPageCount, Clng(objItem.SubMatches(0)))
                            
                        Next
                    End If
                Else
                    
                    .Pattern = "\/Count.?(-?\d+)"
                    
                    For ialngIndex = 0 To UBound(astrCount)
                        
                        Set objMatch = .Execute(astrCount(ialngIndex))
                        
                        GetPageCount = WorksheetFunction.Max( _
                            GetPageCount, Clng(objMatch(0).SubMatches(0)))
                        
                    Next
                End If
            End If
            
        End With
        
        Set objMatch = Nothing
        Set objRegEx = Nothing
        
    End If
    
End Function

Gruß
Nepumuk
Anzeige
AW: PDF Seitenanzahl feststellen
09.05.2017 14:24:26
Manfred
Hallo Nepumuk,
großartig, das Teil funzt super.
Vielen dank.
Gruß
Manfred
AW: PDF Seitenanzahl feststellen
09.05.2017 14:31:01
Manfred
Hallo Nepumuk,
sorry, noch ne Frage.
Wie bekomme ich den Wert im aktuellen Excelblatt in Zelle B2 ?
Gruß
Manfred
AW: PDF Seitenanzahl feststellen
09.05.2017 14:47:18
Werner
Hallo Manfred,
würde mal vermuten das hier:
If .Show Then
Call MsgBox(GetPageCount(.SelectedItems(1)))
End If
durch das hier:
If .Show Then
ActiveSheet.Range("B2") = GetPageCount(.SelectedItems(1))
End If

ersetzen.
Gruß Werner
Anzeige
AW: PDF Seitenanzahl feststellen
09.05.2017 14:54:51
Manfred
Hallo Werner,
ja, funzt, Danke.
Gruß
Manfred
AW: Gerne o.w.T
11.05.2017 10:25:39
Werner
AW: PDF Seitenanzahl feststellen
09.05.2017 14:48:04
Nepumuk
Hallo Manfred,
ersetze diese Zeile:
Call MsgBox(GetPageCount(.SelectedItems(1)))
durch diese:
Cells(2, 2).Value = GetPageCount(.SelectedItems(1))
Gruß
Nepumuk
Anzeige
AW: PDF Seitenanzahl feststellen
09.05.2017 14:55:52
Manfred
Hallo Nepumuk,
ja, funzt, Vielen Dank.
Gruß
Manfred
AW: PDF Seitenanzahl feststellen
09.05.2017 14:12:46
Der
Hallo,
ich vermute, dass es sich dabei um linearisierte PDF-Dateien handelt (am Anfang der Datei müsste sich folgender Inhalt in der Datei befinden: /Linearized
Bei solchen Dateien bestimmt sich die Seitenzahl nach dem danach folgenden /N.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

PDF Seitenanzahl in Excel ermitteln


Schritt-für-Schritt-Anleitung

Um die Seitenanzahl eines mehrseitigen PDFs in Excel zu ermitteln, kannst du folgendes VBA-Makro verwenden. Dieses Makro zählt die Seiten in einer PDF-Datei und gibt das Ergebnis in einer Zelle deines Excel-Blatts aus.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Option Explicit

Public Sub PDFCounter()
    Dim buf As String, pfad As String, I As Integer
    Dim DateiName As Object, pdf As Object, pos As Integer

    ' Datei Auswählen
    pfad = Application.GetOpenFilename("PDF-Dateien (*.pdf), *.pdf")
    If pfad = "False" Then Exit Sub ' Abbruch, wenn keine Datei ausgewählt

    ' Dateiname anzeigen
    MsgBox (pfad)
    Set DateiName = CreateObject("Scripting.FileSystemObject")
    Set pdf = DateiName.OpenTextFile(pfad)

    Do While Not pdf.AtEndOfStream
        buf = pdf.ReadLine
        pos = InStr(1, buf, "/Count")
        If pos > 0 Then
            buf = Mid(buf, pos + 7)
            I = CLng(buf)
            Exit Do
        End If
    Loop

    ' Seitenanzahl in Zelle B2 ausgeben
    ActiveSheet.Range("B2") = I
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Drücke ALT + F8, wähle PDFCounter aus und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Das Makro kann die Datei nicht finden."

    • Lösung: Stelle sicher, dass du eine gültige PDF-Datei auswählst und dass der Dateipfad korrekt ist.
  • Fehler: "Die Seitenanzahl wird nicht korrekt angezeigt."

    • Lösung: Überprüfe, ob die PDF-Datei linearisiert ist. Das Makro funktioniert nur bei nicht-linearisierten PDFs.

Alternative Methoden

Wenn das VBA-Makro nicht die gewünschten Ergebnisse liefert, kannst du auch andere Ansätze in Betracht ziehen:

  • Excel-Add-Ins: Es gibt spezielle Excel-Add-Ins, die PDF-Dateien analysieren und die Seitenanzahl anzeigen können. Überprüfe die Microsoft Office Add-Ins für solche Tools.

  • Drittanbieter-Software: Tools wie Adobe Acrobat oder spezielle PDF-Analysetools können die Seitenanzahl direkt anzeigen und exportieren.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Seitenanzahl von PDFs mit verschiedenen Methoden ermitteln kannst:

  • VBA-Methode: Das oben angegebene Makro zählt die Seitenanzahl von PDF-Dateien direkt in Excel und gibt das Ergebnis in Zelle B2 aus.

  • Excel-Formel: Wenn du eine Liste von PDF-Dateien hast, könntest du eine Kombination von VBA und Excel-Formeln verwenden, um die Seitenanzahl in einer Tabelle zu dokumentieren.


Tipps für Profis

  • Nutze die If...Then-Anweisung, um Fehlerbehandlungen in dein VBA-Skript einzubauen. Das hilft, unerwartete Ausgaben zu vermeiden, wenn die PDF-Datei nicht die erwartete Struktur hat.

  • Experimentiere mit Regular Expressions (RegEx) in VBA, um die Seitenzahlen präziser aus komplexen PDF-Dateien auszulesen.

  • Überlege, deine VBA-Skripte zu optimieren, indem du Funktionen zur Wiederverwendung schaffst, besonders wenn du mit mehreren PDFs arbeitest.


FAQ: Häufige Fragen

1. Wie kann ich die Seitenanzahl in einer anderen Zelle anzeigen?
Ändere einfach die Zeile ActiveSheet.Range("B2") = I in das gewünschte Zellformat, z.B. ActiveSheet.Range("A1") = I.

2. Funktioniert das Makro mit allen PDF-Dateien?
Das Makro funktioniert am besten mit PDFs, die nicht linearisiert sind. Bei linearisierten PDFs kann es zu Problemen kommen.

3. Brauche ich spezielle Berechtigungen, um das Makro auszuführen?
Ja, du musst sicherstellen, dass Makros in deinem Excel aktiviert sind. Überprüfe die Sicherheitseinstellungen unter Datei > Optionen > Trust Center.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige