015 Outlook VBA オブジェクト構造

こんにちは、くのへ@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」は「受信トレイ」を表します。その他は以下参照。

番号コード形式対象フォルダ
4olFolderOutbox送信トレイフォルダ
5olFolderSentMail送信済みメールフォルダ
6olFolderInbox受信トレイフォルダ
9olFolderCalendarカレンダーフォルダ
13olFolderTasksタスクフォルダ
16olFolderDrafts下書きフォルダ

上記の他にも色々とあるので、この記事の一番下の「資料」コーナーに貼っておきます。

オブジェクト構造の分析方法

上の章では、基本的なオブジェクト構造の説明と、プロパティの使い方を紹介しました。
しかし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

番号コード形式対象フォルダ
3olFolderDeletedItems削除済みアイテムフォルダ
4olFolderOutbox送信トレイフォルダ
5olFolderSentMail送信済みメールフォルダ
6olFolderInbox受信トレイフォルダ
9olFolderCalendar予定表フォルダ
10olFolderContacts連絡先フォルダ
11olFolderJournal履歴フォルダ
12olFolderNotesメモフォルダ
13olFolderTasksタスクフォルダ
16olFolderDrafts下書きフォルダ
18olPublicFoldersAllPublicFoldersExchangeパブリックフォルダ ※Exchangeアカウントでのみ
19olFolderConflicts競合フォルダ ※Exchangeアカウントでのみ
20olFolderSyncIssues同期の問題フォルダー
21olFolderLocalFailuresローカルの失敗フォルダ※Exchangeアカウントでのみ使用できます
22olFolderServerFailuresサーバーの失敗フォルダー※Exchangeアカウントでのみ
23olFolderJunk迷惑メールフォルダ
25olFolderRssFeedsRSSフィードフォルダ
28olFolderToDoToDoフォルダー
29olFolderManagedEmail管理フォルダーグループの最上位フォルダー ※Exchangeアカウントでのみ
30olFolderSuggestedContacts連絡先候補フォルダ

出典 Microsoft Docs

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です