スレッドを保ったまま任意の文字列を件名につけて返信するマクロ


コメントにて以下のご要望をいただきました。


スレッド機能について困っていることがあり、投稿させていただきました。
当方、今までは「Becky!」を利用しておりましたが、職場の方針で「Outlook 2010」に切り替えなくてはなりません。
業務としては、申請受付やお問い合わせ対応を行っており、多数のメールを並行的に処理するため、作業順や進捗状況管理のために、スレッド機能を利用していたのですが、Outlookのスレッド機能では、思ったように連結されません。(返信時に受付IDや進捗状況を件名に付加するためということは認識しております。)
スレッドの結合や切断機能もないため、かなり困っております。
過去の記事『Outlook でインターネットのメール スレッドを生成するマクロ』を読ませていただきましたが、「Outlook 2010」対応のものを作るご予定はございませんでしょうか。
現状のOutlookのスレッド方式でも良いので、選択しているメールを結合したり、切断できれば・・・と思い、いろいろ調べているのですが、情報がほとんどなく、そのようなことが可能なのか、また、どのように実装したら良いのか、全然わかりません。
上記について、どのようなマクロを作成したら良いか、ご教授いただけたらと思います。よろしくお願いします。



残念ながら、Outlook 2010 以降ではマクロなどでスレッドをコントロールすることができなくなりました。
そのため、すでに受信してしまったメールについては、スレッドを連結したり切断したりということはできません。
しかし、返信時に何らかの文字列を件名に追加することでスレッドが分割されるという現象については、ある程度マクロで防ぐことが可能です。
Outlook にはカスタム フォームでワークフローを実現するためにカスタム アクションという機能があります。
カスタム アクションでは、たとえば返信の代わりに「承認」というようなコマンドを追加し、そのコマンドを実行すると件名に「RE:」の代わりに「承認:」というような文字列を追加して返信メッセージを作成することができます。
そして、カスタム アクションにより件名が変更された場合、Outlook ではスレッドが維持された動作となります。
カスタム アクションはマクロでも追加ができるので、カスタム フォームでなくても任意の文字列を追加するようなカスタム アクションを実行できるようになります。
マクロのサンプルは以下の通りです。
件名に「OK:」を付ける場合は AddOKPrefix、「NG:」を付ける場合はAddNGPrefix、インプット ボックスで任意の文字列を追加するにはAddAnyPrefixを実行してください。

' ここをトリプルクリックでマクロ全体を選択できます。
' OK をつけるマクロ
Public Sub AddOKPrefix()
    AddPrefix "OK"
End Sub
' NG をつけるマクロ
Public Sub AddNGPrefix()
    AddPrefix "NG"
End Sub
' 任意の文字列を入力して付与するマクロ
Public Sub AddAnyPrefix()
    Dim strPrefix As String
    strPrefix = InputBox("付与する文字列:")
    If strPrefix <> "" Then
        AddPrefix strPrefix
    End If
End Sub
' 文字列を件名の前につけるサブプロシージャ
Private Sub AddPrefix(strPrefix As String)
    Dim objAction As Action
    Dim objItem As MailItem
    Dim objReply As MailItem
    If TypeName(Application.ActiveWindow) = "Inspector" Then
        Set objItem = ActiveInspector.CurrentItem
    Else
        Set objItem = ActiveExplorer.Selection(1)
    End If
    Set objAction = objItem.Actions.Add
    objAction.Name = strPrefix
    objAction.Prefix = strPrefix
    objAction.ReplyStyle = olUserPreference
    objAction.ShowOn = olDontShow
    Set objReply = objAction.Execute
    objReply.Display
    objItem.Save
End Sub

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

スレッドを保ったまま任意の文字列を件名につけて返信するマクロ」への7件のフィードバック

  1. この度のご相談の件について、マクロ作成およびカスタム アクションについてご教授いただき、ありがとうございます。
    「カスタム アクション」という機能があったことは全然知らなかったので、驚きでした。
    作成していただいたマクロについていくつか質問させていただいてもよろしいでしょうか。
    「Prefix」と「subject」の間に入る「: 」を削除することは可能でしょうか。
    受付ID付与後に、別のIDを受付IDの後ろに付与することもあるのですが、先頭に限定するのではなく、途中や末尾に文字を付加したり、ある意味、件名を自由にアレンジできたら良いのですが、やはり難しいでしょうか。(解決後に付与したIDを削除したりするこもあるため。)
    クイック操作で、アクションを追加する際に、件名が「返: 」となっており、には元メールの件名が引き継がれ、その前後に文字を付加したり、を削除すると、好きな件名に変更できたりします。元メールの件名(表示のみ)と、これから送信するメールの件名(InputBoxで、初期値は元メールの件名)が表示されるフォームを表示して、これから送信するメールの件名を好きにアレンジしてOKすると、その件名がセットされる・・・というような機能があれば、要件が満たされるのですが、VBAで実現可能でしょうか。
    ヒントだけでも構いませんので、ご教授いただけたらと思います。よろしくお願いいたします。

    • 残念ながら:を削除することはできません。
      また、アクションで変更できるのはあくまでも先頭の文字列だけであり、途中や最後に別の文字列を追加することもできません。
      これは、Outlookが使用するMAPIというインターフェイスで件名の先頭の文字列だけがPR_PREFIXという別のプロパティで管理されるためです。

      • 早々に返信コメントをいただき、ありがとうございます。
        やはり、「:」の削除や先頭以外に文字を付加することはできないんですね。
        なかなか思ったようにならないものだということを認識いたしました。

        この度は、いろいろとご教授いただき、本当にありがとうございました。
        作成していただいたマクロにより、今までよりは、スレッドにまとめることができるようになるので、助かりました。

        また、困ったことが起きたら、ご相談させていただきます。
        今後とも、よろしくお願いいたします。

  2. このマクロを大変便利に使わさせていただいております。
    転送時も同様な事が出来るとさらに便利になります。

    その場合、どのようにマクロを変更したらよいでしょうか。
    ご教授いただけたらと思います。よろしくお願いいたします。

  3. いつもお世話になっております。
    本VBAの任意文字列の部分を使って、「承認します」「解決しました」などその都度内容を変えて
    返信する際に、大変便利で助かっています。ありがとうございます。

    ちなみに、現在では、このマクロを実行後、作成されるメールアドレスは、元のメールの発信者のみですが、
    これを元のメールのCC宛先も含めることは可能でしょうか。
    可能な場合、どのようにVBAを修正すれば良いかお教えいただければ幸いです。よろしくお願いいたします。

  4. このマクロを使って、件名を追加してもスレッド表示することが出来る様になりました。
    が、このメールに返信すると、追加した部分が削除されてしまいます。
    下記のように使用したいため、返信の際に追加した件名を残したいです。
    なにか方法はありますか?

    現状  Aさん テスト送信
         Bさん 【最終回答】: テスト送信(マクロ)
          Cさん Re:テスト送信

    理想  Aさん テスト送信
         Bさん 【最終回答】: テスト送信(マクロ)
          Cさん 【確認】【最終回答】: テスト送信

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中