こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【OUTLOOK2007】VBAを使用して送信済みメールの宛先メールア

【OUTLOOK2007】VBAを使用して送信済みメールの宛先メールアドレスを取得したい

OUTLOOK2007を使用しています。
以下のVBAを使用して、送信済みメールの宛先の"メールアドレス"を取得しようと
考えています。

Sub getTo()
Set myFolder = Application.ActiveExplorer.CurrentFolder
For Each myItem In myFolder.Items
debug.print myItem.To
Next myItem
End Sub

送信済みメールフォルダを選択し、上記VBAを実行すると、
狙い通り宛先(myItem.Toの値)は取得できるのですが、
宛先がメールアドレス(例:suzuki@**.com)ではなく、
名前(例:鈴木)になってしまっているメールに関しては、
myItem.Toの値も“メールアドレス”ではなく名前になってしまいます。

どなたか、ご存知でしたら、
確実に宛先のメールアドレスを取得する方法をご教示いただけますでしょうか。
何卒、お願い申し上げます。

投稿日時 - 2010-04-14 13:54:10

QNo.5825393

すぐに回答ほしいです

質問者が選んだベストアンサー

私はOutlook2003環境なので、2007では動作確認できていませんが…。
 myItem.To
とする代わりに
 myItem.Recipients(1).Address
のようにすれば、受信者(宛先)のアドレスを取れると思います。

以下蛇足。

●Toに複数のアドレスが設定されていた場合…

Toプロパティはセミコロンで区切った単一のStringを返しますが
Recipientsプロパティはコレクションを返すので
総ての宛先を取得するには、Recipientsコレクションを回してやる必要があります。

'---↓ タトエバ ↓----------------------------------------
Sub getRecp()
 Set myFolder = Application.ActiveExplorer.CurrentFolder
 For Each myItem In myFolder.Items
  For Each myRecp In myItem.Recipients
   Debug.Print myRecp.Address
  Next myRecp
 Next myItem
End Sub
'---↑ コンナカンジ ↑------------------------------------

●ToにあるアドレスとCC,BCCにあるアドレスを区別する必要があるなら…

上記ではToにあるアドレスもCC,BCCにあるアドレスも同様に処理してしまうので
Toにあるアドレスのみを取得したい場合は
下記のようにRecipientオブジェクトのTypeプロパティで切り分ける必要があります。

'---↓ タトエバ ↓----------------------------------------
Sub getTo2()
 Set myFolder = Application.ActiveExplorer.CurrentFolder
 For Each myItem In myFolder.Items
  For Each myRecp In myItem.Recipients
   If myRecp.Type = olTo Then
    Debug.Print myRecp.Address
   End If
  Next myRecp
 Next myItem
End Sub
'---↑ コンナカンジ ↑------------------------------------

以上ご参考まで。

投稿日時 - 2010-04-14 15:25:39

お礼

_Kyleさん

早速のご回答ありがとうございます。
教えていただいた方法で、ばっちりメールアドレスが取得できました!

Recipientsプロパティはコレクションを返す上に、CC、BCCも含まれてしまうなんて、
同じmailItemオブジェクトのメンバでも、Toプロパティとはえらい違いなんですねぇ。

それはともかく、大変勉強になりました。
ありがとうございました。

投稿日時 - 2010-04-14 20:05:28

ANo.1

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問