こんにちは、くのへ@MasazaneKunoheです。
OutlookVBAはエクセルVBAと違い、マクロの記録機能がないため、メールの指定方法や各操作のメソッドが分かりずらいですよね。
そこで今回はOutlookのオブジェクト構造を解説します。これでOutlook-VBAが理解しやすくなると思います。
なお、この記事はちょっと難しいです。
オブジェクト構造
Outlook VBAは次のようなMAPIを最上位にしたオブジェクト構造になっています。
MAPI
┗Folders
┗Item 1 ←メールアカウントのこと
┗Folders ←メールアカウントアドレス
┗Item 1 ←ゴミ箱
┗Item 2 ←受信トレイ
┗Items ←メールアイテムが入っている場所
┗Item 1 ←1番目のメール
┗To ←宛先
┗Subject ←件名
┗Body ←本文
┗・・・ ←2番目以降のメール
┗Item 3 ←送信トレイ
┗Item 4 ←送信済みトレイ
┗・・・ ←その他のトレイやタスクフォルダなど
このような構造を理解できると、マクロでデータ抽出などが出来るようになります。
例えば、上の構造のデータを赤字マーキングしたメールの件名を呼び出すのは次のコードで実現できます。
Sub test1()
Dim objNameSpace As Outlook.NameSpace
Set objNameSpace = Application.GetNamespace("MAPI")
MsgBox objNameSpace.Folders.Item(1).Folders.Item(2).Items.Item(1).Subject
End Sub
このコードは、objNameSpaceをMAPI空間のインスタンスとして設定し、そして
Folders⇒Item 1⇒Folders⇒Item 2⇒Items⇒Item(1)⇒Subject
という順番で掘り下げてメール件名を呼び出しているコードになります。
直接 受信トレイを呼び出すコード(GetDefaultFolderメソッド)
上記のコードだと、非常に長いコードになってしまいます。
そこで簡単なコードが準備されています。それがGetDefaultFolderメソッドです。
先ほどのコードと↓このコードはほぼ等価です。
Sub test2()
Dim objFolder As Object
Set objFolder = Application.GetNamespace("MAPI").GetDefaultFolder(6)
MsgBox objFolder.Items.Item(1).Subject
End Sub
このGetDefaultFolderのカッコの中身の「6」は「受信トレイ」を表します。その他は以下参照。
番号 | コード形式 | 対象フォルダ |
4 | olFolderOutbox | 送信トレイフォルダ |
5 | olFolderSentMail | 送信済みメールフォルダ |
6 | olFolderInbox | 受信トレイフォルダ |
9 | olFolderCalendar | カレンダーフォルダ |
13 | olFolderTasks | タスクフォルダ |
16 | olFolderDrafts | 下書きフォルダ |
上記の他にも色々とあるので、この記事の一番下の「資料」コーナーに貼っておきます。
オブジェクト構造の分析方法
上の章では、基本的なオブジェクト構造の説明と、プロパティの使い方を紹介しました。
しかしOutlookのオブジェクト構造はかなり色々なプロパティがあります。
これを自分で簡易分析する方法を纏めました。
このコード↓を書いて実行すると、「Stop」でプログラムが一時停止するため、その際にローカルウィンドウを使ってobjNameSpaceを分析できます。
Sub PropatyCheck_MAPI()
Dim objNameSpace As Outlook.NameSpace
Set objNameSpace = Application.GetNamespace("MAPI")
Stop
End Sub
また、こちらのコードも同様です。「受信トレイ」の構造をローカルウィンドウで分析できます。
Sub PropatyCheck_受信トレイ()
Dim objFolder As Object
Set objFolder = Application.GetNamespace("MAPI").GetDefaultFolder(6)
Stop
End Sub
分析方法の詳細は次章を見てください。
(詳細)ローカルウィンドウでプロパティを調べる方法
ローカルウィンドウの表示方法
まず、VBAメニューバーの「表示」→「ローカルウィンドウ」をクリックします。
そして、出てきたローカルウィンドウをドラッグして枠を外に出してください。
MAPIを分析する
先ほどの1番目のコードを実行すると、stopでプログラムが一時停止します。
そのとき、ローカルウィンドウには、objNameSpaceが出ているはずです。
これの名前の隣にあるプラスボタンをクリックするとこんな感じになります。
これらすべてがプロパティとして使うことが出来ます。
例えば、このようなコードを書いて実行してみます。
Sub PropatyTest()
Dim objNameSpace As Outlook.NameSpace
Set objNameSpace = Application.GetNamespace("MAPI")
MsgBox (objNameSpace.CurrentProfileName)
End Sub
MsgBoxの中身を「objNameSpace.CurrentProfileName」にしました。
objNameSpace.CurrentProfileNameは↓これに該当するので、実行すると「Outlook」というメッセージボックスが表示されます。
このように、ローカルウィンドウを見れば、欲しいデータを抽出するための「プロパティ」を調べることが出来ます。
ちょっと今回は難しいね~
ではまた別の記事で~
🦅バサバサ~
感想等はツイッターにお願いします。こちら。
くのへスタジオはこちら。
Outlook-VBAコーナーはこちら。
資料
GetDefaultFolder
番号 | コード形式 | 対象フォルダ |
3 | olFolderDeletedItems | 削除済みアイテムフォルダ |
4 | olFolderOutbox | 送信トレイフォルダ |
5 | olFolderSentMail | 送信済みメールフォルダ |
6 | olFolderInbox | 受信トレイフォルダ |
9 | olFolderCalendar | 予定表フォルダ |
10 | olFolderContacts | 連絡先フォルダ |
11 | olFolderJournal | 履歴フォルダ |
12 | olFolderNotes | メモフォルダ |
13 | olFolderTasks | タスクフォルダ |
16 | olFolderDrafts | 下書きフォルダ |
18 | olPublicFoldersAllPublicFolders | Exchangeパブリックフォルダ ※Exchangeアカウントでのみ |
19 | olFolderConflicts | 競合フォルダ ※Exchangeアカウントでのみ |
20 | olFolderSyncIssues | 同期の問題フォルダー |
21 | olFolderLocalFailures | ローカルの失敗フォルダ※Exchangeアカウントでのみ使用できます |
22 | olFolderServerFailures | サーバーの失敗フォルダー※Exchangeアカウントでのみ |
23 | olFolderJunk | 迷惑メールフォルダ |
25 | olFolderRssFeeds | RSSフィードフォルダ |
28 | olFolderToDo | ToDoフォルダー |
29 | olFolderManagedEmail | 管理フォルダーグループの最上位フォルダー ※Exchangeアカウントでのみ |
30 | olFolderSuggestedContacts | 連絡先候補フォルダ |