Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PDF erzeugen per VBA

PDF erzeugen per VBA
02.03.2014 20:07:37
Mercedesmann
Hallo Leute,
ich hoffe wie immer Hilfe hier zu bekommen. :-) Ich habe ein Makro, welches mir einen PDF Ausdruck eines Tabellenblattes macht und unter einem bestimmten Pfad speichert. Das funktioniert soweit auch prima. Nun möchte ich aber, dass die PDF den Names aus dem Tabellenblatt Namen und dem aktuellen Datum nimmt und dann Outlook öffnet und diese PDF an eine Mailadresse schickt. Jemand eine Idee? Das vorhandene Makro sieht so aus.

Function Ausdruck_PDF(PathStr As String, FileStr As String) As Boolean
Dim pdfJob As Object
'On Error GoTo Hell
Set pdfJob = CreateObject("PDFCreator.clsPDFCreator") 'New PDFCreator.clsPDFCreator
With pdfJob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
GoTo Hell
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveFormat") = 0    ' 0 = PDF
.cClearCache
End With
With pdfJob
.cOption("AutosaveDirectory") = PathStr
.cOption("AutosaveFilename") = FileStr
End With
Worksheets("Einsatzplan").PrintOut copies:=1, ActivePrinter:="PDFCreator"
'Wait until the print job has entered the print queue
Do Until pdfJob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfJob.cPrinterStop = False
'Wait until PDF creator is finished then release the objects
Do Until pdfJob.cCountOfPrintjobs = 0
DoEvents
Loop
Ausdruck_PDF = True
Hell:
pdfJob.cClose
Set pdfJob = Nothing
End Function
Gruß Willi

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF erzeugen per VBA
02.03.2014 20:55:07
Raphael
Hallo Willi,
so in etwa kann man das machen:
Sub pdfPerMail()
Dim MeineNachricht As Object, AusgabeApp As Object
Dim Anahng as String
Anhang = "D:\UserData\DeinDatei.pdf"
Set AusgabeApp = CreateObject("Outlook.Application")
Set MeineNachricht = AusgabeApp.CreateItem(0)
With MeineNachricht
.To = "Email@Adresse.com"
.Subject = "Dein Betreff"
.Body = "Dein Text falls gewünscht"
.Attachments.Add Anhang
.send
End With
End Sub
Gruess Raphael

AW: PDF erzeugen per VBA
02.03.2014 21:03:53
Mercedesmann
Hallo Raphael,
danke für deine Antwort. Die Idee das über ein separates Makro zu machen hatte ich auch schon. Nur kann ich den Dateianhang nicht so festlegen. Die PDF soll in Zukunft ja aus Namen Uund Datum bestehen und wäre deshalb ja nicht fix. Da liegt ja das kniffelige. :-)

Anzeige
AW: PDF erzeugen per VBA
02.03.2014 21:19:21
Raphael
Hallo Mercedesmann,
sollte nur als Beispiel dienen. Das kann man eigentlich so in deinen Code einbinden.
Function Ausdruck_PDF(PathStr As String, FileStr As String) As Boolean
Dim pdfJob As Object
'On Error GoTo Hell
Set pdfJob = CreateObject("PDFCreator.clsPDFCreator") 'New PDFCreator.clsPDFCreator
With pdfJob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
GoTo Hell
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveFormat") = 0    ' 0 = PDF
.cClearCache
End With
With pdfJob
.cOption("AutosaveDirectory") = PathStr
.cOption("AutosaveFilename") = FileStr
End With
Worksheets("Einsatzplan").PrintOut copies:=1, ActivePrinter:="PDFCreator"
'Wait until the print job has entered the print queue
Do Until pdfJob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfJob.cPrinterStop = False
'Wait until PDF creator is finished then release the objects
Do Until pdfJob.cCountOfPrintjobs = 0
DoEvents
Loop
Ausdruck_PDF = True
Dim MeineNachricht As Object, AusgabeApp As Object
Dim Anahng As String
Anhang = PathStr & FileStr
Set AusgabeApp = CreateObject("Outlook.Application")
Set MeineNachricht = AusgabeApp.CreateItem(0)
With MeineNachricht
.To = "Email@Adresse.com"
.Subject = "Dein Betreff"
.Body = "Dein Text falls gewünscht"
.Attachments.Add Anhang
.send
End With
Hell:
pdfJob.cClose
Set pdfJob = Nothing
End Function
Habe es aber nicht getestet, für das wäre eine Beispielmappe sehr hilfreich.
Gruess
Raphael

Anzeige
AW: PDF erzeugen per VBA
02.03.2014 22:00:54
Mercedesmann
Danke Raphael,
langsam nähern wir uns. Nehme ich dein Makro bekomme ich eine Fehlermeldung. Und zwar "Variable nicht definiert" bei Zeile Anhang = PathStr & FileStr
Gruß Willi

AW: PDF erzeugen per VBA
02.03.2014 22:05:42
Raphael
Ups. Habe versehentlich bei Dim Anahng as String statt Anhang as String geschrieben. Tippfehler...
Wenn du das änderst sollte es passen.

AW: PDF erzeugen per VBA
02.03.2014 22:21:58
Mercedesmann
Danke, hätte ich auch selbst sehen müssen. Aber nun findet er den Anhang nicht bei .Attachments.Add Anhang . Und wie schaffe ich es, dass er Blattname und aktuelles Datum als Dateinamen nimmt?
Gruß Willi

AW: PDF erzeugen per VBA
02.03.2014 22:29:28
Raphael
Hallo Willi,
das ist das Problem ohne die Mappe. Ich bin davon ausgegangen, dass "PathStr & FileStr" den Dateinamen mit dem entsprechenden Ort liefert.
Wenn ich jetzt nochmals raten müsste, würde ich behaupten, dass mit PathStr & "\" & FileStr das Problem gelöst ist.

Anzeige
AW: PDF erzeugen per VBA
02.03.2014 22:51:25
Mercedesmann
Hallo Raphael,
leider gleicher Fehler. Würde die Mappe hochladen, jedoch ist die sehr umfangreich. Werde versuchen eine abgespeckte hochzuladen. Aber trotzdem schon einmal Danke für deine Hilfe.
Gruß Willi

AW: PDF erzeugen per VBA
02.03.2014 22:58:47
Raphael
Ist ok. Ich brauche ja eigentlich nur die kompletten Makros, Klassen, usw. der Inhalt ist für mich soweit nicht relevant. Wichtig ist eigentlich nur das ich deine Function ausführen kann und so sehe woher und wie der Pfad für die gespeicherte Datei bezogen wird.

AW: PDF erzeugen per VBA
02.03.2014 23:06:58
Mercedesmann
Der Pfad kommt bisher daher:
Sub blatt3_pdf()
If Ausdruck_PDF("G:\Test\", Worksheets("blatt3").Range("D485")) Then
MsgBox "PDF erstellt"
Else
MsgBox "PDF konnte nicht errstellt werden!"
End If
End Sub

Anzeige
AW: PDF erzeugen per VBA
03.03.2014 10:19:35
Raphael
Guten Morgen,
also Grundsätzlich muss Anhang = Pfad deiner PDF inkl. Namen sein.
Anhang = "G:\Test\" & Worksheets("Blatt3").Range("D485")
Ich gehe davon aus das in der Zelle D485 der komplette Dateiname steht
--> z. B. 25-02-2014.pdf
Wenns nicht klappt dann wirklich ne Musterdatei hochladen, das ist wie in die Zukunftsehen ohne Kristallkugel.
Gruess
Raphael

AW: PDF erzeugen per VBA
03.03.2014 20:28:54
Mercedesmann
Hallo Raphael,
hab nun Muster hochgeladen; hoffe hab nicht zu viel gelöscht. Aber die Makros sind noch drin.
https://www.herber.de/bbs/user/89522.xls
In Zelle D485 steht nur der Name den die Datei haben soll, dass mit dem Datum hatte ich bisher nicht. Eigentlich müsste der Name doch automatisch vom Tabellenblatt zu beziehen sein und das Datum über einen Code.
Gruß Willi

Anzeige
AW: PDF erzeugen per VBA
03.03.2014 21:23:53
Mercedesmann
Hallo Raphael,
hab gerade selbst noch einmal getüftelt und einen Fehler beseitigt. Im Sub PDF steht,

Sub pdf()
'in "Tabelle2!B3" stand beim Test "TestPDF.pdf"
If Ausdruck_PDF("G:\Test\", Worksheets("Dispoplan").Range("D485"))

Der Schrägstrich hinter dem Test ist zu viel. Gleichzeitig will das Makro in Zelle D485 den gesamten Namen, also Einsatzplan.PDF. Jetz muss noch irgendwie das Datum dazu, dann wäre es nahezu perfekt.
Gruß Willi

AW: PDF erzeugen per VBA
03.03.2014 21:28:36
Raphael
Moin Willi,
habe es eben auch gesehen, du kannst also entweder die Zelle ändern oder
Anhang = PathStr & FileStr & ".pdf" , würde das Problem auch beheben.
Den Namen für die Datei könntest du ja aus .... Date & "_" & Worksheets("Dispoplan").Range("D485") erstellen...
Gruess Raphael

Anzeige
AW: PDF erzeugen per VBA
03.03.2014 21:41:26
Mercedesmann
Vielen Dank Raphael!!
Hab jetzt noch umgestellt, damit erst Name und dann Datum kommt, aber nun ist es perfekt!

If Ausdruck_PDF("G:\Test\", Worksheets("Dispoplan").Range("D485") & "_" & Date) Then
MsgBox "PDF erstellt"
So klappt es jetzt, danke nochmal.
Gruß Willi

Gerne doch owT
03.03.2014 22:02:08
Raphael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige