8.5k Aufrufe
Gefragt in Tabellenkalkulation von kurtl Mitglied (239 Punkte)
Liebe Experten,
bei folgendem Problem möchte ich Euch um Eure geschätzte Hilfe bitten.
Ein auf der Arbeit in einer Exel Tabelle geführtes Tagebuch wird täglich um 23:59 Uhr per Makro automatisch ausgedruckt. Jetzt soll um Papier zu sparen, der tägliche Ausdruck als pdf Datei abgespeichert werden.

Die exel Tabelle heißt Funktagebuch und das Tabellenblatt, welches als pdf abgespeichert werden soll TGB.

Folgender Makroauszug den auszudruckenden bzw. in pdf umzuwandelnden
Bereich:

Sub TGB_Ausdruck()
Sheets("TGB").Select
Range("B8").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

'...jetzt der Teil, welcher den selektierten Bereich in ein pdf Dokument umwandelt.

Application.ActivePrinter = "PDFCreator auf Ne00:"
Selection.PrintOut Copies:=1, ActivePrinter:="PDFCreator auf Ne00:", _
Collate:=True
End Sub

Was jetzt noch stört ist , dass die pdf Datei den Namen der exel Tabelle trägt - nämlich "Funktagebuch". Ich möchte gerne, dass der pdf Dateiname aus der Zelle
E9 (da steht nämlich das aktuelle Datum) und H9 (da steht "Ausdruck Funktagebuch") generiert wird. Das pdf Dokument sollte also wenn es heut Abend erzeugt würde "25.01.2014 Ausdruck Funktagebuch" heißen.
Ich hoffe, es kann mir jemand weiter helfen und danke schon mal im voraus Danke für Eure Bemühungen.
Grüße Kurt

10 Antworten

0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Kurt,
versuch es mal so:
Sub TGB_Ausdruck()
Sheets("TGB").Select
Range("B8").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
'Pfad ändern
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Dokumente und Einstellungen\ Ausdruck Funktagebuch" & " " & Date, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub

Pfad ändern!

Gruß
fedjo
0 Punkte
Beantwortet von kurtl Mitglied (239 Punkte)
Hallo Fedjo,
danke erst mal für Deine Antwort.
Sorry, dass ich jetzt erst Antworte aber ich kann das nur auf der Arbeit ausprobieren, und da war ich So. nicht.
Nun zu Deinem Makro:
Es funktioniert leider nicht, aber das liegt sicherlich an meiner Inkompetenz!
Ich werd jetzt die Sache darlegen wie ich sie bzw sie nicht verstehe.
Bis hier hin,

Sub TGB_Ausdruck()
Sheets("TGB").Select
Range("B8").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
... ist alles klar

Jetzt vermisse ich Deinem Makro den Teil, der die pdf Datei erzeugt, nämlich diesen:

Application.ActivePrinter = "PDFCreator auf Ne00:"
Selection.PrintOut Copies:=1, ActivePrinter:="PDFCreator auf Ne00:", _
Collate:=True

Den habe ich erzeugt, indem ich auf "Drucken "gegangen bin aber dann in der Druckeinstellung den "PDF Creator" gewählt habe,
...funktioniert ja auch.
Jetzt schreibst Du Pfad m ändern.
Der Pfad, wo die Exel Tabelle liegt, lautet:
C:\Dokumente und Einstellungen\sprfuz\Eigene Dateien\Ausdruck Funktagebuch" & "" & Date, Quality:= _
Ich nehme an, das der Begriff \ Ausdruck Funktagebuch\vom Makro in den Dateinamen gesetzt wird.
Aber an welcher Stelle im Makro ist die Zelle E9 integriert in welcher das Datum steht?
Ich hatte das Makro jetzt wie folgt angepasst:

Sub TGB_Ausdruck_1()
Sheets("TGB").Select
Range("B8").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.ActivePrinter = "PDFCreator auf Ne00:"
Selection.PrintOut Copies:=1, ActivePrinter:="PDFCreator auf Ne00:", _
Collate:=True
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
C:\Dokumente und Einstellungen\sprfuz\Eigene Dateien\Ausdruck Funktagebuch" & "E9" & Date, Quality:= _
xlQualityStandard , IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub
...aber wie schon gesagt, es funktioniert nicht.
Der 2. teil des Makros wird rot und es wird Fehler beim Komplimieren - Syntaxfehler angezeigt.
Diejenigen mit Durchblick, werden sich totlachen über meine Inkompetenz, sorry!
Gruß Kurt
Noch eine Anmerkung: Auch wenn ich "E9" wieder entferne, von der Stelle, wo das garantiert nicht hingehört funktioniert das aucht nicht - leider.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Kurt,

versuch es mal so:

Sub TGB_Ausdruck_1()

Dim pfad As String

pfad = "C:\Dokumente und Einstellungen\sprfuz\Eigene Dateien\" & Sheets("TGB").Range("E9") & " " & Sheets("TGB").Range("H9")

Sheets("TGB").Range("B8").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pfad, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von kurtl Mitglied (239 Punkte)
Hallo M.O.,
danke auch für Dein Interesse an meinem Problem.

Dein Makro erscheint mir für meinen beschränkten Horizont auf jeden Fall einleuchtender wie das von fedjo.
Es wird die Zelle benannt, in der das Datum steht (E9) und auch die 2. Zelle (H9) in der Ausdruck Funktagebuch steht.

wenn ich Dein Makro komplett anwende, bekomme ich einen Laufzeitfehler und der unten angegebene Teil des Makros wird markiert.

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pfad, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Wenn ich diesen Teil durch den darunter stehenden ersetze, - ich nehme ja wie schon geschrieben an, dass der dienstliche Rechner diesen Code benötigt-

Application.ActivePrinter = "PDFCreator auf Ne00:"
Selection.PrintOut Copies:=1, ActivePrinter:="PDFCreator auf Ne00:", _
Collate:=True

läuft das Makro.

Es läuft dann wie folgt ab:
erst geht die Maske vom pdf creator auf, da steht schon mal als Dateinahme wieder "Funktagebuch" drin also so wie die Tabelle heißt und wenn ich dann in der Maske auf speichern klicke, geht die "windows speichern unter Maske" auf in der auch als angegebener oder vorgeschlagener Speichername "Funktagebuch steht.
So sieht das eben beschriebenes Makro aus:

Sub TGB_Ausdruck()

Dim pfad As String

pfad = "C:\Dokumente und Einstellungen\sprfuz\Eigene Dateien\" & Sheets("TGB").Range("E9") & " " & Sheets("TGB").Range("H9")

Sheets("TGB").Range("B8").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

Application.ActivePrinter = "PDFCreator auf Ne00:"
Selection.PrintOut Copies:=1, ActivePrinter:="PDFCreator auf Ne00:", _
Collate:=True

End Sub

Fazit: Die in den Zellen E9 und H9 enthaltenen Angaben, werden nicht als pfd Dateiname übernommen, sondern nach wie
vor der Tabellenname.
Gruß Kurt
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Kurt,

das Makro benutzt die Möglichkeit Excel-Dateien als PDF-Dateien zu speichern. Diese Möglichkeit gibt es aber erst seit Office 2007. Wenn das Makro bei dir einen Fehler anzeigt, dann gehe ich davon aus, dass du eine ältere Version benutzt. Wenn dein dienstlicher Rechner keine Office-Version 2007 oder später hat, dann muss man das Makro entsprechend auf den PDF-Creator anpassen.
Das ist dann leider etwas umfangreicher als in meinem Beispielcode.

Also teste das Makro erst einmal auf deinem dienstlichen Rechner und melde dich dann wieder.

Gruß

M.O.
0 Punkte
Beantwortet von kurtl Mitglied (239 Punkte)
Hallo M.O.
meine obige Ausführung bezieht sich schon auf den Test, den ich am dienstlichen Rechner durchgeführt habe.
Du hast recht, wir benutzen hier noch Office 2002.
Es läuft genau so ab, wie ich es oben 11:27 Uhr beschrieben habe.

Gruß Kurt
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Kurt,

schau mal, ob der folgende Code so passt:

Sub PrintToPDF()
'Author des Codes zum Ausdruck als PDF-Datei: Ken Puls (www.excelguru.ca)
'Ein PDF-Dokument aus Excel heraus erstellen
'Achtung: Es muss ein Verweis auf den PDF-Creator gesetzt werden: VBA-Editor - Extras - Verweise
'dort ggf. auf den Schalter Durchsuchen gehen und PDF-Creator.exe auswählen

Dim pdfjob As pdfcreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String

'/// Name und Pfad ggf. hier ändern ///
sPDFName = Sheets("TGB").Range("E9") & " " & Sheets("TGB").Range("H9") & ".pdf"
sPDFPath = "C:\Dokumente und Einstellungen\sprfuz\Eigene Dateien\" & Application.PathSeparator

Sheets("TGB").Activate

'Abbrechen, falls Arbeitsblatt leer ist
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub

'Druckbereich festlegen
Sheets("TGB").PageSetup.PrintArea = "B8:" & Cells(Sheets("TGB").UsedRange.SpecialCells(xlCellTypeLastCell).Row, Sheets("TGB").UsedRange.SpecialCells(xlCellTypeLastCell).Column).Address


Set pdfjob = New pdfcreator.clsPDFCreator

With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "PDF-Creator kann nicht gestartet werden!", vbCritical + _
vbOKOnly, "Fehler PDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cClearCache
End With

'Dokument drucken
ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"

'Warten, bis Dokument ausgedruckt wurde
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False

'Warten bis PDF-Creator fertig ist und Job beenden
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
Set pdfjob = Nothing

'Druckbereich aufheben
Sheets("TGB").PageSetup.PrintArea = ""

End Sub


Bevor du den Code ausprobierst, muss noch ein Verweis auf den PDF-Creator gesetzt werden.
Gehe dazu in den
VBA-Editor - Extras - Verweise
und dort ggf. auf den Schalter Durchsuchen gehen und PDF-Creator.exe auswählen und dann einen Haken machen.

Gruß

M.O.
0 Punkte
Beantwortet von kurtl Mitglied (239 Punkte)
Hallo M.O.
muss ich morgen schauen, wenn ich wieder im Dienst bin.

Melde mich morgen wieder.

Gruß Kurt
0 Punkte
Beantwortet von kurtl Mitglied (239 Punkte)
Hallo M.O.,
ich habe Deine neuen Code ausprobiert - und er funktionirt, - Du bist mein Held!
Ich hätte es fast nicht mehr für möglich gehalten. Ich kratze einbischen an der Oberfläche herum im VBA, aber Du hast es echt drauf!!!

Vielen herzlichen Dank!

Gruß Kurt
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Kurt,

freut mich, dass es klappt. Ich muss aber gestehen, dass ich den Ursprungscode, den ich mal im Netz gefunden habe, nur auf deine Verhältnisse angepasst habe.
Trotzdem danke für das Lob :-).

Gruß

M.O.
...