送信済みアイテム フォルダの宛先を連絡先の表示名に置き換えるマクロ


コメントで以下のようなご要望をいただきました。


送信メールの”宛先”について、表示名の置き換えが出来ないかと考えました。

同じ人からいただいたメールで、メールアドレスに表示名が付いたり、付かなかったり、他の方が発信したメールの転送・返信メールだと表示名が異なっていたりするため、自分でメール返信等を行った後に、名前でソート等を行うと、これらが全て別人として扱われ不便なため、受信メール同様、Outlook上だけでも、表示名の統一ができないかと思ったものです。
(メール返信時にメールアドレスを統一できればこんなことが起こらないのですが、急ぎの場合に失念したり、既に送信済のメールもあるため)

以上、よろしくお願いします。



ご要望のマクロは以下の通りになります。ResolveAllInSentMail を実行すると、送信済みアイテム フォルダのメールの宛先がアドレス帳の連絡先の表示名に置き換えられます。なお、送信済みアイテムが多数あると実行に時間がかかるため、選択したアイテムのみ宛先を変更する ResolveAllSelected も用意しました。

' ここをトリプルクリックでマクロ全体を選択できます。
'  送信済みアイテムフォルダのメールの宛先を置き換えるマクロ
Public Sub ResolveAllInSentMail()
    Dim objMail 'As MailItem
    For Each objMail In Session.GetDefaultFolder(olFolderSentMail).Items
        If objMail.MessageClass = "IPM.Note" Then
            ResolveName objMail
        End If
    Next
End Sub
'  現在のフォルダで選択されたメールの宛先を置き換えるマクロ
Public Sub ResolveAllSelected()
    Dim objMail 'As MailItem
    For Each objMail In ActiveExplorer.Selection
        If objMail.MessageClass = "IPM.Note" Then
            ResolveName objMail
        End If
    Next
End Sub
'
Private Sub ResolveName(ByVal objMail As MailItem)
    Dim objRecip As Recipient
    Dim objRecipInAB As Recipient
    Dim objAddrList As AddressList
    Dim i As Integer
    Dim objAddrEntry As AddressEntry
    Dim bFound As Boolean
    Dim bSave As Boolean
    '
    bSave = False
    For i = objMail.Recipients.Count To 1 Step -1
        Set objRecip = objMail.Recipients.Item(i)
        bFound = False
        For Each objAddrList In Session.AddressLists
            If objAddrList.Name = "連絡先" Then
                For Each objAddrEntry In objAddrList.AddressEntries
                    If objAddrEntry.Address = objRecip.Address And objAddrEntry.Name <> objRecip.Name Then
                        objMail.Recipients.Remove i
                        Set objRecipInAB = objMail.Recipients.Add(objRecip.Address)
                        Set objRecipInAB.AddressEntry = objAddrEntry
                        objRecipInAB.Type = objRecip.Type
                        bFound = True
                        bSave = True
                        Exit For
                    End If
                Next
                If bFound Then
                    Exit For
                End If
            End If
        Next
    Next
    If bSave Then
        objMail.Save
    End If
End Sub

マクロの登録方法やメニューへの追加について

送信済みアイテム フォルダの宛先を連絡先の表示名に置き換えるマクロ」への10件のフィードバック

  1. 依頼を行った、元スレッドの方をチェックしていて、こちらのスレッドに気付くのが遅くなり申し訳ありません。

    作成いただいたマクロ、希望通り動作いたしました。

    対応ありがとうございました。

  2. はじめまして。VBA初心者のサトシと言う者です。

    ここのサイトにはとても感謝しております。
    いつも活用させて頂いております。

    さて、このマクロに関して質問があります。
    私の環境では、うまく動きません。
    送信済みアイテム フォルダの宛先を個人用連絡先の表示名へ置き換えられません。
    お忙しいと存じていますが、ご教示を頂きたく宜しくお願いいたします。

    【動作環境】
    Outlook2003 & ExchangeServer & WindowsXP

    【動作状況】
    マクロ内「If objAddrList.Name = “連絡先” Then」にて、「グローバルアドレス一覧」などの
    値が入り、「連絡先」が入らずにマクロが終了します。

    以上です。宜しくお願いいたします

      • どうもすいません。
        「連絡先」とは、「予定表」や「履歴」、「仕事」などと同じです。
        ちなみに、ここの別のマクロ「メッセージの差出人を連絡の表示名に置き換え、
        さらに・・・・マクロ」では、正常に動作しました。
        サポートの程、宜しくお願いいたします。

      • 申し訳ありません。
        アドレス帳に連絡先を追加したら、正常に動作しました。
        ご迷惑をお掛けしました。お詫びいたします。

        今後とも宜しくお願いいたします。

  3. 個人的な使い勝手としては、表示名に置き換えるのではなく、メールアドレスに置き換えられれば非常に使いやすいのですが、マクロ修正で対応できるものでしょうか。

  4. 疑問・質問・マクロの要望へコメントさせて頂き
    こちらのページを教えて頂きました。
    ありがとうございます。
    こちらのマクロを試してみましたが、
    上でコメントされているサトシさんと同じ状況で<グローバルアドレス一覧>の値が入り、「連絡先」が入らずにマクロが終了します。
    アドレス帳に連絡先は登録されているのは確認しましたが、うまく動きません。
    環境はwindows7、outlook2010です。
    お忙しいところ恐れ入りますが、ご教示お願いいたします。

  5. はじめまして。こちらのマクロ、便利に使用させて頂き大変助かっております。

    宛先にアドレスが複数入っていた場合、宛先の順序が逆順になってしまいます。

    別のマクロでは宛先の順番が維持されるように変更されているようなので、
    それを参考に自力で同じように直そうとしたのですが、うまく行きません。
    時間が経っている件で、申し訳ないのですが、もしまだコメントを確認されているようであれば、対応して頂けるとうれしいです。
    または修正方法のヒントを頂くだけでも助かります。
    よろしくお願い致します。

  6. 初めまして、いつも活用させていただいております。ありがとうございます。

    ド素人に教えて下さい。
    「現在のフォルダで選択されたメールの宛先を置き換えるマクロ」が問題なく使えていたのですが、
    PCの再インストール後に使えなくなりました。
    証明書やセキュリティなどは処置済みです。

    「コンパイルエラー:SubまたはFunctionが定義されていません」と表示され、
    1行目のSub ResolveAllSelected()が黄色の着色、5行目のResolveNameが青反転します。

    どこがいけないのでしょうか? ヒントを頂ければ幸いです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中