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

Forumthread: Excel als PDF speichern / Pfad zu lang

Excel als PDF speichern / Pfad zu lang
10.10.2018 15:08:24
Christian
Hallo,
ich habe mir über den Makrorecorder den VBA Code für das Abspeichern der Seite als PDF erzeugt:

Dim strPathFile as String
Dim Path as String
Path = "[mein Netzwerkpfad]\"
strPathFile = Path & ThisWorkbook.Name
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strPathFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True

In der Regel hat dieser Code auch wunderbar funktioniert, aber teilweise kam Laufzeitfehler '5'.
Dieser Fehler wird scheinbar dann hervorgerufen, wenn meine String "strPathFile" 214 Zeichen überschreitet (durch Ausprobieren ermittelt).
In der Regel sind die Pfade zwischen 200-230 Zeichen lang, was durch einen verschachtelten Netzwerkpfad bedingt ist.
Die Datei lässt sich aber auf herkömmlichen Weg normal als PDF unter dem Pfad abspeichern.
Der Parameter "Filename" der "ExportAsFixedFormat" Methode ist laut Microsofthilfe "Variant".
Lässt sich hier durch eine Deklarierung oder ähnliches dieser Fehler umgehen?
Ansonsten werde ich wohl einen aufwändigen Workaround machen müssen.
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel als PDF speichern / Pfad zu lang
10.10.2018 19:56:21
onur
Poste mal die Datei oder zumindest den Pfad und den kompletten Code.
AW: Excel als PDF speichern / Pfad zu lang
11.10.2018 09:35:35
Christian
Hallo,
der Code kann mehr oder weniger auf das angegebene Beispiel runtergebrochen werden.
Da es sich um ein Netzwerkpfad meiner Firma handelt, ändere ich den Pfad aus Datenschutzgründen auf ein Beispiel ab. Das Verhalten des Makros wird dadurch nicht beeinflusst.
Sub save_pdf()
Dim strPathFile As String
Dim Path As String
Path = "C:\Unterordner 1\Unterordner 2\Unterordner 3\Unterordner 4\" _
& "Unterordner 5\Unterordner 6\Unterordner 7\Unterordner 8\" _
& "Unterordner 9\Unterordner 10\Worksheet PDF Archiv\" '
'= 164 Zeichen
'ThisWorkbook.Name = Microsoft Excel Worksheet Testdatei als PDF abspeichern.xlsx
'= 60 Zeichen
strPathFile = Path & ThisWorkbook.Name
'= 224 Zeichen
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strPathFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End Sub
Bei diesem Code bekomme ich
"Laufzeitfehler '5' - Ungültiger Prozeduraufruf oder ungültiges Argument"

Sobald ich den Speicherpfad um einen Unterordner verkürze, funktioniert das Makro, da die Zeichenfolge unter 214 Zeichen fällt.
Anzeige
AW: Excel als PDF speichern / Pfad zu lang
11.10.2018 10:01:00
Christian
Häkchen für "offene Frage" vergessen :)
AW: Excel als PDF speichern / Pfad zu lang
11.10.2018 10:03:46
Robert
Hallo Christian,
das Problem mit dem zu langen Namen (einschl. Pfad) kannst Du umgehen, indem Du vor dem Speichern-Befehl in das entsprechende Verzeichnis wechselst und dann den Dateinamen ohne Pfadangabe eingibst. In Deinem Beispiel also so (Änderungen/Ergänzungen in rot):
Sub save_pdf()
Dim strPathFile As String
Dim Path As String, PathOld As String
Path = "C:\Unterordner 1\Unterordner 2\Unterordner 3\Unterordner 4\" _
& "Unterordner 5\Unterordner 6\Unterordner 7\Unterordner 8\" _
& "Unterordner 9\Unterordner 10\Worksheet PDF Archiv\" '
'= 164 Zeichen
'ThisWorkbook.Name = Microsoft Excel Worksheet Testdatei als PDF abspeichern.xlsx
'= 60 Zeichen
strPathFile = Path & ThisWorkbook.Name
'= 224 Zeichen
PathOld = CurDir
ChDir Left(Path, Len(Path) - 1)
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ThisWorkbook.Name, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
ChDir PathOld
End Sub

Anzeige
AW: Excel als PDF speichern / Pfad zu lang
11.10.2018 10:14:39
Christian
Hallo Robert,
danke für deinen Lösungsvorschlag, aber ich bekomme immer noch den selben Fehler.
Kürze ich einen Unterordner weg, funktioniert auch deine Version.
Gruß Christian
AW: Excel als PDF speichern / Pfad zu lang
11.10.2018 17:50:29
onur

Sub save_pdf()
Dim strPathFile As String
Dim Path As String
Dim arr, i, OldPath
OldPath = CurDir
Path = "C:\Unterordner 1\Unterordner 2\Unterordner 3\Unterordner 4\" & "Unterordner 5\ _
Unterordner 6\Unterordner 7\Unterordner 8\" _
& "Unterordner 9\Unterordner 10\Worksheet PDF Archiv\" '
'= 164 Zeichen
arr = Split(Path, "\")
For i = 0 To UBound(arr) - 1
ChDir arr(i) + "\"
Next i
strPathFile = ThisWorkbook.Name
'= 224 Zeichen
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPathFile, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
ChDir OldPath
End Sub

Anzeige
AW: Excel als PDF speichern / Pfad zu lang
15.10.2018 08:38:20
Christian
Hallo onur,
deine Lösung funktioniert leider ebenfalls nicht für zu lange Pfadnamen.
Trotzdem Danke für deinen Vorschlag.
AW: Excel als PDF speichern / Pfad zu lang
15.10.2018 18:31:28
onur
Bei Windows 10 Pro kannst du die max. Pfadlänge unter Gruppenrichtlinien ändern (lassen).
AW: Excel als PDF speichern / Pfad zu lang
16.10.2018 09:37:00
Christian
Ich habe auf dem Arbeitsrechner leider nur Win7 ohne Adminrechte ;)
Anzeige
Hier kannst Du auf eine alte...
15.10.2018 09:59:17
Case
Hallo, :-)
... "Dos-Funktion" Namens "subst" zurückgreifen: ;-)
XCOPY - SHELL und ein paar Dinge mehr...
In der "Sub Main_2()" siehst Du wie das funktioniert. Du arbeitest dann mit einem virtuellen Laufwerk, welches Du am Ende mit "Sub Main_3()" wieder auflöst.
Servus
Case

Anzeige
Excel als PDF speichern / Pfad zu lang
15.10.2018 14:48:01
Anton
Hallo Christian,
vielleicht hilft dir das hier weiter.
mfg Anton
strPathFile = "b:\" & ThisWorkbook.Name & ".pdf"oT
15.10.2018 15:03:12
Anton
AW: strPathFile = "b:\" & ThisWorkbook.Name & ".pdf"oT
16.10.2018 10:32:20
Christian
Hallo Anton,
dein Vorschlag mit dem verbundenen Netzwerkpfad funktioniert!
Ich musste nur die Fehlermeldung deaktivieren, sonst bekomme ich immer die Meldung, dass die Netzwerkbezeichnung bereits existiert.
Scheinbar funktioniert das direkte Trennen nicht direkt.
Der Befehl zum Trennen funktioniert erst einige Sekunden später - bis dahin bekomme ich
"Laufzeitfehler '-2147022495 (80070961)' Automatisierungsfehler Es warten noch offene Dateien oder Anforderungen auf dieser Netzwerkverbindung"

Sub b()
Dim objNetzwerk As Object
Dim strServerpfad As String, strBenutzername As String, strPasswort As String
Set objNetzwerk = CreateObject("WScript.Network")
strServerpfad = "[...Netzwerkpfad...]"
'Netzwerk verbinden
On Error Resume Next
objNetzwerk.MapNetworkDrive "b:", strServerpfad ', , strBenutzername, strPasswort
'  If Err.Number Then
'    MsgBox Err.Description
'  Else
ChDrive ("b:\")
'MsgBox "Verbunden"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPathFile, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False,  _
OpenAfterPublish:=True
'  End If
ChDrive ("c:\") 'wichtig!sonst funktioniert das Trennen nicht!
'Netzwerk trennen
objNetzwerk.RemoveNetworkDrive "b:"
Set objNetzwerk = Nothing
End Sub

Anzeige
Wenn Du mit...
16.10.2018 12:59:29
Case
Hallo, :-)
..."Subst" arbeitest, kannst Du sofort trennen. ;-)
Servus
Case

AW: Wenn Du mit...
16.10.2018 13:07:40
Christian
Hallo Case/Ralf,
ich habe mir deinen Link auch angeschaut.
Deine Lösung ist wahrscheinlich noch sauberer, aber hier muss ich mich mit meinem Kenntnis Level erstmal einarbeiten. Ich probiere es auf alle Fälle noch aus.
Deine anderen Blogeinträge werden wahrscheinlich auch noch hilfreich werden in Zukunft ;)
Danke.
Anzeige
AW: strPathFile = "b:\" & ThisWorkbook.Name & ".pdf"oT
16.10.2018 17:23:37
Anton
Hallo Christian,
vielleicht reicht es schon OpenAfterPublish:=True auf False zu setzen.
mfg Anton
AW: Excel als PDF speichern / Pfad zu lang
16.10.2018 09:38:09
Christian
Hallo Anton,
dein Beitrag sieht vielversprechend aus!
Ich werde versuchen dass umzusetzen.
Danke
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel als PDF speichern: Probleme mit zu langen Pfaden lösen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Starte Excel und öffne den VBA-Editor mit ALT + F11.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste im Projektfenster und wähle Einfügen > Modul.

  3. Code einfügen: Füge den folgenden VBA-Code ein, um die aktive Tabelle als PDF zu speichern:

    Sub save_pdf()
        Dim strPathFile As String
        Dim Path As String
        Dim PathOld As String
    
        Path = "C:\Unterordner 1\Unterordner 2\...\Worksheet PDF Archiv\"
        strPathFile = ThisWorkbook.Name
    
        'Verzeichnis wechseln
        PathOld = CurDir
        ChDir Left(Path, Len(Path) - 1)
    
        ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=strPathFile, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    
        'Zurückwechseln
        ChDir PathOld
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus.


Häufige Fehler und Lösungen

  • Laufzeitfehler '5' - Ungültiger Prozeduraufruf: Dieser Fehler tritt häufig auf, wenn der Pfad zu lang ist. Der maximale Pfad in Windows 10 liegt bei 260 Zeichen. Umgehungen sind:

    • Verwende die ChDir-Methode, um in das Verzeichnis zu wechseln, bevor du die Datei speicherst.
    • Verkürze den Speicherpfad, um die Zeichenanzahl zu reduzieren.
  • Netzwerkpfad-Probleme: Wenn du mit Netzwerkpfaden arbeitest, kann es helfen, den Pfad vor dem Speichern zu verbinden oder temporäre Laufwerke zu erstellen.


Alternative Methoden

  1. Virtual Drives: Du kannst ein virtuelles Laufwerk mit dem Befehl subst erstellen, um lange Pfade zu vermeiden. Beispiel:

    Sub MapDrive()
        Dim objNetzwerk As Object
        Set objNetzwerk = CreateObject("WScript.Network")
        objNetzwerk.MapNetworkDrive "Z:", "C:\Langer\Pfad\Zu\Deinem\Ordner"
    End Sub
  2. Windows-Gruppenrichtlinien: Bei Windows 10 Pro kannst du die maximale Pfadlänge in den Gruppenrichtlinien erhöhen.


Praktische Beispiele

  • PDF als ausfüllbares Formular speichern: Um eine Excel-Datei als ausfüllbares PDF zu speichern, verwende den folgenden Code:

    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\Pfad\zu\deiner\Datei.pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
  • Excel-Datei in PDF umwandeln: Der Prozess der Umwandlung erfolgt mit der ExportAsFixedFormat-Methode, die in vielen Excel-Versionen wie Windows 10 funktioniert.


Tipps für Profis

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Makro, um spezifische Fehlermeldungen anzuzeigen und die Benutzererfahrung zu verbessern.

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Makros automatisieren: Setze Makros an bestimmte Ereignisse (z.B. beim Schließen der Datei) um, um den Prozess zu automatisieren.


FAQ: Häufige Fragen

1. Wie kann ich die maximale Pfadlänge in Windows 10 ändern?
Bei Windows 10 Pro kannst du dies über die Gruppenrichtlinien tun. Suche nach dem Eintrag “Lange Pfade aktivieren”.

2. Was macht die Methode ActiveSheet.ExportAsFixedFormat?
Diese Methode exportiert das aktive Arbeitsblatt in ein festes Format, in der Regel PDF oder XPS. Sie ist essenziell, um Excel-Dateien in PDF umzuwandeln.

3. Kann ich ein Excel-Makro zur PDF-Speicherung für mehrere Blätter verwenden?
Ja, du kannst eine Schleife in dein Makro einfügen, um alle gewünschten Blätter der Arbeitsmappe zu exportieren.

4. Wie speichere ich eine Excel-Datei als ausfüllbares PDF?
Verwende die ExportAsFixedFormat-Methode mit den entsprechenden Parametern, um ein interaktives PDF zu erstellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige