返信メールの署名を削除するマクロ


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


Outlook2010環境の、署名(シグネチャ)について質問させてください。

「メールを選択しボタンを押すと、返信メールの上部に指定ファイルの内容を貼りつける」というマクロを作成中です。

貼りつけるところなどは完成したのですが、返信メールに各個人が設定している署名が挿入されてしまい、困っています。
※(Body = & Body)のようにしています。

記事「Outlook 2007 の署名」にある、挿入された署名にアクセスする方法で削除しようとしたのですが、「_MailAutoSig」Bookmarkが存在しません。
署名の文面自体は挿入されているのですが、Bookmarkとしては存在していない状態?です。

試しに、以下のようなコードで返信メールを作成しても同じで、署名の文面は存在するが、署名として認識できない(右クリックで切り替える事が出来ない)状況です。

Set objMail = ActiveExplorer.Selection(1).ReplyAll
objMail.Display

署名として認識できる形で返信メールを作成する方法(もしくは署名を消す方法)について、ご教示いただけますでしょうか。



確かに、Reply メソッドや ReplyAll メソッドなどを使用して返信を作成すると、表示されたメール本文で _MailAutoSig が存在しない状態になりますね。
おそらくユーザー操作で返信を行った場合と Reply メソッドなどで返信を行った場合とで内部処理に違いがあるものと思われます。
このような場合、ユーザー操作をマクロで実行させるという方法があります。
Inspector オブジェクトや Explorer オブジェクトには CommandBars というプロパティがあり、このプロパティがウィンドウのツール バーやリボンの操作に使用できます。
そして、CommandBars の ExecuteMso というメソッドを使用すれば、リボンのボタンをユーザーがクリックしたのと同等の処理が実行されるのです。
ExecuteMso を使用し、返信メールを作成して署名を削除し、代わりに「サンプルテキスト」という本文の先頭に入れるというマクロは以下のようになります。

' ここをトリプルクリックでマクロ全体を選択できます。
Private Sub ReplyWithoutSignature()
    Const INSERT_TEXT = "サンプルテキスト"
    Dim objMail As MailItem
    Dim objInspector As Inspector
    Dim objWord As Variant
    Dim objSignature As Variant
    ' 返信を実行
    If TypeName(Application.ActiveWindow) = "Inspector" Then
        ActiveInspector.CommandBars.ExecuteMso "ReplyAll"
    Else
        ActiveExplorer.CommandBars.ExecuteMso "ReplyAll"
    End If   
    ' 署名を削除
    Set objWord = ActiveInspector.WordEditor
    Set objSignature = objWord.bookmarks("_MailAutoSig")
    objSignature.Range.Text = ""
    ' 本文先頭に文字列を追加
    With ActiveInspector.CurrentItem
        .Body = INSERT_TEXT & .Body
    End With
End Sub

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

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中