質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

11691閲覧

ExcelVBAでOutlookメールをPDF化するときに必要なオブジェクトは?

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/03/09 03:59

編集2020/03/09 06:00

いつもお世話になっております。
今回はExcelVBAを使ってOutlookメールをPDF化する方法について質問があります。

やりたいこと

Outlookメールの中からPDF化したいメールを、あるフォルダに保存します。
イメージ説明

その後、ExcelVBAでフォルダの中にあるメールファイルを読み込んでPDF化する、というものです。

そこで何かサンプルとなるコードはないか探したところ、メールをPDF化するのはあまりないようで
なかなか見つかりませんでした。
しかしこういうのがありました。

サンプルコード

Option Explicit ' ここをトリプルクリックでマクロ全体を選択できます。 Public Sub ExportCurrentFolderToPDF() Const EXPORT_FOLDER = "C:\作業中\PDF変換テスト" ' 保存先フォルダー Const wdExportFormatPDF = 17 Dim strFileBase As String Dim strFileRTF As String Dim strFilePDF As String Dim appWord As Object 'Word.Application Dim fldCurrent As Folder Dim objMail As Object 'MailItem Dim docRTF As Object 'Word.document Dim i As Integer strFileBase = Environ("TEMP") & "\msg" ' strFileBase = "Happy International Women's Day.msg" ' Word Application オブジェクトの生成 Set appWord = CreateObject("Word.Application") ' 表示中のフォルダーを取得 Set fldCurrent = ActiveExplorer.CurrentFolder For i = 1 To fldCurrent.Items.Count Set objMail = fldCurrent.Items(i) If objMail.MessageClass = "IPM.Note" Then ' 一時ファイルのファイル名の作成 strFileRTF = strFileBase & Right("0000" & i, 4) & ".rtf" ' 保存先 PDF ファイル名の生成 strFilePDF = EXPORT_FOLDER & "\msg" & Right("0000" & i, 4) & ".pdf" ' メールを RTF ファイルとして保存 objMail.SaveAs strFileRTF, olRTF ' 保存した RTF ファイルを Word で開く Set docRTF = appWord.Documents.Open(strFileRTF) ' Word で PDF として保存 docRTF.ExportAsFixedFormat strFilePDF, wdExportFormatPDF docRTF.Close Set docRTF = Nothing ' RTF ファイルの削除 Kill strFileRTF End If Next ' Word を終了 appWord.Quit End Sub

このサンプルでやっていることは、

  1. メールボックスのメールを1件ずつ読み込む
  2. メールを一旦RTFファイルに変える
  3. RTFファイルをWordアプリケーションを通してPDF化

という流れです。
しかし今回は、メールボックスを通さず、メールファイルそのものをPDF化してみたいので
以下のように変更してみました。

変更したコード

Option Explicit ' ここをトリプルクリックでマクロ全体を選択できます。 Public Sub ExportCurrentFolderToPDF() Const EXPORT_FOLDER = "C:\作業中\PDF変換テスト" ' 保存先フォルダー Const wdExportFormatPDF = 17 Dim strFileBase As String Dim strFileRTF As String Dim strFilePDF As String Dim appWord As Object 'Word.Application Dim fldCurrent As Folder Dim objMail As Object 'MailItem Dim docRTF As Object 'Word.document Dim i As Integer strFileBase = Environ("TEMP") & "\msg" ' strFileBase = "Happy International Women's Day.msg" ' Word Application オブジェクトの生成 Set appWord = CreateObject("Word.Application") '不要========================== ' 表示中のフォルダーを取得 ' Set fldCurrent = ActiveExplorer.CurrentFolder ' For i = 1 To fldCurrent.Items.Count ' Set objMail = fldCurrent.Items(i) ' If objMail.MessageClass = "IPM.Note" Then '不要========================== ' 一時ファイルのファイル名の作成 strFileRTF = strFileBase & Right("0000" & i, 4) & ".rtf" ' 保存先 PDF ファイル名の生成 strFilePDF = EXPORT_FOLDER & "\msg" & Right("0000" & i, 4) & ".pdf" ' メールを RTF ファイルとして保存 objMail.SaveAs strFileRTF, olRTF ' 保存した RTF ファイルを Word で開く Set docRTF = appWord.Documents.Open(strFileRTF) ' Word で PDF として保存 docRTF.ExportAsFixedFormat strFilePDF, wdExportFormatPDF docRTF.Close Set docRTF = Nothing '不要========================== ' RTF ファイルの削除 ' Kill strFileRTF ' End If ' Next '不要========================== ' Word を終了 appWord.Quit End Sub

分からない点

しかし、以上のコード内にある

' メールを RTF ファイルとして保存 objMail.SaveAs strFileRTF, olRTF

この「objMail」を別のオブジェクトに置き換えないと、
メールボックスを読み込むことになりエラーになってしまうのですが、
何に置き換えればいいのか分かりません。

どなたか分かる方、ご教示願えますでしょうか?
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご要望の要件だとmsgファイルを開かないといけないので、
Outlook.ApplicationオブジェクトのCreateItemFromTemplateメソッドを使って
MailItemオブジェクトを生成します。

VBA

1Dim appOlook As Object 'Outlook.Application 2Dim objMail As Object 'MailItem 3Set appOlook = CreateObject("Outlook.Application") 4Set objMail = appOlook.CreateItemFromTemplate(msgファイルフルパス)

とりあえずC:\作業中\tempを読込対象のディレクトリとして、
全てのmsgファイルを変換するならこんな感じでしょうか。

VBA

1Option Explicit 2' ここをトリプルクリックでマクロ全体を選択できます。 3Public Sub ExportCurrentFolderToPDF() 4 Const EXPORT_FOLDER = "C:\作業中\temp" ' 保存先フォルダー 5 Const wdExportFormatPDF = 17 6 Dim strFileBase As String 7 Dim strFileRTF As String 8 Dim strFilePDF As String 9 Dim fname As String 10 Dim appWord As Object 'Word.Application 11 Dim appOlook As Object 'Outlook.Application 12 Dim fldCurrent As Folder 13 Dim objMail As Object 'MailItem 14 Dim docRTF As Object 'Word.document 15 Dim i As Integer 16 strFileBase = Environ("TEMP") & "\msg" 17' strFileBase = "Happy International Women's Day.msg" 18 ' Word Application オブジェクトの生成 19 Set appWord = CreateObject("Word.Application") 20 Set appOlook = CreateObject("Outlook.Application") 21 22 i = 1 23 fname = Dir(EXPORT_FOLDER & "*.msg") 24 Do While fname <> "" 25 ' 一時ファイルのファイル名の作成 26 strFileRTF = strFileBase & Right("0000" & i, 4) & ".rtf" 27 ' 保存先 PDF ファイル名の生成 28 strFilePDF = EXPORT_FOLDER & "\msg" & Right("0000" & i, 4) & ".pdf" 29 ' msgファイルを開きMailItemオブジェクトを作成する 30 Set objMail = appOlook.CreateItemFromTemplate(EXPORT_FOLDER & "\" & fname) 31 ' メールを RTF ファイルとして保存 32 objMail.SaveAs strFileRTF, olRTF 33 ' 保存した RTF ファイルを Word で開く 34 Set docRTF = appWord.Documents.Open(strFileRTF) 35 ' Word で PDF として保存 36 docRTF.ExportAsFixedFormat strFilePDF, wdExportFormatPDF 37 docRTF.Close 38 Set docRTF = Nothing 39 40 i = i + 1 41 fname = Dir() 42 Loop 43 44 ' Word を終了 45 appWord.Quit 46End Sub

投稿2020/03/09 06:13

編集2020/03/09 06:20
yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/12 03:10

そのロジックで無事解決されました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問