5

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 ではありません。

4

1 に答える 1

1

"From:" chr(13) "Sent:" を探してみませんか? Outlook は、送信元に関係なく、これらのタグをすべてのメールに挿入します。

上記の例の電子メール a、b、c の本文全体が sBody にあるとします。

Sub GetFirstThread()
    Dim olItem As Outlook.MailItem
    Dim sText As String

    Set olItem = ActiveExplorer.Selection.Item(1)
    sBody = olItem.Body
    i=1
    While i < Len(sBody)
        If Asc(Mid(sBody, i, 1)) = 13 Then 'Look for From:
            If Mid(sBody, i + 1, 5) = "From:" Then
                'we found the start of email b
                nPosEb = i
            End If
        End If
        i=i+1
    Wend
     '...do something with nPosEb
End Sub
于 2014-01-03T18:09:16.627 に答える