コメントにて以下のようなご要望をいただきました。
Outlook2010を使用しています。
ほぼ1年前の124のコメントで「ある」さんが書かれていますが、私も送信してみないと折り返しの状況がわからないのは大変不便に感じています。
「ある」さんのご要望は送信前のプレビューでしたが、いっそのことVBAで強制的に改行させることはできませんでしょうか?
使い方としては、
1.普通にメールを作成
2.整形したい部分を範囲選択
3.マクロ実行で、その部分を整形(折り返し桁数で改行)
4.必要に応じて修正
5.メールを送信
のような感じです。
高機能な整形は不要で、単純に強制改行させるだけで良いのですが、マクロのご検討をお願いできませんでしょうか?
こちら、選択した範囲ではなくメール本文全体を折り返すということであれば、以下のようなマクロで可能です。一応、半角英数字で構成される単語は途中で改行しないようなロジックを入れたため、ちょっと複雑になっています。
' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub WrapLines()
Const LINE_MAX = 70 ' 折り返しの文字数を指定します
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
'
strBody = ActiveInspector.CurrentItem.Body
strBody = Replace(strBody, vbCrLf, vbLf)
pCur = 1
pWB = 0
strNewBody = ""
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 & 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 & 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 & 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 & 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 & strLine
End If
ActiveInspector.CurrentItem.Body = strNewBody
End Sub