今回は少し難しい内容となります。
Outlook VBAを扱うにあたり、サンプルコードをコピペだけで済ませるように構成を考えていましたが、設定が必要なケースがほとんどであり、その設定操作の対象となるオブジェクトについてその概念を理解しておかないと設定でつまずくことになるので説明が必要だと判断しました。
そこで今回はオブジェクトについてなるべくカンタンに説明をしたいと思います。
オブジェクトとは
オブジェクトとは、受信アイテムやフォルダ、受信者の情などVBAで何か操作をしようとする対象となるそのものを指し、Outlookではそれをオブジェクトモデルと呼びます。
Outlookの主なオブジェクトモデルは次のようなものがあります。
| 要素名 | 概要 |
|---|---|
| Application | Outlookアプリケーションそのもののこと。 |
| NameSpace | メールボックスのデータへアクセスする空間のこと。名前は”MAPI”の一択。 |
| Folders | 受信トレイなどOutlook のフォルダのコレクション。 |
| Items | メールアイテム(メール、予定、連絡先、タスクなど)のコレクション。 |
| Attachment | 添付ファイルにアクセスするためのオブジェクト。 |
| AddressList | アドレス帳にアクセスするためのオブジェクト。 |
| Inspector | 表示中のウインドウのアイテムにアクセスするためのオブジェクト。 |
| Search | Outlookで検索に関する情報にアクセスするためのオブジェクト。 |
| Results | Search オブジェクトと AdvancedSearchメソッドで取得されたデータおよび結果を格納するためのオブジェクト。 |
また、オブジェクトのFoldersやItemsなど一つのオブジェクトに複数の子オブジェクトが含まれるケースがあります。これをコレクションと言い、そのオブジェクトを利用する際にはコレクション内に含まれるオブジェクトの場所を指定をする必要があります。
また、コレクションは以下のような階層構造になっています。
Application
|
+- NameSpace "MAPI"
| |
| +- Folders
| |
| +- Folder
| +- 受信トレイ
| +- 下書き
| +- 送信済みアイテム
| |
| +- Items
| |
| +- Item
| +- Attachment
|
|
+- Inspectors
| |
| +- Inspector
|
+- Search
|
+- Results
最上位には「Application」オブジェクトがあり、Outlook というアプリケーション ソフトそのものをあらわすオブジェクトです。いわゆる木の根っこの部分に該当し、順に空間、フォルダコレクション、各フォルダ、と枝分かれし階層が深くなっていく構造となっています。
またこの図からわかる通り下位層のオブジェクトを扱う場合は「Application」オブジェクトと「NameSpace “MAPI”」を経由することになるので、指定が必要になってきます。
気になる”MAPI”についてですが、公式サイトでは、
NameSpace オブジェクトは、MAPIのセッションに該当するものであり、アドレス帳やメッセージ ストアのプロバイダによって提供されるデータにアクセスするためのインターフェイスとなるものです。
とありましたので、”MAPI”はメールボックスに保管されているメールデータをPC側のOutlookからアクセスする上で必要な通信手段ぐらいに覚えておきましょう。まあ、呪文ぐらいに思ったほうがよいかもしれませんね。
なお現時点では “MAPI” 以外の NameSpace を取得することはできないようです。
オブジェクトの使い方
使い方はまず「Dim」で変数をオブジェクト型に定義し、その変数に値を格納する時、左に「Set」を付けます。
Dimでオブジェクト型の変数を定義します。
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As Outlook.Folder
MAPI空間をセットします。
Set myNameSpace = Application.GetNameSpace(“MAPI”)
続いて受信トレイフォルダをセットします。引数の「olFolderInbox」は種類を指定するものになります。また値“6”でも指定が可能です。
フォルダの種類指定は主に以下のものがあります。
| 指定値 | 値 | 説明 |
|---|---|---|
| olfoldercalendar | 9 | 予定表フォルダー。 |
| olfolderconflicts | 19 | 競合フォルダー (同期の失敗フォルダーのサブフォルダー)。?Exchange アカウントの場合のみ。 |
| olfoldercontacts | 10 | 連絡先フォルダー。 |
| olFolderDeletedItems | 3 | 削除済みアイテム フォルダー。 |
| olfolderdrafts | 16 | 下書きフォルダー。 |
| olfolderinbox | 6 | 受信トレイフォルダー。 |
| olfolderjournal | 11 | 履歴フォルダー。 |
| olfolderjunk | 23 | 迷惑メール フォルダー。 |
| olfolderlocalfailures | 21 | ローカルの失敗フォルダー (同期の失敗フォルダーのサブフォルダー)。?Exchange アカウントの場合のみ。 |
| olFolderManagedEmail | 29 | 管理対象のフォルダー。グループの最上位フォルダー。 |
| olfoldernotes | 12 | メモフォルダー。 |
| olfolderoutbox | 4 | 送信トレイフォルダー。 |
| olfolder | 5 | 送信済みアイテムフォルダー。 |
| olfolderserverfailures 失敗 | 22 | サーバーの失敗フォルダー (同期の失敗フォルダーのサブフォルダー)。?Exchange アカウントの場合のみ。 |
| olFolderSuggestedContacts | 30 | 連絡先候補フォルダー。 |
| olfoldersyncissues 問題 | 20 | 同期の失敗フォルダー。?Exchange アカウントの場合のみ。 |
| olfoldertasks | 13 | タスクフォルダー。 |
| olfoldertodo | 28 | To Doフォルダー。 |
| olpublicfolders allpublicfolders | 18 | Exchange パブリックフォルダー。ストア内の All Public Foldersフォルダー。Exchange アカウントの場合のみ。 |
| olFolderRssFeeds | 25 | RSS フィードフォルダー。 |
上記の受信トレイなどOutlook 起動時に作成される既定のフォルダについては NameSpace オブジェクトの GetDefaultFolder メソッドを利用し取得する方法が一般的のようです。
Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
数字でも位置指定をすることができます。(6)は上記表の値から受信トレイを指すことになります。また数字の部分をインデックス番号と呼びます。
Set myFolder = myNameSpace.GetDefaultFolder(6)
続いてフォルダ名を取得してみます。受信トレイ内のフォルダはFoldersに格納され、複数個ありますのでその場合はコレクション扱いとなります。
サンプルは1番目を指定し「受信トレイ」がイミディエイトウィンドウに表示されます。
Debug.print myFolder.Folders(1)
Inspectorオブジェクトについて
オブジェクトを語る上でInspector(インスペクター)オブジェクトも欠かせない存在になっています。
Inspectorオブジェクトは今開いているOutlookのウインドウ(メール、予定、連作先など)のアイテム(メール本文や宛先アドレスや件名、添付ファイルなどなど)が含まれ、アクセスする際に使用します。
MAPI経由でオブジェクトを作成する場合では最大でOutlookアプリケーション全体のアイテムが含まれることになりますが、このInspectorオブジェクトを使うと開いているウインドウのアイテムのみに絞られますので軽量化がされ効率的にアイテムの利用ができるようになります。
記述もCurrentItemのほうが効率的ですね。
・MAPI経由の記述
Application.GetNameSpace(“MAPI”).GetDefaultFolder(6).Items(1)
・CurrentItem指定の記述
ActiveInspector.CurrentItem
エク短でもハイパーリンクに関する操作で利用しています。使用例としてご参考いただければと思います。
カンタンに説明しますと、Inspectorオブジェクトを取得するメソッドはActiveInspectorメソッドとなります。
サンプルはActiveInspectorメソッドでメール本文のワード編集領域を取得し、オブジェクトとして定義しています。
Set objWord = ActiveInspector.WordEditor
また、CurrentItemプロパティを使うと今開いているメールのうち一番手前のメールのアイテムを取得できます。こちらのほうが多くのアイテムが含まれますので、参照したり編集する領域が広範囲であればこちらを選択したほうがよいでしょう。
Set objWord = ActiveInspector.CurrentItem
またプロパティ指定でさらに絞り込むことができます。
たとえば、
CurrentItem.Subject:件名
CurrentItem.Body:本文
CurrentItem.To:宛先
CurrentItem.receivedTime:受信日時
CurrentItem.Attachments:添付ファイル
のようなものが可能です。
図にするとこのような感じです。
Application
|
+- ActiveInspector
|
+- CurrentItem
|
+- 件名
+- 本文
+- 宛先
+- 受信日時
今回のオブジェクトはここまでとし、次回はオブジェクトを操作するためのプロパティとメソッドについてご説明をいたします。









コメントを残す