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

Forumthread: VBA pdf erstellen mit OneDrive

VBA pdf erstellen mit OneDrive
08.03.2022 09:27:49
Stefan
Hallo zusammen,
Leider habe ich folgendes Problem in einer Arbeitsmappe. Durch Klicken eines Buttons wird die Excel zuerst gespeichert und dann ein PDF erstellt, welches an eine Email angehängt wird. Bevor unsere Firmen PCs auf OneDrive umgestellt wurden, wurde durch den Befehl "kill pdf" die PDF anschließend gelöscht. Mittlerweile kommt ein "Laufzeitfehler 53 - Datei nicht gefunden" und die erstellte pdf ist auch auf dem Desktop zu finden.
Wichtiger Hinweis: der Code soll für beide User "nicht-OneDrive" und "OneDrive" funktionieren. Kann wer helfen? Hier der aktuelle Code:

Sub Save_and_Send()
Dim c As Comment
For Each c In ActiveSheet.Comments
c.Visible = False
Next
ActiveWorkbook.Save 'letzten Stand speichern
Dim pdf As String
pdf = pdf_erstellen
Call permail(pdf)
Kill (pdf) 'pdf wieder löschen
End Sub

Function pdf_erstellen()
Dim pdf As String
Dim sep As String
sep = Application.PathSeparator
pdf = ThisWorkbook.Path & sep & ActiveSheet.Range("E3").Value & ActiveSheet.Range("J3").Value & ".pdf"
'ThisWorkbook.Path & sep & ThisWorkbook.name & ".pdf" 'Speicherpfad
If Sheets("Tabelle3").Visible = xlSheetVisible Then
Sheets(Array("Tabelle1", "Tabelle2", "Tabelle3")).Select
Else
Sheets(Array("Tabelle1", "Tabelle2")).Select
End If
On Error Resume Next
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdf, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
On Error GoTo 0
pdf_erstellen = pdf
Sheets("Tabelle1").Select 'Gruppierung aufheben
End Function
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA pdf erstellen mit OneDrive
08.03.2022 16:25:51
Yal
Hallo Stefan,
dann baue deine eigene Kill-Funktion:

Sub MyKill(DateiPfad As String)
'Version Early Binding mit Verweis auf "Microsoft Scripting Runtime"
'Dim FSO As Object
'    Set FSO = New FileSystemObject
'Version Late Binding (ohne "Extras", "Verweise.." )
Dim FSO As FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
'Datei löschen (beide Version gleich)
FSO.GetFile(DateiPfad).Delete True
End Sub
VG
Yal
Anzeige
AW: VBA pdf erstellen mit OneDrive
09.03.2022 10:23:38
Stefan
Danke Yal für deine Hilfe.
Pdf wird nun an die Mail angehängt und anschließend auch ge-killed.
Allerdings kommt folgender Fehler:
Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert.
FSO As FileSystemObject ist dabei blau hinterlegt.
Kannst du helfen?
AW: VBA pdf erstellen mit OneDrive
09.03.2022 10:29:21
Stefan
... sorry, muss mich korrigieren, das pdf wird doch nicht ge-killed und erscheint auf dem Desktop.
Anzeige
AW: VBA pdf erstellen mit OneDrive
09.03.2022 12:18:26
Yal
Hallo Stefan,
Du hast natürlich sofort gegoogelt, was Early und Late Binding ist, und könnte sofort verstehen, was
Verweis auf "Microsoft Scripting Runtime"
bedeutet.
Daher meine Verwechselung korrigieren:

Sub MyKill(DateiPfad As String)
'Version Early Binding mit Verweis auf "Microsoft Scripting Runtime"
'Dim FSO As FileSystemObject
'    Set FSO = New FileSystemObject
'Version Late Binding (ohne "Extras", "Verweise.." )
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
'Datei löschen (beide Version gleich)
FSO.GetFile(DateiPfad).Delete True
End Sub
VG
Yal
Anzeige
AW: VBA pdf erstellen mit OneDrive
09.03.2022 12:41:48
Stefan
Habe tatsächlich gegoogelt und habe das dann auch mit dem Early und Late binding verstanden. Habe mich dann bewusst für Late Binding entschieden, da ich nicht jedem User dieser Arbeitsmappe zumuten kann, dass der MS Scripting Runtime Verweis aktiviert wird.
Der "Tippfehler" ist mir leider nicht aufgefallen, da sind meine VBA Kennnisse zu schlecht.
Danke dir. Jetzt funktioniert alles.
Anzeige
Vielen Dank für die Rückmeldung
09.03.2022 13:30:29
Yal
Hallo Stefan,
mit der Bitte für die Entschuldigung für meine Untertöne. Ich übersehe manchmal, dass was ich als einfach einstufe, eigentlich für "noch nicht fortgeschrittenen" gar nicht so selbstredend.
Das Einbinden von einer Bibliothek wird nur einmal von dem Entwickler vorgenommen. Anschliessend ist es im Code definiert (wenn auch nicht sichtbar), dass die Bib angebunden ist, und der Enduser muss nichts anderes machen, als den Code anzustossen in dem er irgendwo einen Knopf anklickt (oder Alt+F8, Makro auswählen).
Ich empfehle den Early Binding, weil dann stehen die Methode/Eigenschaften des Objektes per Intellisense (Strg+Leertaste) beim Programmieren zur Verfügung. Auch in der Objektkatalog (F2 oder Ansicht, Objektkatalog) ist die Bibliothek sichtbar. Es ist für ein schnelleres Verstehen von VBA hilfreich.
VG
Yal
Anzeige
AW: Vielen Dank für die Rückmeldung
09.03.2022 13:39:36
Stefan
Kein Problem und danke nochmal für deine Feedback und die Empfehlung zwecks Early Binding.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

PDF mit Excel VBA und OneDrive erstellen


Schritt-für-Schritt-Anleitung

Um ein PDF mit Excel VBA zu erstellen und in OneDrive zu speichern, kannst du den folgenden Ablauf verwenden:

  1. Speichere die Arbeitsmappe: Stelle sicher, dass die Arbeitsmappe gespeichert ist, bevor du eine PDF erstellst. Dies geschieht mit ActiveWorkbook.Save.

  2. Erstelle eine Funktion für das PDF: Nutze die ExportAsFixedFormat-Methode, um das PDF zu erstellen. Achte darauf, den Speicherort korrekt anzugeben, insbesondere wenn du mit OneDrive arbeitest.

    Function pdf_erstellen()
        Dim pdf As String
        Dim sep As String
        sep = Application.PathSeparator
        pdf = ThisWorkbook.Path & sep & ActiveSheet.Range("E3").Value & ActiveSheet.Range("J3").Value & ".pdf"
    
        If Sheets("Tabelle3").Visible = xlSheetVisible Then
            Sheets(Array("Tabelle1", "Tabelle2", "Tabelle3")).Select
        Else
            Sheets(Array("Tabelle1", "Tabelle2")).Select
        End If
    
        On Error Resume Next
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdf, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        On Error GoTo 0
        pdf_erstellen = pdf
        Sheets("Tabelle1").Select
    End Function
  3. Versende die PDF per E-Mail: Verwende eine Routine, um das PDF als Anhang zu einer E-Mail hinzuzufügen.

  4. Lösche die PDF nach dem Senden: Um die PDF nach dem Senden zu löschen, kannst du eine eigene Kill-Funktion verwenden:

    Sub MyKill(DateiPfad As String)
        Dim FSO As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")
        FSO.GetFile(DateiPfad).Delete True
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler 53 - Datei nicht gefunden: Überprüfe, ob der Pfad korrekt ist. Wenn du mit OneDrive arbeitest, musst du sicherstellen, dass der Pfad korrekt auf den OneDrive-Ordner verweist.

  • Benutzerdefinierter Typ nicht definiert: Dies kann auftreten, wenn FileSystemObject nicht korrekt deklariert ist. Verwende Late Binding, um sicherzustellen, dass der Code auf jedem Computer funktioniert:

    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")

Alternative Methoden

Wenn der direkte Export als PDF nicht funktioniert, kannst du auch in Betracht ziehen, die Datei in einem temporären Verzeichnis zu speichern und dann zu verschieben. Ein Beispiel wäre:

pdf = Environ("TEMP") & sep & ActiveSheet.Range("E3").Value & ActiveSheet.Range("J3").Value & ".pdf"

Danach kannst du die Datei in den OneDrive-Ordner verschieben.


Praktische Beispiele

  1. Serienbrief als PDF speichern: Du kannst den oben genannten Code anpassen, um einen Serienbrief als PDF zu speichern. Stelle sicher, dass die entsprechenden Daten in den Zellen verfügbar sind.

  2. PDF in OneDrive speichern: Achte darauf, dass der Pfad zu deinem OneDrive-Ordner korrekt ist. Beispiel:

    pdf = "C:\Users\DeinBenutzername\OneDrive\Documents\" & ActiveSheet.Range("E3").Value & ".pdf"

Tipps für Profis

  • Nutze Intellisense: Wenn du Early Binding verwendest, stehen dir die Methoden und Eigenschaften des FileSystemObject zur Verfügung, was die Programmierung erleichtert.

  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung, um sicherzustellen, dass dein Code auch bei unerwarteten Situationen stabil bleibt.


FAQ: Häufige Fragen

1. Wie speichere ich ein PDF in OneDrive?
Verwende den vollständigen Pfad zu deinem OneDrive-Ordner, z.B. C:\Users\DeinBenutzername\OneDrive\Documents\.

2. Was ist der Unterschied zwischen Early und Late Binding?
Early Binding erfordert das Setzen eines Verweises auf die Bibliothek, während Late Binding dies nicht tut. Late Binding macht deinen Code flexibler, da er auf verschiedenen Systemen ohne zusätzliche Einstellungen funktioniert.

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