Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1348to1352
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

VBA Dateinamen für Batch anpassen

VBA Dateinamen für Batch anpassen
13.02.2014 11:42:07
Andy
Hallo zusammen,
ich möchte gerne mit der folgenden Funktion per Batch PDF Dateien aus einem Ordner in einer neuen Datei zusammenfügen.

Option Explicit
Sub Aufruf_mergePDFviaGhostScript()
Call mergePDFviaGhostScript("C:\Users\Public\Testdaten\PDF\", "C:\Users\Public\Testdaten\ _
PDFmerge.pdf")
End Sub
Function mergePDFviaGhostScript(ByVal original_PDF_Ordner As String, ByVal  _
Dateiname_und_Pfad_PDFmerge As String)
Dim PDFdatei2merge, batch_mergePDFviaGhostScript As String
Dim PDFdatei As File
Dim Erstellen As Long
For Each PDFdatei In GetFiles(original_PDF_Ordner, True, "*.pdf")
PDFdatei2merge = PDFdatei2merge & " " & PDFdatei.Path 'Dateinamen für Batch zusammensetzen
Erstellen = 1 'Freigabe für Batch
Next
If Erstellen = 1 Then
batch_mergePDFviaGhostScript = "C:\Program Files\gs\gs9.04\bin\gswin32c.exe -dNOPAUSE - _
sDEVICE=pdfwrite -sOUTPUTFILE=" & Dateiname_und_Pfad_PDFmerge & " -dBATCH" & PDFdatei2merge
Call Shell(batch_mergePDFviaGhostScript)
Else
MsgBox "Keine PDF-Dateien zum zusammenfügen vorhanden!", vbCritical, " _
mergePDFviaGhostScript"
End If
End Function

Das Script funktioniert auch soweit. Jedoch läuft es nicht, wenn in einem Dateinamen ein Leerzeichen enthalten ist (im Batch-Befehl werden die Dateinamen der Dateien, die zusammengeführt werden, durch Leerzeichen getrennt
Beispiel Batch:
C:\Program Files\gs\gs9.04\bin\gswin32c.exe -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=E:\Ausgabe.pdf -dBATCH E:\1.pdf E:\2.pdf
).
Wie kann man so ein Problem am besten umgehen? Dazu habe ich mir zwei Ansätze überlegt:
1.) Dateinamen auslesen - Dateinamen zwischenspeichern - Datei für die Funktion umbennnen - anschließened Originaldateinamen wieder herstellen
2.) Kopie in einem temporärem Verzeichnis erstellen - Datei umbennen - Funktion ausführen - tempöräre Daten löschen
Oder geht so etwas evtl. über einen anderen Ansatz viel einfacher.
Über eine Hilfestellung wäre ich sehr dankbar.
Gruß Andy

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Dateinamen für Batch anpassen
13.02.2014 15:10:47
EtoPHG
Hallo Andy,
Setze einfach mal "Quotes Datei Name.pdf" vor und hinter den Dateinamen.
Gruess Hansueli

AW: VBA Dateinamen für Batch anpassen
13.02.2014 16:35:22
Andy
Hallo Hansueli,
wenn ich den Dateinamen in "" setzen funktioniert der Batchbefehl nicht mehr.
Gruß Andy

AW: VBA Dateinamen für Batch anpassen
13.02.2014 16:50:46
EtoPHG
Hallo Andy,
Na ja, ein Versuch war's wert ;-)
Dieser Code ist von FreeVBCode
Option Explicit
Private Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As Long) _
As Long
Public Function GetShortFileName(ByVal FullPath As String) _
As String
'PURPOSE: Returns DOS File Name (8.3 Format) Give
'FullPath for long file name
'PARAMETERS: FullPath: Full Path of Original File
'RETURNS: 8.3 FileName, or "" if FullPath doesn't
'         exist or file fails for other reasons
'EXAMPLE:
'Debug.Print _
'  GetShortFileName("C:\My Documents\My Very Long File Name.doc")
'If file exists, will display C:\MYDOCU~1\MYVERY~1.DOC
'in the debug window
Dim lAns As Long
Dim sAns As String
Dim iLen As Integer
On Error Resume Next
'this function doesn't work if the file doesn't exist
If Dir(FullPath) = "" Then Exit Function
sAns = Space(255)
lAns = GetShortPathName(FullPath, sAns, 255)
GetShortFileName = Left(sAns, lAns)
End Function

Du könntest als über diese Funktion die vollen Dateinamen in eine DOS 8.3 Filenamen umzuwandeln und versuchen ob Ghostscript damit zurecht kommt.
Gruess Hansueli

Anzeige
Funktioniert! Danke für den Hinweis!
15.02.2014 10:04:11
Andy
Hallo Hansueli,
danke für den Hinweis.
Es hat funktioniert.
Gruß Andy

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige