PDF Save

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Sam85.

    Hallöchen,

    ich habe eine kurze Frage:

    Ich habe ein Modul das zum Speichern in das PDF Format verwendet wird. Nun wollte ich das so erweitern, dass alle Tabellenblätter davon erfasst werden.

    Gefunden habe ich dazu folgende ungetestete Idee und meine daraus resultierende Frage:
    Kann ich das xyz umformen in ein "erkenne alle Blätter" ?

    Freue mich über eine Rückmeldung.

    VB.NET-Quellcode

    1. [Ungetestete Idee]
    2. Sheets(Array("x", "y", "z")).Select


    VB.NET-Quellcode

    1. [Umformung]
    2. dim i as variant, y as integer
    3. y = ActiveWorkbook.Worksheets.Count
    4. For i = 1 to y
    5. Sheets(Array(ActiveWorkbook.Sheets(i))).Select
    6. Next i
    7. End Sub



    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Explicit
    2. Sub PDF_AutoSave()
    3. Dim Dateiname As String, Speicherort As String, Sicherheitsabfrage As Long, Vorhanden As String, Name As String
    4. Name = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)
    5. Dateiname = Name & ".pdf"
    6. Speicherort = Application.ActiveWorkbook.Path & "\" & Dateiname
    7. Sicherheitsabfrage = MsgBox("Möchtest du das Dokument jetzt abspeichern?", vbYesNo)
    8. Vorhanden = Dir(Speicherort)
    9. Select Case Sicherheitsabfrage 'Erste Abfrage: Speichern
    10. Case vbYes
    11. If Len(Vorhanden) <> 0 Then 'Prüfen: Datei ist noch nicht vorhanden
    12. If MsgBox("Möchtest du das Dokument wirklich überschreiben?", vbYesNo) = vbYes Then 'Zweite Abfrage: Überschreiben
    13. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Speicherort, Quality:=xlQualityStandard, _
    14. IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    15. End If
    16. Else 'Prüfen: Datei ist schon vorhanden
    17. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Speicherort, Quality:=xlQualityStandard, _
    18. IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    19. End If
    20. Case vbNo
    21. Exit Sub
    22. End Select
    23. End Sub


    Klar, kein Problem. Ab Zeile 17 (bzw. 21) Deines Spoilers statt mit ActiveSheet zu arbeiten, einfach ne For-Each-Schleife machen und alle Sheets einzeln abspeichern:

    Visual Basic-Quellcode

    1. For Each SheetInTable In Sheets
    2. FileNameForSheet = Application.ActiveWorkbook.Path & "\" & Dateiname & " - " & SheetInTable.Name & ".pdf"
    3. Blatt.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FileNameForSheet, Quality:=xlQualityStandard, _
    4. IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    5. Next
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für die Rückmeldung VaporiZed, werde es gleich ausprobieren.

    Werden die dann auch in ein PDF zusammengefügt? Oder alle getrennt?

    PS: Definiere ich SheetInTable als Variant? Und Blatt ist dann einfach FileNameForSheet?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sam85“ ()

    Hallo,

    die gesamte Mappe geht doch auch einfacher.

    Visual Basic-Quellcode

    1. ActiveWorkbook.ExportAsFixedFormat xlTypePDF, Dateiname, xlQualityStandard, True, False, , , False
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Habe es nun getestet, ist nicht ganz das, was ich gemeint hatte. Ich wollte alle Tabellenblätter in ein PDF, nicht getrennt. Muss ich das dann über einen Array ausführen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sam85“ ()

    Hallo,

    ich habe es so versucht aber das klappt leider nicht :thumbdown: ...kann mir jemand auf die Sprünge helfen, wie ich den Array zusammen bekomme?!
    Freue mich über Feedback.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Explicit
    2. Sub PDF_AutoSaveAll()
    3. Dim Dateiname, Speicherort, Vorhanden, Name As String, Sicherheitsabfrage As Long, i As Variant, y As Integer
    4. y = ActiveWorkbook.Worksheets.Count
    5. Name = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)
    6. Dateiname = Name & ".pdf"
    7. Speicherort = Application.ActiveWorkbook.Path & "\" & Dateiname
    8. Sicherheitsabfrage = MsgBox("Möchtest du das Dokument jetzt abspeichern?", vbYesNo)
    9. Vorhanden = Dir(Speicherort)
    10. Select Case Sicherheitsabfrage 'Erste Abfrage: Speichern
    11. Case vbYes
    12. If Len(Vorhanden) <> 0 Then 'Prüfen: Datei ist noch nicht vorhanden
    13. If MsgBox("Möchtest du das Dokument wirklich überschreiben?", vbYesNo) = vbYes Then 'Zweite Abfrage: Überschreiben
    14. For i = 1 To y
    15. Sheets(Array(Worksheets(i).Name)).Select
    16. Next i
    17. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Speicherort, Quality:=xlQualityStandard, _
    18. IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    19. End If
    20. Else 'Prüfen: Datei ist schon vorhanden
    21. For i = 1 To y
    22. Sheets(Array(Worksheets(i).Name)).Select
    23. Next i
    24. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Speicherort, Quality:=xlQualityStandard, _
    25. IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=False
    26. End If
    27. Case vbNo
    28. Exit Sub
    29. End Select
    30. End Sub

    Ach, alles in einer Datei. Nun, dann passt aber die Antwort von peterfido. Jedes Sheet kommt auf eine neue Seite in der selben Datei. Oder was passt daran nicht? (Wo) Kommt ein Fehler? Oder ist das Endergebnis nicht das, was Du willst? Dann brauchen wir die Info, wie das Ergebnis stattdessen aussehen soll.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ahh sorry, ich hab das noch nicht getestet, dachte er hat es auf deinen Post bezogen.
    Deine Alternative behalte ich mir auch vor. :)..für eine andere Situationen. Vielen Dank für das Feedback, melde mich nochmal wenn ich es getestet habe.
    Vielen Dank für die Hilfestellung, beide Varianten erfüllen perfekt Ihren Zweck. :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sam85“ ()