Wie konvertiere oder speichere ich E-Mails und Anhänge in eine einzelne PDF-Datei in Outlook?
In diesem Artikel wird das Speichern einer E-Mail-Nachricht und aller darin enthaltenen Anhänge in einer einzelnen PDF-Datei in Outlook behandelt.
Konvertieren oder speichern Sie E-Mails und Anhänge in eine einzelne PDF-Datei mit VBA-Code
Konvertieren oder speichern Sie E-Mails und Anhänge in eine einzelne PDF-Datei mit VBA-Code
Gehen Sie wie folgt vor, um E-Mails mit allen Anhängen in einer einzelnen PDF-Datei in Outlook zu speichern.
1. Wählen Sie eine E-Mail mit Anhängen aus, die Sie in einer einzelnen PDF-Datei speichern möchten, und drücken Sie dann die Taste Andere + F11 Schlüssel zum Öffnen der Microsoft Visual Basic für Applikationen Fenster.
2. In dem Microsoft Visual Basic für Applikationen Klicken Sie im Fenster Insert > Modul. Kopieren Sie dann den folgenden VBA-Code in das Modulfenster.
VBA-Code: Speichern Sie E-Mail und Anhang in einer einzigen PDF-Datei
Public Sub MergeMailAndAttachsToPDF()
'Update by Extendoffice 2018/3/5
Dim xSelMails As MailItem
Dim xFSysObj As FileSystemObject
Dim xOverwriteBln As Boolean
Dim xLooper As Integer
Dim xEntryID As String
Dim xNameSpace As Outlook.NameSpace
Dim xMail As Outlook.MailItem
Dim xExt As String
Dim xSendEmailAddr, xCompanyDomain As String
Dim xWdApp As Word.Application
Dim xDoc, xNewDoc As Word.Document
Dim I As Integer
Dim xPDFSavePath As String
Dim xPath As String
Dim xFileArr() As String
Dim xExcel As Excel.Application
Dim xWb As Workbook
Dim xWs As Worksheet
Dim xTempDoc As Word.Document
On Error Resume Next
If (Outlook.ActiveExplorer.Selection.Count > 1) Or (Outlook.ActiveExplorer.Selection.Count = 0) Then
MsgBox "Please Select a email.", vbInformation + vbOKOnly
Exit Sub
End If
Set xSelMails = Outlook.ActiveExplorer.Selection.Item(1)
xEntryID = xSelMails.EntryID
Set xNameSpace = Application.GetNamespace("MAPI")
Set xMail = xNameSpace.GetItemFromID(xEntryID)
xSendEmailAddr = xMail.SenderEmailAddress
xCompanyDomain = Right(xSendEmailAddr, Len(xSendEmailAddr) - InStr(xSendEmailAddr, "@"))
xOverwriteBln = False
Set xExcel = New Excel.Application
xExcel.Visible = False
Set xWdApp = New Word.Application
xExcel.DisplayAlerts = False
xPDFSavePath = xExcel.Application.GetSaveAsFilename(InitialFileName:="", FileFilter:="PDF Files(*.pdf),*.pdf")
If xPDFSavePath = "False" Then
xExcel.DisplayAlerts = True
xExcel.Quit
xWdApp.Quit
Exit Sub
End If
xPath = Left(xPDFSavePath, InStrRev(xPDFSavePath, "\"))
cPath = xPath & xCompanyDomain & "\"
yPath = cPath & Format(Now(), "yyyy") & "\"
mPath = yPath & Format(Now(), "MMMM") & "\"
If Dir(xPath, vbDirectory) = vbNullString Then
MkDir xPath
End If
EmailSubject = CleanFileName(xMail.Subject)
xSaveName = Format(xMail.ReceivedTime, "yyyymmdd") & "_" & EmailSubject & ".doc"
Set xFSysObj = CreateObject("Scripting.FileSystemObject")
If xOverwriteBln = False Then
xLooper = 0
Do While xFSysObj.FileExists(yPath & xSaveName)
xLooper = xLooper + 1
xSaveName = Format(xMail.ReceivedTime, "yyyymmdd") & "_" & EmailSubject & "_" & xLooper & ".doc"
Loop
Else
If xFSysObj.FileExists(yPath & xSaveName) Then
xFSysObj.DeleteFile yPath & xSaveName
End If
End If
xMail.SaveAs xPath & xSaveName, olDoc
If xMail.Attachments.Count > 0 Then
For Each atmt In xMail.Attachments
xExt = SplitPath(atmt.filename, 2)
If (xExt = ".docx") Or (xExt = ".doc") Or (xExt = ".docm") Or (xExt = ".dot") Or (xExt = ".dotm") Or (xExt = ".dotx") _
Or (xExt = ".xlsx") Or (xExt = ".xls") Or (xExt = ".xlsm") Or (xExt = ".xlt") Or (xExt = ".xltm") Or (xExt = ".xltx") Then
atmtName = CleanFileName(atmt.filename)
atmtSave = xPath & Format(xMail.ReceivedTime, "yyyymmdd") & "_" & atmtName
atmt.SaveAsFile atmtSave
End If
Next
End If
Set xNewDoc = xWdApp.Documents.Add("Normal", False, wdNewBlankDocument, False)
Set xFilesFld = xFSysObj.GetFolder(xPath)
xFileArr() = GetFiles(xPath)
For I = 0 To UBound(xFileArr()) - 1
xExt = SplitPath(xFileArr(I), 2)
If (xExt = ".xlsx") Or (xExt = ".xls") Or (xExt = ".xlsm") Or (xExt = ".xlt") Or _
(xExt = ".xltm") Or (xExt = ".xltx") Then 'conver excel to word
Set xWb = xExcel.Workbooks.Open(xPath & xFileArr(I))
Set xTempDoc = xWdApp.Documents.Add("Normal", False, wdNewBlankDocument, False)
Set xWs = xWb.ActiveSheet
xWs.UsedRange.Copy
xTempDoc.Content.PasteAndFormat wdFormatOriginalFormatting
xTempDoc.SaveAs2 xPath & xWs.Name + ".docx", wdFormatXMLDocument
xWb.Close False
Kill xPath & xFileArr(I)
xTempDoc.Close wdDoNotSaveChanges, wdOriginalDocumentFormat, False
End If
Next
xExcel.DisplayAlerts = True
xExcel.Quit
xFileArr() = GetFiles(xPath)
'Merge Documents
For I = 0 To UBound(xFileArr()) - 1
xExt = SplitPath(xFileArr(I), 2)
If (xExt = ".docx") Or (xExt = ".doc") Or (xExt = ".docm") Or (xExt = ".dot") Or _
(xExt = ".dotm") Or (xExt = ".dotx") Then
MergeDoc xWdApp, xPath & xFileArr(I), xNewDoc
Kill xPath & xFileArr(I)
End If
Next
xNewDoc.Sections.Item(1).Range.Delete wdCharacter, 1
xNewDoc.SaveAs2 xPDFSavePath, wdFormatPDF
xNewDoc.Close wdDoNotSaveChanges, wdOriginalDocumentFormat, False
xWdApp.Quit
Set xMail = Nothing
Set xNameSpace = Nothing
Set xFSysObj = Nothing
MsgBox "Merged successfully", vbInformation + vbOKOnly
End Sub
Public Function SplitPath(FullPath As String, ResultFlag As Integer) As String
Dim SplitPos As Integer, DotPos As Integer
SplitPos = InStrRev(FullPath, "/")
DotPos = InStrRev(FullPath, ".")
Select Case ResultFlag
Case 0
SplitPath = Left(FullPath, SplitPos - 1)
Case 1
If DotPos = 0 Then DotPos = Len(FullPath) + 1
SplitPath = Mid(FullPath, SplitPos + 1, DotPos - SplitPos - 1)
Case 2
If DotPos = 0 Then DotPos = Len(FullPath)
SplitPath = Mid(FullPath, DotPos)
Case Else
Err.Raise vbObjectError + 1, "SplitPath Function", "Invalid Parameter!"
End Select
End Function
Function CleanFileName(StrText As String) As String
Dim xStripChars As String
Dim xLen As Integer
Dim I As Integer
xStripChars = "/\[]:=," & Chr(34)
xLen = Len(xStripChars)
StrText = Trim(StrText)
For I = 1 To xLen
StrText = Replace(StrText, Mid(xStripChars, I, 1), "")
Next
CleanFileName = StrText
End Function
Function GetFiles(xFldPath As String) As String()
On Error Resume Next
Dim xFile As String
Dim xFileArr() As String
Dim xArr() As String
Dim I, x As Integer
x = 0
ReDim xFileArr(1)
xFileArr(1) = xFldPath '& "\"
xFile = Dir(xFileArr(1) & "*.*")
Do Until xFile = ""
x = x + 1
xFile = Dir
Loop
ReDim xArr(0 To x)
x = 0
xFile = Dir(xFileArr(1) & "*.*")
Do Until xFile = ""
xArr(x) = xFile
x = x + 1
xFile = Dir
Loop
GetFiles = xArr()
End Function
Sub MergeDoc(WdApp As Word.Application, xFileName As String, Doc As Document)
Dim xNewDoc As Document
Dim xSec As Section
Set xNewDoc = WdApp.Documents.Open(filename:=xFileName, Visible:=False)
Set xSec = Doc.Sections.Add
xNewDoc.Content.Copy
xSec.PageSetup = xNewDoc.PageSetup
xSec.Range.PasteAndFormat wdFormatOriginalFormatting
xNewDoc.Close
End Sub
3 Klicken Tools > Bibliographie öffnen Bibliographie Dialogbox. Überprüf den Microsoft Excel-Objektbibliothek, Microsoft Scripting-Laufzeit und Microsoft Word-Objektbibliothek Kästchen und klicken Sie dann auf OK Taste. Siehe Screenshot:
4. Drücken Sie die Taste F5 Taste oder klicken Sie auf Führen Sie Schaltfläche, um den Code auszuführen. Dann ein Speichern unter Das Dialogfeld wird angezeigt. Geben Sie einen Ordner zum Speichern der Datei an, geben Sie der PDF-Datei einen Namen und klicken Sie auf Speichern Taste. Siehe Screenshot:
5. Dann a Microsoft Outlook Das Dialogfeld wird angezeigt. Klicken Sie auf OK .
Jetzt wird die ausgewählte E-Mail mit all ihren Anhängen in einer einzigen PDF-Datei gespeichert.
Note: Dieses VBA-Skript funktioniert nur für Microsoft Word- und Excel-Anhänge.
Speichern Sie ausgewählte E-Mails einfach als Dateien mit unterschiedlichem Format in Outlook:
Mit der Massenspeicherung Nutzen von Kutools for OutlookSie können problemlos mehrere ausgewählte E-Mails als einzelne HTML-Formatdatei, TXT-Formatdatei, Word-Dokument, CSV-Datei sowie PDF-Datei in Outlook speichern (siehe Abbildung unten). Jetzt herunterladen und ausprobieren! (60 Tage kostenloser Trail)
Weitere Artikel:
- Wie verwende ich die Befehlsschaltfläche, um ein aktives Arbeitsblatt als PDF-Datei in Excel zu speichern?
- Wie speichere ich ein Arbeitsblatt als PDF-Datei und sende es als Anhang per E-Mail über Outlook?
- Wie speichere ich die Auswahl oder die gesamte Arbeitsmappe als PDF in Excel?
Beste Office-Produktivitätstools
Kutools for Outlook - Über 100 leistungsstarke Funktionen zur Optimierung Ihres Outlooks
🤖 KI-Mail-Assistent: Sofortige Profi-E-Mails mit KI-Magie – geniale Antworten mit einem Klick, perfekter Ton, mehrsprachige Beherrschung. Verwandeln Sie den E-Mail-Versand mühelos! ...
📧 E-Mail Automation: Abwesenheit (verfügbar für POP und IMAP) / Planen Sie das Senden von E-Mails / Automatisches CC/BCC nach Regeln beim E-Mail-Versand / Automatische Weiterleitung (erweiterte Regeln) / Begrüßung automatisch hinzufügen / Teilen Sie E-Mails mit mehreren Empfängern automatisch in einzelne Nachrichten auf ...
📨 E-Mail-Management: E-Mails einfach abrufen / Blockieren Sie betrügerische E-Mails nach Betreff und anderen / Doppelte E-Mails löschen / Erweiterte Suche / Ordner konsolidieren ...
📁 Anhänge Pro: Batch speichern / Stapeltrennung / Stapelkomprimierung / Automatisches Speichern / Automatische Trennung / Automatische Komprimierung ...
???? Schnittstellenmagie: 😊Mehr hübsche und coole Emojis / Steigern Sie Ihre Outlook-Produktivität mit Registerkartenansichten / Ausblick minimieren statt schließen ...
👍 Wunder mit einem Klick: Allen mit eingehenden Anhängen antworten / Anti-Phishing-E-Mails / 🕘Zeitzone des Absenders anzeigen ...
👩🏼🤝👩🏻 Kontakte und Kalender: Fügen Sie Kontakte aus ausgewählten E-Mails im Stapel hinzu / Teilen Sie eine Kontaktgruppe in einzelne Gruppen auf / Geburtstagserinnerungen entfernen ...
Auf über 100 Eigenschaften Warten Sie auf Ihre Erkundung! Klicken Sie hier, um mehr zu erfahren.