Outlookで電子メールと添付ファイルを単一のPDFファイルに変換または保存するにはどうすればよいですか?
この記事では、電子メールメッセージとその中のすべての添付ファイルをOutlookの単一のPDFファイルに保存する方法について説明します。
電子メールと添付ファイルをVBAコードを含む単一のPDFファイルに変換または保存します
電子メールと添付ファイルをVBAコードを含む単一のPDFファイルに変換または保存します
Outlookの単一のPDFファイルにすべての添付ファイルを含む電子メールを保存するには、次のようにしてください。
1.単一のPDFファイルに保存する添付ファイル付きの電子メールを選択し、を押します 他の + F11 キーを押して アプリケーション向け Microsoft Visual Basic 窓。
2。 の中に アプリケーション向け Microsoft Visual Basic ウィンドウ、クリック インセット > モジュール。 次に、以下のVBAコードをモジュールウィンドウにコピーします。
VBAコード:電子メールと添付ファイルを単一のPDFファイルに保存します
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。 クリック ツール > 参考文献 を開く 参考文献 ダイアログボックス。 チェックしてください MicrosoftExcelオブジェクトライブラリ, Microsoftスクリプトランタイム & MicrosoftWordオブジェクトライブラリ ボックスをクリックし、 OK ボタン。 スクリーンショットを参照してください:
4。 プレス F5 キーを押すか、 ラン ボタンを押してコードを実行します。 次に、 名前を付けて保存 ダイアログボックスが表示されます。ファイルを保存するフォルダを指定してから、PDFファイルに名前を付けて[ Save ボタン。 スクリーンショットを参照してください:
5.次に、 Microsoft Outlookの ダイアログボックスが表示されたら、をクリックしてください OK
これで、選択した電子メールとそのすべての添付ファイルがXNUMXつのPDFファイルに保存されます。
Note:このVBAスクリプトは、MicrosoftWordおよびExcelの添付ファイルに対してのみ機能します。
選択した電子メールを異なる形式のファイルとしてOutlookに簡単に保存できます。
一括保存 の有用性 Kutools for Outlook、以下のスクリーンショットに示すように、選択した複数の電子メールを個別のHTML形式ファイル、TXT形式ファイル、Word文書、CSVファイル、およびPDFファイルとしてOutlookに簡単に保存できます。 ダウンロードして今すぐ試してみてください! (60 日間の無料トレイル)
関連記事:
- コマンドボタンを使用してアクティブなワークシートをExcelでPDFファイルとして保存するにはどうすればよいですか?
- ワークシートをPDFファイルとして保存し、Outlookから添付ファイルとして電子メールで送信するにはどうすればよいですか?
- 選択範囲またはブック全体をExcelでPDFとして保存するにはどうすればよいですか?
最高のオフィス生産性向上ツール
Kutools for Outlook - Outlook を強化する 100 以上の強力な機能
🤖 AIメールアシスタント: AI の魔法を備えたインスタント プロのメール - ワンクリックで天才的な返信、完璧な口調、多言語の習得。メールを簡単に変革しましょう! ...
📧 自動メール: 不在時 (POP および IMAP で利用可能) / メール送信のスケジュール設定 / メール送信時のルールによる自動CC/BCC / 自動転送 (高度なルール) / あいさつを自動追加 / 複数受信者の電子メールを個別のメッセージに自動的に分割する ...
📨 電子メール管理: メールを簡単に思い出す / 件名などで詐欺メールをブロック / 重複するメールを削除する / 高度な検索 / フォルダーを統合する ...
📁 アタッチメント プロ: バッチ保存 / バッチデタッチ / バッチ圧縮 / 自動保存 / 自動デタッチ / 自動圧縮 ...
🌟 インターフェースマジック: 😊もっと可愛くてクールな絵文字 / タブ付きビューで Outlook の生産性を向上 / Outlook を閉じる代わりに最小化する ...
???? ワンクリックの驚異: 受信した添付ファイルをすべてに返信する / フィッシングメール対策 / 🕘送信者のタイムゾーンを表示 ...
👩🏼🤝👩🏻 連絡先とカレンダー: 選択したメールから連絡先を一括追加 / 連絡先グループを個別のグループに分割する / 誕生日のリマインダーを削除する ...
オーバー 100の特長 あなたの探索をお待ちしています! ここをクリックして詳細をご覧ください。