こんにちは、くのへ@MasazaneKunoheです。
この記事のローカルウィンドウを使ったオブジェクトモデル分析で、欲しいプロパティをなかなか見つけられないことがあります。
例えば添付ファイルが「埋め込み画像」なのか、ちゃんとした添付ファイルなのか、判別できるプロパティはなかなか見つかりません。
オブジェクトモデルから手に入らないプロパティはどうしようもないよね~~~
いや、諦めるのはまだ早い!!
そんな時はPropertyAccesser.GetProperty(名前空間)メソッドだ!!
この記事ではPropertyAccesser.GetProperty(名前空間)メソッドの使い方と、名前空間について解説します。
また、どうやら「名前空間」がいい感じに纏められている記事は無さそうなので、私が出会った名前空間を都度メモしていくことで、いい感じに使える辞書みたいになればいいな、と思います。
PropertyAccessor.GetPropertyメソッド
PropertyAccessor.GetPropertyメソッドを用いると、ローカルウィンドウ分析で出てこないプロパティを参照することが出来ます。このメソッドの書式はこちらです。
アイテムオブジェクト.PropertyAccessor.GetProperty(名前空間)
ここで、「名前空間」はこのような文字列を記載します。
https://schemas.microsoft.com/mapi/proptag/0xHHHHHHHH
名前空間は、一見Webサイトのような文字列になっていますが、Outlookが謎のホームページにアクセスするわけではありません。URLっぽいコードだと思ってOKです。
この「0xHHHHHHHH」のHの文字を所定の文字に変えることで、所定のプロパティを指すことが出来ます。
ちなみに、0xHHHHHHHHの前が「Proptag」になっていますが、これはプロパティタグ(Property Tag)の略です。
プロパティタグ以外にもPropertyAccessor.GetPropertyメソッドに入力できる名前空間があります。他の名前空間については↓こちらの公式Docsを参照ください。(激むず)
0xHHHHHHHH
HHHHHHHHは、0~Fまでの8文字の文字列です。(いわゆる16ビットね)
この前半4文字が対象のプロパティ、後半4文字がタイプを表しているそうです。
ちょっとむずいよね~
とにかく使えればいいので、私が出会ったProptag(0xHHHHHHHH)とその使い方をどんどんメモって行きます。
0x10810003:メールを返信・全員に返信・転送済みかチェック
「0x10810003」をメールアイテムオブジェクトに対して使うと、そのメールに対して、返信・全員に返信・転送がされたかどうかのステータスが数字データとして返ります。
Dim intReplyStatus As Integer
intReplyStatus = _
objMailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10810003")
'intReplyStatus = 102: 返信, 103: 全員に返信, 104: 転送, 0: 返信・転送がされていない
出典:以下リンク先。ツイッターでご紹介頂いたTakeruさん、ありがとうございます。
Outlook VBAでメールにリプライした日時を取得する · GitHub
0x3712001F:添付ファイルが埋め込み画像か判別
「0x3712001F」をメールの添付アイテムオブジェクトに対して使うと、その添付アイテムオブジェクトが埋め込み画像かどうかが分かります。(返り値がなければ、埋め込み画像ではない)
If objAttachment.PropertyAccessor. _
GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F") = "" then
(処理)
End if
メールと添付資料を一発保存マクロで使ってます。
どんどん増えて辞書みたいになればいいな~
🦅バサバサ~