VBA を使用して、送信前にすべての送信電子メール メッセージを特定の方法でフォーマットしています。たとえば、メールに埋め込まれているすべてのテーブルから最初の列を削除したいと考えています。次のコードを使用します。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim wd As Word.Document
Set wd = ActiveInspector.WordEditor
Dim tb As Word.Table
For Each tb In wd.Tables
tb.Columns(1).Delete
Next tb
End Sub
上記のコードは完全に機能します。ただし、問題は、メール テキストだけをフォーマットしたいということです。他の人の電子メールに返信したり、転送したりすることがよくあります。つまり、前の電子メールのテキストが同じインスペクタ ウィンドウに表示されます。テキスト/画像などをフォーマットしたくありません。スレッド内の以前のメールの。これはどのように達成できますか?
スレッド内の各メールは、すべて同じウィンドウに表示されますが、個別のユニットであることを知っています。スレッドの一部であるメールを読んでいるときに、マウスを動かすと、
画面の右側にあり、スレッドの次の部分がどこにあるかを示します。スレッドの一部である新しい電子メール (返信または転送) を作成する場合、上記のボタンは表示されませんが、スレッドのさまざまな部分を互いに分離する青い水平線が引き続き表示されます。
メールで最初に出現する行を検索し、その時点までの書式設定のみを適用できるのではないかと考えていました。ただし、この行は実際にはテキストでも、通常の意味で検索可能な通常の書式設定でもないようです。実際、電子メールのテキストを (送信前に) コピーして Word に貼り付けると、行が消えます。
助言がありますか?ありがとう!
アップデート
私の質問は、バージョン 2010 以降にある「会話ビュー」とは何の関係もありません。Outlook 2010 では、スレッド内の他のメールを 1 つのグループで表示できます。ただし、私が望むのは、同じ email 内のスレッド内の電子メールを (コードを介して) ループできるようにすることです。したがって、メール「a」、返信「b」、さらに別の返信「c」があった場合、c にはその下に b が含まれ、その下に a がすべて同じメール内に含まれます。擬似コードでは、次のものが必要です。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim wd As Word.Document
Dim smail as SubEmail
Dim tb As Word.Table
Set wd = ActiveInspector.WordEditor
For Each smail in wd
For Each tb In wd.Tables
tb.Columns(1).Delete
Next tb
Exit For
Next smail
End Sub
アップデート
Exchange Web サービスで UniqueBody と呼ばれる同様の機能を見つけました。ここを参照してください。それはまさに私が探しているものですが、Exchange ではありません。