016 Outlook VBA Parentプロパティとオブジェクト構造

こんにちは、くのへ@MasazaneKunoheです。

前回の記事では、オブジェクト構造について整理しましたが、それは言わば上から下への流れの説明でした。

しかし、Parentプロパティを使うと、下から上を参照することが出来ます。

オブジェクト構造の復習

前回の解説では、OutlookはMAPIというNameSpaceを最上位にした次のような構成になっていることを解説しました。

MAPI
 ┗Folders
   ┗Item 1 ←メールアカウントのこと
    ┗Name ←メールアカウントアドレス
    ┗Folders
      ┗Item 1 ←ゴミ箱
      ┗Item 2 ←受信トレイ
        ┗Items ←メールアイテムが入っている場所
          ┗Item 1 ←1番目のメール
            ┗To ←宛先
            ┗Subject ←件名
            ┗Body ←本文
        ┗・・・ ←2番目以降のメール
      ┗Item 3 ←送信トレイ
      ┗Item 4 ←送信済みトレイ
      ┗・・・ ←その他のトレイやタスクフォルダなど

Parentプロパティを使うと

Parentプロパティを使うと、自分の上位のプロパティを参照することが出来ます。
ただし、すぐ上のItemsプロパティを参照するわけではなく、下の図の通り2つ上の受信トレイを参照します。
面白いことに「Items」にもParentプロパティがあるのですが、これは1つ上の受信トレイを指します。

同様に、さらに上位のプロパティにもParentプロパティは存在し、下図の通り類似挙動を示します。

このParentプロパティを使うと、Selectionメソッドなどで「メール」を出発点にした時でも、その上位プロパティを調べることが出来ます。
これにより、保存先のトレイ(:受信トレイとか送信トレイとか)を調べることなどが出来ます。
具体例は次章参照。関連記事はこちらを参照ください。

直接メールなどのアイテムを取得するコード

前章の内容を確かめるために、以下のコードを書いてみます。

Sub 選択アイテムをobjItemに代入するコード()
  
  Dim objSelect As Outlook.Selection
  Dim objItem As Object
  Set objSelect = Outlook.Application.ActiveExplorer.Selection
  Set objItem = objSelect.Item(1)

  Stop

End Sub

そして、受信トレイの一番目のメールを選択してからこのコードを実行してみてください。
Stopでプログラムが停止しますが、この時のobjItemには↓この図のItem 1が代入された状態になります。

Stopでプログラムを停止させたまま、ローカルウィンドウでobjItemを開いてみましょう。
↓このとおり、メールアイテムのプロパティである「BCC」「Body」「CC」、、、と並び、「Class」もメールオブジェクトを表す「olMail」になっています。

これらはobjItemのプロパティ、すなわち最初の図で言うところの「Item 1」の下位のプロパティのみが見えている状態になっています。

この状態で、ローカルウィンドウの下の方に視点を移動させ、objItemのParentプロパティを開いてみましょう。

おぉ!!上位の「受信トレイ」が見えます。
ここは、↓この図のItem 2に相当する場所になっています。

Parentプロパティって、こういうことね。

無限ループも出来る(笑)

当然ながら上位のプロパティに戻ったということは、その中に「Items」も「Item 1」もあります。

このItem 1は元のobjItemと同じものです。

つまり、やっぱりItem 1にもParentプロパティがあり ⇒ これを開くと、ItemsとItem 1があり⇒、、、

も、もう一回遊べるド~~~ンw

無限ループしますw
でもこの仕組みを知っていたら当然と言えば当然の構造ですね!


今回もちょっと難しいですね~
Parentプロパティのメインの使いどころは、メールがどの保存トレイにあるのかを調べる時だと思います。

ではまた別の記事で~
🦅バサバサ~

感想等はツイッターにお願いします。こちら。
くのへスタジオはこちら。
Outlook-VBAコーナーはこちら。

コメントを残す

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