Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Makro zum Suchen von PDFs

VBA Makro zum Suchen von PDFs
11.10.2021 13:22:31
PDFs
Hallo,
ich habe damals hier im Forum einen sehr guten Codeschnipsel gefunden, wie ich anhand eines Zellwertes in einem Ordner nach der PDF Datei suchen kann und sie in einem bestimmten Ordner zu kopieren.
Jetzt ist es so, dass ich nicht nur ein Ordner habe, sondern leider mehrere Ordner.
Ich muss parallel in 3 Ordner suchen.
Der Zellwert in A1 lautet zum Beispiel test1 und die PDF Datei heißt manchmal test1_db, aber wenn test1 im PDF Name enthalten ist, sollte auch die PDF hier test1_db kopiert werden, um es dementsprechend in einem Ordner zu kopieren.
Hier mein Ansatz, der leider nicht zum Erfolg führt.

Sub copyFile()
Dim objFSO As Object, rng As Range
Dim strFileToCopy, strOldPath As String, strOldPath2 As String, strOldPath3 As String, strNewPath As String
strOldPath = "" 'Verzeichnis Nr. 1 in dem die Datei liegt
strOldPath2 = ""                                             'Verzeichnis Nr. 2 in dem die Datei liegt
strOldPath3 = ""                                              'Verzeichnis Nr. 3 in dem die Datei liegt
strNewPath = ""
With ActiveSheet
For Each rng In Range("A1:A2")
'strFileToCopy = .Range("A2") 'Zelle mit dem Namen
If strFileToCopy Like rng Then
strFileToCopy = rng
strFileToCopy = strFileToCopy & ".pdf" 'Suffix anhängen
Set objFSO = CreateObject("Scripting.FileSystemObject")
OldPath = objFSO.BuildPath(strOldPath, strFileToCopy)
If objFSO.FileExists(OldPath) Then
objFSO.copyFile OldPath, objFSO.BuildPath(strNewPath, strFileToCopy)
End If
End If
Next
'If Dir(strOldPath & strFileToCopy, vbNormal)  "" Then
' Set objFSO = CreateObject("Scripting.FileSystemObject")
'objFSO.copyFile strOldPath & strFileToCopy, strNewPath & strFileToCopy
'End If
End With
Set objFSO = Nothing
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro zum Suchen von PDFs
11.10.2021 15:46:00
PDFs
Moin Thomas,
siehe https://www.herber.de/forum/archiv/1848to1852/1849348_VBA_ueberspringt_For_Each_Schleife.html
Verzeichnis-Struktur sind Bäume, dessen Tiefe vorher nicht bekannt sind, daher muss man rekursiv rangehen.
Aber nichts gegen Copy-Paste Code Schnipsel, ganz im gegenteil, aber bei rekursiven Verfahren wirst Du nicht darumkommen, Dich mit dem Code auseinanderzu setzen.
VG
Yal
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Makro zum Suchen von PDFs in mehreren Ordnern


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf „VBAProject (Deine Datei)“ > Einfügen > Modul.

  3. Kopiere den folgenden Code und füge ihn in das Modul ein:

    Sub copyFile()
        Dim objFSO As Object, rng As Range
        Dim strFileToCopy As String, strOldPath As String, strOldPath2 As String, strOldPath3 As String, strNewPath As String
    
        strOldPath = "C:\Pfad\zu\Ordner1\" ' Verzeichnis Nr. 1
        strOldPath2 = "C:\Pfad\zu\Ordner2\" ' Verzeichnis Nr. 2
        strOldPath3 = "C:\Pfad\zu\Ordner3\" ' Verzeichnis Nr. 3
        strNewPath = "C:\Pfad\zum\Zielordner\" ' Zielordner
    
        Set objFSO = CreateObject("Scripting.FileSystemObject")
    
        With ActiveSheet
            For Each rng In .Range("A1:A2")
                strFileToCopy = rng.Value & ".pdf" ' Suffix anhängen
    
                ' Überprüfe alle Ordner
                For Each strOldPath In Array(strOldPath, strOldPath2, strOldPath3)
                    If objFSO.FileExists(objFSO.BuildPath(strOldPath, strFileToCopy)) Then
                        objFSO.CopyFile objFSO.BuildPath(strOldPath, strFileToCopy), objFSO.BuildPath(strNewPath, strFileToCopy)
                    End If
                Next strOldPath
            Next rng
        End With
    
        Set objFSO = Nothing
    End Sub
  4. Passe die Ordnerpfade an deine Bedürfnisse an.

  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus: Drücke ALT + F8, wähle copyFile und klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"

    • Überprüfe die eingegebenen Ordnerpfade. Diese müssen korrekt sein und auf existierende Verzeichnisse zeigen.
  • Makro funktioniert nicht

    • Stelle sicher, dass die Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center und aktiviere die Makros.
  • Keine Dateien kopiert

    • Überprüfe, ob die Zellwerte in A1 und A2 mit den PDF-Dateinamen übereinstimmen (z.B. test1 sollte in test1_db.pdf enthalten sein).

Alternative Methoden

  1. Power Query: Wenn du nicht mit VBA arbeiten möchtest, kannst du Power Query verwenden, um Daten aus PDF-Dateien zu extrahieren. Dies ist jedoch auf die Daten in den PDFs beschränkt und nicht zum Suchen von Dateien geeignet.

  2. Dateisystem durchsuchen: Du kannst das integrierte Windows-Suchfeld verwenden, um nach PDFs in bestimmten Ordnern zu suchen, wenn du keine Programmierung nutzen möchtest.


Praktische Beispiele

  • Szenario: Du hast in Excel in Zelle A1 den Wert test1. Das Makro sucht in drei Ordnern nach test1_db.pdf. Wenn es diese Datei findet, wird sie in den Zielordner kopiert.

  • Mehrere Zellwerte: Du kannst die Range in .Range("A1:A2") erweitern, um mehr Zellwerte zu berücksichtigen, z.B. .Range("A1:A10"), um mehrere PDFs gleichzeitig zu suchen.


Tipps für Profis

  • Nutze die Like-Bedingung im VBA, um flexiblere Suchen zu ermöglichen, z.B. If strFileToCopy Like "*" & rng & "*" Then für Teilübereinstimmungen.
  • Füge Fehlermeldungen ein, um den Benutzer über fehlgeschlagene Kopiervorgänge zu informieren.
  • Erstelle eine Protokolldatei, die alle gefundenen und kopierten Dateien auflistet, um die Nachverfolgbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Kann ich auch in Unterordnern suchen?
Ja, du müsstest den Code anpassen, um rekursiv durch die Ordnerstruktur zu gehen.

2. Funktioniert das Makro in allen Excel-Versionen?
Das Makro sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen, wie Excel 2010 und neuer.

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