次の方法で共有


excel vbaでメール作成の.Bodyで本文が勝手に改行してしまいます。

質問

2020年2月20日木曜日 8:16

お世話になっております。

エクセル VBAでメールを作成しようとしてますが、本文の.Bodyをセルを&でつなげて作成しています。

例えば、

Dim Honbun As String

Honbun = Range("A1").Value & vbLf _

               Range("A2").Value & vbLf _

                    :

               Range("A15").Value

Debug.Print Honbun

.Body = Honbun

.BodyFormat = olFormatPlain

.Display

のような形ですが、デバッグプリントでは、問題ないのですが、.Displayで表示させると、

長い行(URLですが、)最後の少し前で、改行されてしまいます。

メールのフォームに改行の字数を設定するところがあるのでしょうか。探したのですが、見つけることができませんでした。

よろしくお願いいたします。

               

すべての返信 (3)

2020年2月20日木曜日 14:05 ✅回答済み

なおメールが改行されてしまうのは、RFC5322 (あるいはその前身の RFC2822) の 2.1.1. Line Length Limits の項で、下記のように定められているためです。

There are two limits that this specification places on the number of
characters in a line.  Each line of characters MUST be no more than
998 characters, and SHOULD be no more than 78 characters, excluding
the CRLF.

ざっくり言えば、メール本文の各行は、改行(CRLF)を除いて半角 78 文字までにすることが求められている、ということですね。(多少の超過は許容されるものの、最大で 998 文字まで)

そしてテキスト形式以外(HTML 形式、リッチテキスト形式)だと自動改行されないのは、送信データの改行が文章の改行とは別物であるためです。


2020年2月20日木曜日 12:27

これは、Outlook.MailItem オブジェクトを使用されているのでしょうか?

だとしたら、Outlook のオプション設定 [メール]-[メッセージ形式]-[指定の文字数で自動的に文字列を折り返す] の影響を受けているのだと思います。(30~132 の範囲で指定:初期値は 76)

自動折り返しを避けたいのであれば、BodyFormat を olFormatPlain に差し替えてから、Body を書き込むようにしてみては如何でしょう。


2020年2月21日金曜日 1:55

ありがとうございます。

リッチテキストフォームに変えたところうまくいきました。

感謝いたします。

書き忘れました。

>Outlook のオプション設定 [メール]-[メッセージ形式]-[指定の文字数で自動的に文字列を折り返す]

は変えて見ましたが、影響はありませんでした。