Seit Excel 2007 können PDF-Dateien direkt aus Excel heraus erzeugt werden. Dazu muss die Datei einfach über die Funktion Speichern unter als PDF-Dokument abgespeichert werden.
Diese manuelle Arbeit lässt sich auch per VBA erledigen. Verwenden Sie dazu folgenden Code:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\TEMP\Testdatei.pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Damit wird die PDF-Datei mit dem Namen "Testdatei.pdf" im Verzeichnis C:\TEMP erzeugt.
Ab Excel 2010 steht ein weiteres schönes Feature zur Verfügung. Über das Menü Datei / Speichern und senden / Als PDF-Senden kann ein Arbeitsblatt, ein Tabellenausschnitt oder eine komplette Datei als PDF-Datei erzeugt und direkt per E-Mail versendet werden.
Auch diese Funktion lässt sich per VBA automatisiseren. Verwenden Sie dazu den folgenden Code:
Sub e_Mail()
'** Dimensionierung der Variablen
Dim strPDF As String
Dim OutlookApp As Object, strEmail As Object
'** Vorgaben definieren
Set OutlookApp = CreateObject("Outlook.Application")
Set strEmail = OutlookApp.CreateItem(0)
'** PDF erzeugen
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ThisWorkbook.Path & "\Excel-File.pdf", Quality:=xlQualityStandard _
, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
:=False
'** E-Mail versenden
strPDF = ThisWorkbook.Path & "\Excel-File.pdf"
With strEmail
.To = "Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein."
.Subject = "PDF als Anlage" 'Betreffzeile
.body = "Als Anlage die PDF-Datei"
.Attachments.Add strPDF
.Display
'.Send 'Damit wir die E-Mail sofort versendet
Kill strPDF
End With
'** Objektvariablen wieder löschen
Set OutlookApp = Nothing
Set strEmail = Nothing
End Sub
Damit wird die PDF-Datei in einem temporären Verzeichnis erzeugt. Anschließend wird in Outlook eine neue E-Mail erzeugt an welche die PDF-Datei bereits angehängt ist.
Die Beispieldatei kann über den folgenden Link herunter geladen werden.