Outlook VBAでメール本文を改行したいときはないでしょうか。
けど、そんな中で悩むことは、
・Outlook VBAでメール本文に改行コードを入れたがうまく改行できない。
ですよね。
今回はそんなお悩みを解決する
・Outlook VBAでメール本文が改行されない原因と対処法
についてまとめます!
もくじ
Outlook VBAでメール本文を改行するイメージ
Outlook VBAでメール本文を改行するイメージについて説明をします。
メールをOutlook側のマクロを実行すると自動生成される仕組みを用意し、
メール本文に改行付き文章を代入すると、
.Body = "宛先各位" & strBr _
& "以下の通り報告いたします。" & strBr & strBr _
& "9:00:朝礼" & strBr _
& "10:00:商品納品" & strBr _
& "13:00:定例会" & strBr _
& "15:00:定期作業" & strBr _
& "17:00:日報作成" & strBr & strBr _
& "以上/A部タカヒロ"
メール本文も改行される形になります。
また、以下のように改行されない場合の原因と対処法についても説明していきます。
それでは早速試してみましょう。
VBAでサポートされている改行コードの種類
VBAの改行コードの種類は以下の通りです。
改行コード一覧
改行コード | 説明 | 定数 | 値 |
---|---|---|---|
CR | macOSのバージョン9以前に使用されている改行コードです。 | vbCr | Chr(13) |
LF | macOS9以降で、Unix、Linuxにも利用されている改行コードです。 | vbLf | Chr(10) |
CRLF | WindowsOSやMS-DOS で使用している改行コードです。 | vbCrLf | Chr(13) + Chr(10) |
– | プラットフォーム固有の改行文字。現在のプラットフォームに対応する文字が使用されます。 | vbNewLine | Chr(13) + Chr(10)、Macintosh の場合はChr(13) |
参考:https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/miscellaneous-constants
CRはCarriage Returnといい、古くはApple IIというAppleが発表したPCの2代目から採用された改行コードとなります。由来の通りApple製PCのみのサポートであり、現在はあまり使われていません。
LFはLine Feedといい、 Unixに採用された改行コードとなります。Unixから派生したLinux、macOS、AmigaなどのOSにも採用されています。なお、Excelのセル内で改行するときに入るコードはこちらのLFとなります。
CRLFはCRとLFを合わせた改行コードとなり、WindowsOSに採用されています。MS-DOSでコマンドを打つ時の改行コードもこちらになります。異なる環境間でやり取りするファイルの改行コードがLFかCRLFかで迷ったらCRLFを選択すればよいでしょう。
vbNewLineはVBA独自の定数で、CRLFとCRを環境に応じて自動変換してくれます。ただし、Macは古い方のCRとなるので、MacOS9以降ではうまく改行されない可能性があります…
Outlook VBAでメール本文を改行する方法
Outlook VBAでメール本文を改行する方法について説明をします。
Chr関数を使用して改行する
Chr関数の説明
Chr関数を使用して改行をしていきます。Chr関数の詳細は以下の通りです。
関数名 | Chr() |
---|---|
機能 | 指定した文字コードと関連付けられている文字を返します。 |
書式 | Chr(charcode) |
引数 | charcodeを半角文字は0 から255、全角文字は-32768 ~ 65536まで指定します。改行コードは10と13です。 |
Chr関数で改行するVBA
Chr関数で改行をする方法について説明をします。
サンプルではメール本文となるBodyプロパティに改行コードを挿入するようにしています。
改行コードはCR(Chr(13))、LF(Chr(10))、CRLF(Chr(13) + Chr(10))それぞれを使用します。まずはCRから確認してみましょう。
サンプルコードは以下の通りです。
Sub Outlookの改行入りメールを新規作成する1()
'Outlook用の定義
Dim objMail As Object
Dim strBr As Variant
'改行コードを指定します。
strBr = Chr(13)
'メールを新規作成し、オブジェクトにセットします。
Set objMail = CreateItem(olMailItem)
With objMail
' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 3
'件名を指定します。
.Subject = "改行コードテスト"
'本文を指定します。
.Body = "宛先各位" & strBr _
& "以下の通り報告いたします。" & strBr & strBr _
& "9:00:朝礼" & strBr _
& "10:00:商品納品" & strBr _
& "13:00:定例会" & strBr _
& "15:00:定期作業" & strBr _
& "17:00:日報作成" & strBr & strBr _
& "以上/A部タカヒロ"
'Toを指定します。
.To = "user1@extan.jp"
'メールを表示します。
.Display
End With
'オブジェクトを解放します。
Set objMail = Nothing
End Sub
VBAを設定する
VBAを設定していきましょう。
改行コードを指定します。
strBr = Chr(13)
本文のテキスト形式を指定します。「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 3
件名を指定します。
.Subject = "改行コードテスト"
本文を指定します。変数strBrに改行コードが入ります。
.Body = "宛先各位" & strBr _
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行する
VBAを実行してみましょう。
はい、本文が改行されていますね。
LF(Chr(10))改行コードで改行されるか確認
LF(Chr(10))の改行コードで改行されるか確認してみましょう。
改行コードをLF(Chr(10))に指定します。
strBr = Chr(10)
VBAを実行してみましょう。
改行されいますね!
CRLF(Chr(13) + Chr(10))改行コードで改行されるか確認
CRLF(Chr(13) + Chr(10))の改行コードで改行されるか確認してみましょう。
改行コードをCRLF(Chr(13) + Chr(10))に指定します。
strBr = Chr(13) + Chr(10)
VBAを実行してみましょう。
こちらも改行されいますね!
定数を使用して改行する
定数指定で改行をする方法について説明をします。
CR(vbCr)、LF(vbLf)、CRLF(vbCrLf)、vbNewLineを使います。
サンプルコードはChr関数版と同じです。
CR(vbCr)改行コードで改行されるか確認
CR(vbCr)の改行コードで改行されるか確認してみましょう。
改行コードをCR(vbCr)に指定します。
strBr = vbCr
VBAを実行してみましょう。
改行されいますね!
LF(vbLf)改行コードで改行されるか確認
LF(vbLf)の改行コードで改行されるか確認してみましょう。
改行コードをLF(vbLf)に指定します。
strBr = vbLf
VBAを実行してみましょう。
改行されいますね!
CRLF(vbCrLf)改行コードで改行されるか確認
CRLF(vbCrLf)の改行コードで改行されるか確認してみましょう。
改行コードをCRLF(vbCrLf)に指定します。
strBr = vbCrLf
VBAを実行してみましょう。
こちらも改行されいますね!
vbNewLine改行コードで改行されるか確認
vbNewLineの改行コードで改行されるか確認してみましょう。
改行コードをvbNewLineに指定します。
strBr = vbNewLine
VBAを実行してみましょう。
はい、改行されいますね!
HTMLコードで改行するVBA
HTMLコードで改行をする方法について説明をします。
サンプルではメール本文となるHTMLBodyプロパティにHTMLコードの改行を意味する<BR>を挿入するようにしています。
サンプルコードは以下の通りです。
Sub Outlookの改行入りメールを新規作成する2()
'Outlook用の定義
Dim objMail As Object
Dim strBr As Variant
'改行コードを指定します。
strBr = "<BR>"
'メールを新規作成し、オブジェクトにセットします。
Set objMail = CreateItem(olMailItem)
With objMail
' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 2
'件名を指定します。
.Subject = "改行コードテスト"
'本文を指定します。
.HTMLBody = "宛先各位" & strBr _
& "以下の通り報告いたします。" & strBr & strBr _
& "9:00:朝礼" & strBr _
& "10:00:商品納品" & strBr _
& "13:00:定例会" & strBr _
& "15:00:定期作業" & strBr _
& "17:00:日報作成" & strBr & strBr _
& "以上/A部タカヒロ"
'Toを指定します。
.To = "user1@extan.jp"
'メールを表示します。
.Display
End With
'オブジェクトを解放します。
Set objMail = Nothing
End Sub
VBAを設定する
VBAを設定していきましょう。
HTMLコードで改行を意味する”<BR>”を指定します。
strBr = "<BR>"
本文のテキスト形式を指定します。今回はHTML形式のため「2」となります。
.BodyFormat = 2
件名を指定します。
.Subject = "改行コードテスト"
本文を指定します。変数strBrに改行コードが入ります。
.HTMLBody = "宛先各位" & strBr _
VBAを実行する
VBAを実行してみましょう。
はい、本文が改行されていますね!
Outlook VBAでメール本文が改行されない原因と対処法
Outlook VBAでメール本文が改行されない原因と対処法について説明をします。
原因その1:本文のテキスト形式と合っていない改行コードを指定している
原因その1は本文テキスト形式と合っていない改行コードを指定となります。
例えば本文のテキスト形式のBodyFormat プロパティをHTMLモードにした上、HTMLBodyプロパティに改行コードを指定するとHTMLのコードと判断されず無効化されます。
原因その1の対処法
原因その1の対処法は、本文のテキスト形式にあった改行コードを指定するようにしましょう。
原因その2:定数vbNewLineを指定している
原因その2は定数vbNewLineを指定している場合となります。
Windows環境では改行されますが、それ以外の環境では改行されない場合があります。
原因その2の対処法
原因その2の対処法は、定数vbNewLine以外の定数を使うようにしましょう。
VBAの実装手順
VBAを設置する下準備をする
VBAを設置するための下準備をしましょう。
「開発」タブがリボンメニューにない場合は
以下を参考に表示させます。
VBAを登録する
次にマクロを登録します。
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開き、こちらにコードを貼り付けます。
こちらで実装完了です。
VBAを実行する
VBAを実行する手順となります。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・Outlook VBAでメール本文が改行されない原因と対処法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す