Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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 Dateien kopieren und umbenennen

PDF Dateien kopieren und umbenennen
08.12.2021 11:31:16
Patrick
Hallo zusammen,
ich möchte folgendes Szenario in VBA umsetzen.
Ich habe eine Exceltabelle mit verschiedenen Infos. Relevant sind aber eigentlich nur 4 Spalten. Hier mal ein Beispiel einer Zeile:
A1 = 3971
B1 = 7001
C1 = 0000
AL = 580
A1 bis C1 sollen später verkettet und durch einen Punkt getrennt werden, sprich das Ergebnis muss der String 3971.7001.0000 sein (dieser String soll später der neue Dateiname meiner PDF-Datei werden).
Jetzt möchte ich, dass der User per FilePicker mehrere PDF-Dateien aus dem Verzeichnis C:\Datenblatterzeugung auswählen kann. Die Dateinamen der PDF-Dateien in diesem Verzeichnis besitzen bisher z.B. folgenden Aufbau: 0580 Text.pdf
Nach dem Auswählen der PDF-Dateien soll der VBA Code dafür sorgen, dass die ausgewählten PDF-Dateien kopiert und umbenannt werden. Das soll wie folgt geschehen: Es muss nach den ersten 4 Ziffern des Dateinamens geschaut werden. Ist die erste Ziffer eine 0, soll diese ignoriert werden. Dann muss diese Ziffern Reihenfolge gegen Spalte AL geprüft werden. Gibt es eine Übereinstimmung soll der Dateiname von 0580 Text.pdf in den String 3971.7001.0000.pdf umbenannt werden.
In Spalte AL kann ein Wert auch mehrmals vorkommen, die Kombinationen aus A1 bis C1 sind aber immer unterschiedlich. Der ganze Prozess müsste also in einer Schleife laufen, damit dann die entsprechende Anzahl PDFs kopiert werden (es soll immer 0580 Text.pdf als Basisdatei verwendet werden, der Zieldateiname ändert sich nur jeweils. Es sollen also so viele PDFs kopiert werden, wie es Einträge in der Spalte AL zu dieser Nummer gibt).
0580 dient hier nur als Beispiel, es kommen unterschiedliche Werte vor und daher müssen unterschiedliche PDFs kopiert und umbenannt werden.
Die umbenannten Dateien sollen im Anschluss in das Verzeichnis C:\Datenblatterzeugung\umgewandelt abgelegt werden. Die ursprüngliche Quelldatei im Verzeichnis C:\Datenblatterzeugung soll gelöscht werden.
Ich hoffe ich konnte mein Vorhaben verständlich darstellen. Für Lösungsvorschläge wäre ich sehr dankbar.
Viele Grüße
Patrick

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF Dateien kopieren und umbenennen
08.12.2021 12:31:31
UweD
Hallo
versuch das mal

Option Explicit
Sub umbenennen()
Dim Dlg As FileDialog, FSO As Object
Dim PfadAlt As String, PfadNeu As String, Datei, TMP
Dim Ext As String, DatNeu As String
Dim Sp As Integer, Ze As Long
PfadAlt = "E:\Excel\temp\Test\"
PfadNeu = PfadAlt & "umgewandelt\"
Ext = ".pdf"
Sp = 38 'Spalte AL
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dlg = Application.FileDialog(msoFileDialogFilePicker)
With Dlg
.AllowMultiSelect = True ' mehrere auswählen möglich
.InitialFileName = PfadAlt & "*" & Ext ' Anfangsverzeichnis und Filter
.InitialView = msoFileDialogViewDetails 'Anzeige des Dialogs - die Dateien als Detail
.Title = "Dateien wählen"
End With
If Dlg.Show = True Then
For Each Datei In Dlg.SelectedItems 'alle gewählten Dateien abarbeiten
TMP = CDbl(Replace(Dir(Datei), Ext, "")) 'Datei ohne Pfad, ohne Ext; ohne führende Nullen
If WorksheetFunction.CountIf(Columns(Sp), TMP) > 0 Then 'Ist die Datei in AL vorhanden
Ze = WorksheetFunction.Match(TMP, Columns(Sp), 0) 'wenn Ja, in welcher Zeile
'neuer Nadeiname
DatNeu = Cells(Ze, 1) & "." & Cells(Ze, 2) & "." & Cells(Ze, 3) & Ext
'Umbenennen und verschieben
FSO.MoveFile Datei, PfadNeu & DatNeu
Set FSO = Nothing
End If
Next
End If
End Sub
LG UweD
Anzeige
AW: PDF Dateien kopieren und umbenennen
08.12.2021 12:44:02
Patrick
Hallo UweD,
erst einmal vielen Dank für die wahnsinnig schnelle Umsetzung. Die Anforderung hat sich spontan noch geringfügig geändert. In Spalte AL steht jetzt kein Kenner mehr, sondern der vollständige Dateiname der ursprünglichen PDF-Dateien. Es kann also mit diesem Inhalt nach relevanten Dateien im Quellverzeichnis gesucht werden. Magst du das noch einmal anpassen. Das wäre super.
Ich habe deinen Code zum Testen in Tabelle1 kopiert in den Entwicklungstools. Wenn ich ihn über F5 ausführe, kann ich im Dialog eine PDF Datei öffnen. Dann erscheint aber direkt die Fehlermeldung "Laufzeitfehler 13: Typen unverträglich". Mache ich irgendetwas verkehrt?
Viele Grüße
Patrick
Anzeige
AW: PDF Dateien kopieren und umbenennen
08.12.2021 13:04:40
UweD
Hallo
Makro muss in ein Normales Modul

Option Explicit
Sub umbenennen()
Dim Dlg As FileDialog, FSO As Object
Dim PfadAlt As String, PfadNeu As String, Datei, TMP
Dim Ext As String, DatNeu As String
Dim Sp As Integer, Ze As Long
PfadAlt = "E:\Excel\temp\Test"
PfadAlt = PfadAlt & IIf(Right(PfadAlt, 1) = "\", "", "\") 'Prüfen auf \ am Ende
If Dir(PfadAlt, vbDirectory) = "" Then
MsgBox PfadAlt & ":   nicht vorhanden"
Exit Sub
End If
PfadNeu = PfadAlt & "umgewandelt\"
If Dir(PfadNeu, vbDirectory) = "" Then
MkDir PfadNeu ' wenn nicht da, dann anlegen
End If
Ext = ".pdf"
Sp = 38 'Spalte AL
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dlg = Application.FileDialog(msoFileDialogFilePicker)
With Dlg
.AllowMultiSelect = True ' mehrere auswählen möglich
.InitialFileName = PfadAlt & "*" & Ext ' Anfangsverzeichnis und Filter
.InitialView = msoFileDialogViewDetails 'Anzeige des Dialogs - die Dateien als Detail
.Title = "Dateien wählen"
End With
If Dlg.Show = True Then
For Each Datei In Dlg.SelectedItems 'alle gewählten Dateien abarbeiten
TMP = Dir(Datei) 'Datei ohne Pfad
If WorksheetFunction.CountIf(Columns(Sp), TMP) > 0 Then 'Ist die Datei in AL vorhanden
Ze = WorksheetFunction.Match(TMP, Columns(Sp), 0) 'wenn Ja, in welcher Zeile
'neuer Nadeiname
DatNeu = Cells(Ze, 1) & "." & Cells(Ze, 2) & "." & Cells(Ze, 3) & Ext
'Umbenennen und verschieben
FSO.MoveFile Datei, PfadNeu & DatNeu
End If
Next
Else
MsgBox "Es wurden keine Dateien ausgewählt"
End If
Set FSO = Nothing
End Sub
LG UweD
Anzeige
AW: PDF Dateien kopieren und umbenennen
08.12.2021 13:20:35
UweD
Hallo nochmal
Setze mal bei "For Each Datei.." einen Haltepunkt und gehe im Einzelschritt F8 durch
LG UweD
AW: PDF Dateien kopieren und umbenennen
08.12.2021 13:22:37
Patrick
Danke, das funktioniert schon einmal perfekt. Jetzt haben wir bereits die 95% Lösung. Es fehlt nur noch das i-Tüpfelchen. Das Ganze müsste jetzt noch in einer Schleife oder ähnlichem laufen.
Die Exceldatei kann mehrere Einträge pro PDF-Datei enthalten. Ich versuche mal es zu skizzieren.
Spalte A Spalte B Spalte C Spalte AL
1000 1100 0000 Datei1.pdf
1000 1200 0000 Datei1.pdf
1000 1300 0000 Datei1.pdf
2000 2100 0000 Datei2.pdf
2000 2200 0000 Datei2.pdf
2000 2300 0000 Datei2.pdf
3000 3100 0000 Datei3.pdf
3000 3200 0000 Datei3.pdf
3000 3300 0000 Datei3.pdf
Für Datei1.pdf müssten also 3 Dateien erzeugt werden, ebenso wie für Datei2 und Datei3. Die Namen müssten dann je Zeile variieren.
Viele Grüße
Patrick
Anzeige
AW: PDF Dateien kopieren und umbenennen
08.12.2021 13:21:21
Patrick
Danke, das funktioniert schon einmal perfekt. Jetzt haben wir bereits die 95% Lösung. Es fehlt nur noch das i-Tüpfelchen. Das Ganze müsste jetzt noch in einer Schleife oder ähnlichem laufen.
Die Exceldatei kann mehrere Einträge pro PDF-Datei enthalten. Ich versuche mal es zu skizzieren.
Spalte A Spalte B Spalte C Spalte AL
1000 1100 0000 Datei1.pdf
1000 1200 0000 Datei1.pdf
1000 1300 0000 Datei1.pdf
2000 2100 0000 Datei2.pdf
2000 2200 0000 Datei2.pdf
2000 2300 0000 Datei2.pdf
3000 3100 0000 Datei3.pdf
3000 3200 0000 Datei3.pdf
3000 3300 0000 Datei3.pdf
Für Datei1.pdf müssten also 3 Dateien erzeugt werden, ebenso wie für Datei2 und Datei3. Die Namen müssten dann je Zeile variieren.
Viele Grüße
Patrick
Anzeige
AW: PDF Dateien kopieren und umbenennen
08.12.2021 13:41:06
UweD
Aber das ist doch dann genau anders herum.
Jetzt:
- Dateien auswählen und nachsehen ob in AL vorhanden.
- Dann umbenennen und verschieben
= D.h. eine Datei wird nur umbenannt


So wie ich es jetzt verstanden habe:
- Verzeichnis wählen (Keine Dateien)
- Alle Zeilen in der Tabelle durchlaufen
- nachsehen, ob im Verzeichnis vorhanden
- dann KOPIEREN und neu benennen
- bei Mehrfachvorkommen in AL; erst nach der Letzten löschen
= aus einer Datei entstehen Mehrere
Ist das korrekt?
Zweiter Anlauf
08.12.2021 14:31:27
UweD
Dann versuch es mal so

Option Explicit
Sub Umbenennen()
Dim Dlg As FileDialog, FSO As Object
Dim PfadAlt As String, PfadNeu As String, Datei, Anz As Long
Dim Ext As String, DatNeu As String
Dim Sp As Integer, Ze As Long
PfadAlt = "E:\Excel\temp\Test\"
Ext = ".pdf"
Sp = 38 'Spalte AL
Set Dlg = Application.FileDialog(msoFileDialogFolderPicker)
Dlg.InitialFileName = PfadAlt
If Dlg.Show = True Then
PfadAlt = Dlg.SelectedItems(1) & "\"
PfadNeu = PfadAlt & "umgewandelt\"
If Dir(PfadNeu, vbDirectory) = "" Then
MkDir PfadNeu ' wenn nicht da, dann anlegen
End If
LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
For Ze = 1 To LR
Datei = Cells(Ze, Sp)
If Dir(PfadAlt & Datei)  "" Then 'Datei vorhanden
'neuer Dateiname
DatNeu = Cells(Ze, 1) & "." & Cells(Ze, 2) & "." & Cells(Ze, 3) & Ext
'Umbenennen und kopieren
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.copyFile PfadAlt & Datei, PfadNeu & DatNeu
Anz = Anz + 1
'nochmal vorhanden?
If WorksheetFunction.CountIf(Cells(Ze + 1, Sp).Resize(LR - Ze + 1, 1), Datei) = 0 Then
'Wenn Letzte, dann erst löschen
FSO.deletefile PfadAlt & Datei
End If
Else
MsgBox Datei & "   nicht gefunden"
End If
Next
Else
MsgBox "Es wurden kein Pfad ausgewählt"
End If
MsgBox Anz & "  Dateien umbenannt"
Set FSO = Nothing
End Sub
LG UweD
Anzeige
AW: Zweiter Anlauf
08.12.2021 15:06:11
Patrick
Perfekt, jetzt ist es super!
Die Variable LR war nicht deklariert. Ich habe ihr den Datentyp Long zugewiesen. Das passt, oder? Außerdem habe ich den Else Teil mit der MsgBox "Datei nicht gefunden" abgewandelt. Ich habe ein Exit Sub verwendet, anstelle der MsgBox. Andernfalls bekommt man für jeden Eintrag in Spalte AL die Info, dass die Datei nicht gefunden wurde, wenn die Dateien bereits umgewandelt wurden. Nun schließt sich das Programm einfach mit der Info, dass 0 Dateien umbenannt wurden.
Vielen vielen Dank für deine Unterstützung!
Prima. Danke für die Rückmeldung.
08.12.2021 15:17:00
UweD
Ja, Long ist ok.
LG UweD
Update..
08.12.2021 12:41:19
UweD
Hallo nochmal
"Set FSO = Nothing" muss verschoben werden.

'Umbenennen und verschieben
FSO.MoveFile Datei, PfadNeu & DatNeu
End If
Next
End If
Set FSO = Nothing
End Sub
LG UweD
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige