Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
AW: PDF Seitenanzahl feststellen
09.05.2017 14:54:51
Manfred
Hallo Werner,
ja, funzt, Danke.
Gruß
Manfred
Anzeige
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
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge