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

Forumthread: Export einzelner Zeilen in PDF Datei

Export einzelner Zeilen in PDF Datei
15.06.2018 09:05:35
Klaus
Hi,
vielleicht habt Ihr ja eine Ahnung wieso dass nicht so will wie ich es brauch?
Also der Code stellt einfach nur einen Export der einzelnen Zeilen in Excel da (begrenzt auf Zeile 2 bis 11). Und alles wird dort gespeichert wo die Excel Datei liegt.
Jetzt das Problem:
Führe ich dieses Makro unter Office 2016 16.0.9330.2073 64 Bit mit MS VBA 7.1 auf einen Windows 10 Rechner aus, funktioniert er einwandfrei.
Führe ich aber nun das Makro, gleiche Datei in der Office Version (16.0.4639.1000) 32 Bit mit MS VBA 7.1 unter Windows 7 aus kommt die Fehlermeldung:
LaufzeitFehler 32809: Anwenndungs oder objektdefinierter Fehler
und er Markiert mir die Zeile "With .PageSetup"
Auch die Zeilen "BringThisWindowToTop=True" versteht er nicht.
Ich hab absolut keine Ahnung warum und hoffe auf eure Unterstützung
In der Userform:
Private Sub StartExport_Click()
Dim zeit As Date
Dim i As Integer
Dim j As Integer
Dim start As Date
start = Now()
Fortschritt.ProgressBar1.Max = 100
For i = 2 To 11
j = (10 / 100) * (i - 1) * 100
Fortschritt.ProgressBar1.Value = j
Fortschritt.Caption = (i - 1) & "fertig"
' BringThisWindowToTop = True
If Range("A" & i).Value = "" Then
GoTo A
End If
With ActiveSheet
With .PageSetup
.PrintTitleRows = "$1:$1"
.PrintArea = "A" & i & ":" & "L" & i
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
'.PrintOut
'.PrintPreview
.ExportAsFixedFormat Filename:=ActiveWorkbook.Path & "\" & i & Range("A" & i), Type: _
=xlTypePDF
End With
GoTo A
A:
Next i
Application.DisplayAlerts = True
Application.Visible = True
Application.ScreenUpdating = True
zeit = Now() - start
MsgBox zeit
End Sub
Im Modul1:
Sub ExportjedeZeile()
' Tastenkombination: Strg+j
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Visible = False
Application.ScreenUpdating = True
Fortschritt.Show
End Sub
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Export einzelner Zeilen in PDF Datei
16.06.2018 20:22:53
fcs
Hallo Klaus,
ich hab jetzt mal deine Makros unter Windows 10 und Office 365, Excel 2016 (32 Bit) getestet.
Das Ausblenden der Excel-Anwendung vor der Anzeige des Userforms und die Wiederanzeige nach dem Schließen der Userform führt bei mir zu einer merkwürdigen Anzeige von leeren Excel-Fenstern.
Ich hab das deshalb rausgenommen. Die Userform wird jetzt auf die Größe und Position des Excel-Fensters angepasst. Ebenso die Breite der Progressbar.
Ob man die Userform gebunden oder ungebunden anzeigt spielt hier keine Rolle.
Allerdings kommt manchmal im Userform die Anzeige "keine Rückmeldung" im Userform.Titel und die Anzeige bricht zusammen - wird zum Schluss aber wieder angezeigt..
Ursache?
BringThisWindowToTop scheint eine Funktion in der 64-bit-Version zu sein, die von der 32-Bit-Version nicht unterstützt wird.
Spielt für dieses Makro aber eigentlich keine Rolle, denn Excel ist ja die aktive Anwendung, es sei denn die willst während der Erstellung der PDF-Dateien unbedingt in anderen Anwendungen arbeiten.
Gruß
Franz
'Userform-Code
Option Explicit
Private wks As Worksheet
Private Sub StartExport_Click()
Dim zeit As Date
Dim i As Integer
Dim j As Integer
Dim start As Date
start = Now()
Fortschritt.ProgressBar1.Max = 100
With wks.PageSetup
.PrintTitleRows = "$1:$1"
.PrintTitleColumns = ""
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
For i = 2 To 11
j = (10 / 100) * (i - 1) * 100
'BringThisWindowToTop = True
If Range("A" & i).Value  "" Then
With wks
With .PageSetup
.PrintArea = wks.Range("A" & i & ":" & "L" & i).Address
End With
'.PrintOut
'.PrintPreview
.ExportAsFixedFormat Filename:=ActiveWorkbook.Path & "\" _
& i & .Range("A" & i), Type:=xlTypePDF
End With
End If
Fortschritt.ProgressBar1.Value = j
Fortschritt.Caption = (i - 1) & " fertig"
Fortschritt.Repaint
Next i
zeit = Now() - start
MsgBox zeit
End Sub
Private Sub UserForm_Initialize()
'Tabellenblatt mit den zu exportierenden Daten setzen
Set wks = ActiveSheet
'Userform auf Fenstergröße vergrößern
With ActiveWindow
Me.Top = .Top
Me.Left = .Left
Me.Height = .Height
Me.Width = .Width
End With
'Breite und Position des Forschrittbalkens anpassen
With Me.ProgressBar1
.Left = Me.Left + 20
.Width = Me.Width - 40
End With
'Schaltflächen  positionieren
With Me.StartExport
.Left = Me.Left + (Me.Width / 2 - .Width / 2)
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Me.Hide
wks.Activate
End If
End Sub


'Code in Modul1
Sub ExportjedeZeile()
' Tastenkombination: Strg+j
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
Fortschritt.Show False 'nicht gebunden anzeigen
'    Fortschritt.Show ' gebunden anzeigen
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub

Anzeige
AW: Export einzelner Zeilen in PDF Datei
16.06.2018 20:48:44
Klaus
Hey Franz,
cool danke für deinen Testversuch und die kleinen Verbesserungen.
Den Fehler mit "keine Rückmeldung" habe ich auch, auch wenn mir das auch nicht klar ist warum.
Die ersten 3 Exporte und Titelanzeige funktionieren aber die folgenden 4,5,6,7 wird die Anwendung weiß. Ab dem 8 Export wird wieder alles ordentlich angezeigt.
Auf jeden Fall sehr komisch dieses Verhalten von Office.
Danke
Anzeige
;

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

Einzelne Zeilen aus Excel in PDF exportieren


Schritt-für-Schritt-Anleitung

Um einzelne Zeilen aus Excel in eine PDF-Datei zu exportieren, kannst du das folgende VBA-Skript verwenden. Achte darauf, dass du die richtige Excel-Version nutzt, da einige Funktionen in 32-Bit und 64-Bit unterschiedlich sein können.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul, indem du mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ klickst und „Einfügen“ > „Modul“ wählst.
  3. Füge den folgenden Code in das Modul ein:
Private Sub StartExport_Click()
    Dim zeit As Date
    Dim i As Integer
    Dim j As Integer
    Dim start As Date
    start = Now()
    Fortschritt.ProgressBar1.Max = 100
    For i = 2 To 11
        j = (10 / 100) * (i - 1) * 100
        Fortschritt.ProgressBar1.Value = j
        Fortschritt.Caption = (i - 1) & " fertig"
        If Range("A" & i).Value <> "" Then
            With ActiveSheet
                With .PageSetup
                    .PrintTitleRows = "$1:$1"
                    .PrintArea = "A" & i & ":" & "L" & i
                    .FitToPagesWide = 1
                    .FitToPagesTall = 1
                End With
                .ExportAsFixedFormat Filename:=ActiveWorkbook.Path & "\" & i & Range("A" & i), Type:=xlTypePDF
            End With
        End If
    Next i
    zeit = Now() - start
    MsgBox zeit
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Füge ein UserForm hinzu, um den Export zu starten, und verknüpfe den StartExport_Click-Button mit dem entsprechenden Makro.

Häufige Fehler und Lösungen

  • Laufzeitfehler 32809: Dieser Fehler tritt häufig auf, wenn du die Funktion With .PageSetup in einer nicht unterstützten Excel-Version verwendest. Stelle sicher, dass du die richtige Excel-Version verwendest.
  • "Keine Rückmeldung": Dies kann auftreten, wenn das UserForm während des Exports nicht richtig aktualisiert wird. Überprüfe, ob du Fortschritt.Repaint im Code verwendest.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch die integrierte Exportfunktion von Excel verwenden:

  1. Wähle den Bereich, den du exportieren möchtest.
  2. Gehe zu „Datei“ > „Speichern unter“.
  3. Wähle „PDF“ als Dateiformat und speichere.

Diese Methode eignet sich für schnelle Exporte, wenn du nur einmalig Daten in eine PDF-Datei speichern möchtest.


Praktische Beispiele

Wenn du beispielsweise die Zeilen 2 bis 11 deines Excel-Dokuments als PDF exportieren möchtest, kannst du das Skript wie im ersten Abschnitt beschrieben verwenden. Die PDF-Dateien werden im gleichen Verzeichnis wie die Excel-Datei gespeichert, was den Prozess sehr übersichtlich macht.

Um den markierten Bereich als PDF zu speichern, kannst du den ExportAsFixedFormat-Befehl anpassen, um nur den aktuell ausgewählten Bereich zu exportieren.


Tipps für Profis

  • Automatisierung: Überlege, ob du die Export-Funktion in regelmäßigen Abständen automatisieren kannst, indem du sie in eine geplante Aufgabe integrierst.
  • Dateinamen dynamisch gestalten: Du kannst den Dateinamen dynamisch gestalten, indem du z.B. das aktuelle Datum oder spezifische Zellwerte in den Dateinamen einfügst. Beispiel:
.ExportAsFixedFormat Filename:=ActiveWorkbook.Path & "\" & Format(Now(), "yyyy-mm-dd") & "_" & i & ".pdf", Type:=xlTypePDF

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zeilen in einer einzigen PDF speichern?
Du kannst den PrintArea entsprechend anpassen, um mehrere Zeilen auf einmal zu exportieren, z.B. PrintArea = "$A$2:$L$11".

2. Funktioniert der Export in allen Excel-Versionen?
Nicht alle Versionen unterstützen die gleichen Funktionen. Insbesondere die Nutzung von With .PageSetup kann in älteren Excel-Versionen problematisch sein.

3. Wie kann ich den exportierten PDF-Dateinamen anpassen?
Du kannst den Dateinamen im Befehl ExportAsFixedFormat anpassen, indem du Variablen oder Zellwerte verwendest.

4. Was tun, wenn das UserForm nicht korrekt lädt?
Überprüfe den Code auf Syntaxfehler und stelle sicher, dass alle benötigten Steuerelemente im UserForm vorhanden sind.

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