HTML 形式やリッチテキスト形式のメールの返信をテキスト形式とし、インデント記号を行頭に追加するマクロ


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


昨年11月まで、社内メールではNotesを使用していましたが、その後メールシステムはOffice365に
変更になりましたが、社内の大半の方は従来通り文字装飾等を行うために、何の装飾もないメールでも
HTML形式やリッチテキスト形式でメール送信が行われています。

しかし、私個人は文字装飾されたメールが見づらいために、これらメールに対してもテキスト方式に
変換して返信行うのですが、その変換の際に行頭のインデント文字が削除されてしまいます。

そこで、そもそもテキスト変換時にインデント文字の削除が行われない方法、あるいは、後から
インデント文字を挿入するマクロ等で実現する方法を探しましたが、見つけることができませんでした。

代案ではないですが、TEXT形式に変換した後のメールに対して
単純に、全行頭に”>”などのインデント文字を挿入するのも難しいのでしょうか?


以前、テキスト形式で指定文字数による折り返しを行うというマクロを作っていましたので、その応用で折り返した後にインデント文字を設定するマクロを作ってみました。
マクロは以下の通りです。実行すると現在開いているアイテム、もしくはアイテム一覧で選択しているアイテムの返信を作成し、本文をテキスト形式として折り返し後にインデント文字を設定します。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub ReplyWithWrap()
    Const LINE_MAX = 68 ' 折り返しの文字数を指定します
    Const QUOTE_CHAR = "> " ' インデントの文字列を指定します
    Dim objReply As MailItem
    Dim strBody As String
    Dim strNewBody As String
    Dim strLine As String
    Dim c As String
    Dim pCur As Long
    Dim pWB As Long
    Dim iLen As Long
    Dim bWrap As Boolean
    '
    If TypeName(ActiveWindow) = "Inspector" Then
        Set objReply = ActiveInspector.CurrentItem.ReplyAll
    Else
        Set objReply = ActiveExplorer.Selection(1).ReplyAll
    End If
    '
    strBody = objReply.Body
    strBody = Mid(Replace(strBody, vbCrLf, vbLf), 5) ' 先頭の改行とスペースを削除
    pCur = 1
    pWB = 0
    strNewBody = vbLf & vbLf & QUOTE_CHAR & "-----Original Message-----" & vbLf
    strLine = ""
    iLen = 0
    pc = ""
    bWrap = False
    While pCur <= Len(strBody)
        c = Mid(strBody, pCur, 1)
        If c = vbLf Then
            If Not bWrap Then
                strNewBody = strNewBody & QUOTE_CHAR & strLine & vbLf
            End If
            strLine = ""
            iLen = 0
            pWB = 0
            bWrap = False
        ElseIf Asc(c) < 0 Or &H7F < Asc(c) Then
            iLen = iLen + 2
            If iLen + 1 >= LINE_MAX Then
                strNewBody = strNewBody & QUOTE_CHAR & strLine & c & vbLf
                strLine = ""
                iLen = 0
                bWrap = True
            Else
                strLine = strLine & c
                bWrap = False
            End If
            pWB = Len(strLine)
        Else
            If c = " " Then
                pWB = Len(strLine) + 1
                bWrap = False
            End If
            iLen = iLen + 1
            If iLen >= LINE_MAX Then
                If pWB > 0 Then
                    strNewBody = strNewBody & QUOTE_CHAR & Left(strLine, pWB) & vbLf
                    strLine = Mid(strLine, pWB + 1) & c
                    If c = " " Then
                        If Mid(strBody, pCur - 1, 1) <> vbLf And Mid(strBody, pCur + 1, 1) <> " " Then
                            strLine = ""
                        End If
                    End If
                    bWrap = False
                Else
                    strNewBody = strNewBody & QUOTE_CHAR & strLine & c & vbLf
                    strLine = ""
                    bWrap = True
                End If
                iLen = LenB(StrConv(strLine, vbFromUnicode))
            Else
                strLine = strLine & c
                bWrap = False
            End If
        End If
        pCur = pCur + 1
    Wend
    If strLine <> "" Then
        strNewBody = strNewBody & QUOTE_CHAR & strLine
    End If
    objReply.BodyFormat = olFormatPlain
    objReply.Body = strNewBody
    objReply.Display
End Sub

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

広告

HTML 形式やリッチテキスト形式のメールの返信をテキスト形式とし、インデント記号を行頭に追加するマクロ」への3件のフィードバック

  1. お世話になります

    返答が遅くなり申し訳ありません。

    上記をリクエストしたものです。
    希望通りの動作をしました。

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

  2. ステキなマクロです。
    今までずっと全選択&切り取り→秀丸ペースト&全選択&引用符付きコピー→貼り付け
    してました。
    上記操作の自動化を考えていました。
    要望なのですがテキスト形式のメールに対して本マクロを実行すると引用符が二重に
    入ってしまいます。
    テキスト形式のメールの場合には通常の返信となるように出来ませんか?
    メール一覧のプレビュー表示ではテキスト形式かHTML形式かの区別が付かないのです。
    上記実現できればほぼ(Ctrl+R)に代用できます。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中