Sub Test()
Dim I As Long
Dim xRg As Range
Dim xStr As String
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)
If xFd.Show = -1 Then
xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
xFileName = Dir(xFdItem & "*.pdf", vbDirectory)
Set xRg = Range("A1")
Range("A:B").ClearContents
Range("A1:B1").Font.Bold = True
xRg = "File Name"
xRg.Offset(0, 1) = "Pages"
I = 2
xStr = ""
Do While xFileName ""
Cells(I, 1) = 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
Cells(I, 2) = RegExp.Execute(xStr).Count
I = I + 1
xFileName = Dir
Loop
Columns("A:B").AutoFit
End If
End Sub Ich habe diesen Programmcode in den unten folgenden Code integriert.
Mit diesem Programm kann ich ein übergeordnetes Verzeichnis auswählen und VBA schreibt für jede Datei in alle untergeordneten Verzeichnisse eine Excel-Zeile (Spalte A mit Pfad, Spalte B mit Dateinamen)!
Dadurch kann ich die jeweiligen Pfadlängen berechnen, um zu lange Dateinamen zu vermeiden.
Zusätzlich möchte ich für jede PDF-Datei in Spalte C die Anzahl der Seiten eines PDF-Dokumentes auflisten lassen.
Das funktioniert leider nicht. In Spalte C wird immer nur der Wert 0 eingetragen. Das heißt, die Werte werden in die richtige Spalte C geschrieben, aber in meinem Code nicht richtig ermittelt. Die Variablen ab dem Open-Befehl werden nicht richtig ausgelesen.
Hat jemand eine Idee, was ich falsch mache, bzw. wie ich dieses Problem noch lösen kann.
Ich habe leider nur Grundkenntnisse in VBA.
Vielen Dank für Eure Bemühungen.
Private Sub MWReadSubFolder(ByVal sPath As String)
Dim oFSO As Object
Dim oFolder As Object
Dim oSubFolder As Object
Dim oFile As Object
'Dim von PDF-Seiten Programm
Dim I As Long
Dim xRg As Range
Dim xStr As String
Dim xFd As FileDialog
Dim xFdItem As Variant
Dim xFileName As String
Dim xFileNum As Long
Dim RegExp As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
With oSheet
For Each oSubFolder In oFolder.subfolders
'Alle Dateien auflisten
For Each oFile In oSubFolder.Files
.Cells(lRowCounter, 1) = oSubFolder.Path
.Cells(lRowCounter, 2) = oFile.Name
'von PDF-Seiten Programm
Set RegExp = CreateObject("VBscript.RegExp")
RegExp.Global = True
RegExp.Pattern = "/Type\s*/Page[^s]"
xFileNum = FreeFile
Open (oSubFolder.Path & oFile.Name) For Binary As #xFileNum Ab hier werden keine Werte mehr in die
xStr = Space(LOF(xFileNum)) Variablen geschrieben!
Get #xFileNum, , xStr
Close #xFileNum
.Cells(lRowCounter, 3) = RegExp.Execute(xStr).Count
lRowCounter = lRowCounter + 1
.Cells(1, 3) = lRowCounter - 3
Next oFile
'Alle Unterverzeichnisse verarbeiten (rekursiv)
Call MWReadSubFolder(oSubFolder.Path)
Next oSubFolder
End With
Set oFSO = Nothing
Set oFile = Nothing
Set oFolder = Nothing
Set oSubFolder = Nothing
End Sub