Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
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

Sheet als PDF und versenden

Sheet als PDF und versenden
Jockel
Hallo ,
ich möchte per VBA aus einem Sheet ein PDF file machen und dieses dann per mail versenden. Dazu habe ich im Netz zwei Beispiele gefunden. Nachher will ich auf EINEN Button klicken und die Mail soll mit dem fertigen PDF da sein. Ob das PDF zuerst noch zwischengespeichert und dann ins Outlook kommt ist mir egal, hautsache es funktioniert.
Doch schon beim ersten Code habe ich probleme:
-Wenn ich den Code ausführe, wird zwar eine PDF erstellt, aber nicht unter den Name "Zusammenfassung" sondern unter dem Name der kompletten Excel-Mappe.
-als Pfad wird nicht der aktuelle der Excelmappe genommen, sondern immer der, mit dem ich vorher schon mal was anderes als PDF abgespeichert habe. Irgend wie schint sich Adobe den letzten Pfad immer zu merken.
'Code zum PDF erstellen
Dim strPDFName As String
Dim strCurrentPrinter As String
strPDFName = ThisWorkbook.Path & "\Zusammenfassung.pdf"
strCurrentPrinter = Application.ActivePrinter
'SendKeys strPDFName & "{enter}"
Sheets("Summary").PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
Application.ActivePrinter = strCurrentPrinter
- Wenn das PDF erstellt und abgelegt ist, soll der Code von Tino laufen und das abgespeicherte File ins Outlook laden:
'Code von Tino aus dem Jahr 07
Dim mePDFD As String
Dim MyOutApp As Object, MyMessage As Object
mePDFD = ThisWorkbook.Path & "\Zusammenfassung.pdf"
Set MyOutApp = CreateObject("Outlook.Application")
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
.To = "Meine E_mail Adresse"
.Subject = "hier ist die Test PDF Datei" 'Betreffzeile
.body = "geht doch!"
.Attachments.Add mePDFD
.Display
'.Send
'Kill mePDFD
End With
Set MyOutApp = Nothing
Set MyMessage = Nothing
Weiss jemand, was es mit dem Dateiname und dem Pfad auf sich hat und wie man den Code zum laufen bringt. Im Prinzip laufen beide Teile für sich, es soll aber alles in einem "Zug" durchlaufen"
Danke mal
Jockel
Tino, kennst du das Beispiel noch ? :-)
27.07.2011 09:55:45
Jockel
AW: Tino, kennst du das Beispiel noch ? :-)
27.07.2011 11:38:34
Tino
Hallo,
ich meine dies war im Zusammenhang mit dem PDFCreator der installiert sein muss.
(PDFCreator Installieren und im Excel VBA unter Verweise den Verweis auf PDFCreator setzen)
Dazu habe ich diesen Code bei mir gefunden, den ich aber unter Win7 nicht testen kann,
daher kann ich Dir dazu auch nicht mehr schreiben.
Sub PrintToPDF_Early()
    Dim pdfjob As PDFCreator.clsPDFCreator
    Dim sPDFName As String
    Dim sPDFPath As String
    sPDFName = "testPDF.pdf"
    sPDFPath = ActiveWorkbook.Path & Application.PathSeparator
    If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub

    Set pdfjob = New PDFCreator.clsPDFCreator

    With pdfjob
        If .cStart("/NoProcessingAtStartup") = False Then
            MsgBox "Can't initialize PDFCreator.", vbCritical + _
                    vbOKOnly, "PrtPDFCreator"
            Exit Sub
        End If
        .cOption("UseAutosave") = 1
        .cOption("UseAutosaveDirectory") = 1
        .cOption("AutosaveDirectory") = sPDFPath
        .cOption("AutosaveFilename") = sPDFName
        .cOption("AutosaveFormat") = 0    ' 0 = PDF 
        .cClearCache
    End With
    ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
    Do Until pdfjob.cCountOfPrintjobs = 1
        DoEvents
    Loop
    pdfjob.cPrinterStop = False
    Do Until pdfjob.cCountOfPrintjobs = 0
        DoEvents
    Loop
    pdfjob.cClose
    Set pdfjob = Nothing
End Sub
Gruß Tino
Anzeige
Aber der Dateiname funktioniert nicht..
27.07.2011 13:36:13
Jockel
Hallo Tino,
ich darf hier an den Rechner leider kein PDF CReator installieren, bzw, der Code muss auch an anderen Rechnern funktionieren. Darum Adobe PDF
Im Prinzip würde es reichen, wenn ich wüsste, warum mir der Code nicht den Namen in das Namensfeld schreibt. (Zusammenfassung.pdf")
'PDF erstellen
Dim strPDFName As String
Dim strCurrentPrinter As String
strPDFName = ThisWorkbook.Path & "\Zusammenfassung.pdf"
strCurrentPrinter = Application.ActivePrinter
'SendKeys strPDFName & "{enter}"
Sheets("Extrakt").PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
Application.ActivePrinter = strCurrentPrinter
Gruß
Jockel
Anzeige
den habe ich nicht, sorry oT.
27.07.2011 14:04:13
Tino
AW: den habe ich nicht, sorry oT.
27.07.2011 16:29:45
jockel
Hi Tino,
was hast du nicht, den Dateinamen ?
Gruss
Jockel
Adobe PDF Creator habe ich nicht oT.
27.07.2011 16:45:23
Tino
Schade, Danke. Hat jemand anderes Adobe PDF owT
27.07.2011 21:34:41
Jockel
AW: Sheet als PDF und versenden
28.07.2011 01:28:02
mumpel
Hallo!
Was sagt die Excelhilfe dazu? Markiere mal "PrintOut" und drücke dann F1, die VBA-Hilfe zeigt Dir dann mehr dazu.
Code eingefügt mit VBA in HTML 2.0. Erstellt und getestet in Excel 2010. Zur korrekten Darstellung des Codebeispiels wird der Internetexplorer empfohlen.size>
Gruß, René
Nachtrag
28.07.2011 01:29:05
mumpel
"Collate:=True" benötigst Du nicht, da Standardeinstellung.
File geht kaputt
28.07.2011 08:36:40
Jockel
Hallo Rene,
vielen Dank. Also eigentlich funktioniert der Code so wie ich es wollte, PDF erstellen, ablegen unter Dateiname, Mail erzeugen....
Der Anhang ist nun in meiner Mail-Maske drin. Wenn ich ihn aber öffnen will, kommt immer die Fehlermeldung :
""Acrobat konnte "Zusammenfassung.pdf" nicht öffnen, da der Dateityp nicht unterstützt wird oder die datei beschädigt ist.""
Wenn ich die Datei im Explorer anschaue, sieht sie aber noch ganz normal aus, lässt sich aber auch da nicht öffnen.
Was könnte denn die Datei zerschiessen ?
-Hier wird die Datei unter dem angegebenen Name gespeichert, geht aber kaputt:
strPDFName = ThisWorkbook.Path & "\Zusammenfassung.pdf"
strCurrentPrinter = Application.ActivePrinter
Sheets("Summary").PrintOut Copies:=1, ActivePrinter:="Adobe PDF", _
PrintToFile:=True, PrToFileName:=strPDFName
- Hier muss man den Pfad und Dateiname nachher in einem Dialog manuell eingeben, aber nach dem Speichern ist die datei iO:
'PDF erstellen
Dim strPDFName As String
Dim strCurrentPrinter As String
strPDFName = ThisWorkbook.Path & "\Zusammenfassung.pdf"
strCurrentPrinter = Application.ActivePrinter
'SendKeys strPDFName & "{enter}"
Sheets("Summary").PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
Application.ActivePrinter = strCurrentPrinter
Aber auch bei meinem unteren Beispiel, wenn ich da den Name im Code mit 'PrToFileName:=strPDFName'
mitgeben will, geht die Datei ebenfalls kaputt, also immer wenn man den Dateiname angeben will.
hmmm, hast Du noch eine Idee ? läuft der Code bei dir ohne die datei kaputt zu machen ?
Danke
Jockel
Anzeige
AW: File geht kaputt
28.07.2011 10:38:09
mumpel
Anscheinend kann Adobe mit "PrToFileName" nichts anfangen. Bei mir mit PDFCreator funktioniert es wie angegeben. Aber schau Dir mal das Tutorial VBA & Adobe Acrobat Distiller an. Ist aber nicht einfach zu verstehen.
habe ein keine Lösung, aber Frage dazu...
28.07.2011 11:38:50
Jockel
Hi,
Ja habe ich nun auch schon ein paar mal gelesen, dass es mit dem Dateiname Probleme geben soll. habe aber was anderes im Net gefunden:
Sheets("Zusammenfassung").Copy
ActiveWorkbook.SaveAs Filename:="C:\temp\Zusammenfassung.xls"
Sheets("Zusammenfassung").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
ActiveWindow.Close
Das Sheet wird erst mal unter einem Name neu abgespeichert, daraus wird dann das PDF mit den richtigen Name gemacht, funktioniert prima.
Das einzige, was man noch machen müsste, ist den SpeicherDialog von Adobe mit dem Button Speichern betätigen, damit das File noch abgespeichert werden soll.
Frage: kann man da so ein Sendkey hinterher schieben, dass dies vielleicht automatisch passiert ?
Wenn ja, welches und wo
Danke
Jockel
Anzeige
AW: habe ein keine Lösung, aber Frage dazu...
28.07.2011 12:11:09
mumpel
Nein, da ist nichts zu machen. SendKeys ist zudem extrem fehleranfällig. Und wenn "ActiveWindow.Close" nicht schnell genug das Fenster schließt, dann wird SendKeys ganz woanders ausgeführt, nur nicht im Adobe-Dialog. Dir wird nichts weiter übrig bleiben als das Tutorial von maninweb (siehe Link im Beitrag von 10:38 Uhr).

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige