2

Access フォーム ボタンのクリックで実行される VBA を使用して Outlook 電子メールを作成しています。.Body については、次の連結文字列を使用して「strBody」文字列オブジェクトを設定しています。

strBody = "First Line of text here." & vbNewLine & _
    vbNewLine & _
    "Second Line of text here." & vbNewLine & _
    Chr(187) & "Third Line of text here." & vbNewLine & vbTab & _
    Chr(187) & "Fourth Line of text here." & vbNewLine & vbTab & _
    Chr(187) & "Fifth Line of text here." & vbNewLine & vbTab & vbTab & _
    Chr(187) & "Sixth Line of text here." & vbNewLine & vbTab & _
    Chr(187) & "Seventh Line of text here." & vbNewLine & _
    "Eighth Line of text here"

電子メール本文の結果のテキストは次のようになります。

ここにテキストの最初の行

ここにテキストの 2 行目。
ここにテキストの 3 行目。
ここにテキストの 4 行目。
ここにテキストの 5 行目 ここにテキスト
の 6 行目。
ここにテキストの 7 行目。
ここにテキストの 8 行目。

また、debug.print(ing) を実行すると、すぐに表示されるウィンドウで完璧に見えます。ただし、Outlook ウィンドウで作成すると、すべての行にダブル スペースが挿入されるため、次のようになります。

ここにテキストの最初の行

ここにテキストの 2 行目。

ここにテキストの 3 行目。

ここにテキストの 4 行目。

ここにテキストの 5 行目

ここにテキストの 6 行目。

ここにテキストの 7 行目。

ここにテキストの 8 行目。

新しい行コマンド (vbcrlf、vbcr、vblf、vbnewline など) のすべての組み合わせを試しましたが、vba 文字列で必要な方法を取得すると、すべての結果が同じダブルスペースになります。また、この連結を .Body 内で、ここに示されている文字列オブジェクトとして実行しようとしました...両方のアプローチで同じ結果です。

このダブルスペースの発生を防ぐ方法についてのアイデアはありますか? または、そうでない場合、作成時にメール本文の行間を0ptに操作する方法はありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

4

私は最近それを整理しました(別のシナリオがありましたが、解決策は同じです。なぜそれが起こるのかを説明しようとします:

メールの HTML 本文を作成しています。各行は、次の形式で表示されます (または少なくとも同様の形式)。

<p><span style="color: #1f497d;">THISISSOMETEXT</span></p>

しかし、あなたは何を知っていますか?'p' は Paragraph を表し、既定では、MS Office は大きな改行 (改行) で段落を分割します。これを回避するには、メールの HTML 本文を作成するときに次の形式を使用します。

<span style="color: #1f497d;">THISISSOMETEXT</span>

そして<BR>、新しい行に使用します。HTML 本文の例:

<span style="color: #1f497d;">Hello,</span>
<BR><BR>
<span style="color: #1f497d;">REPLACEMEWITHGENERATEDSENTENCE</span>
<BR><BR>
<span style="color: #1f497d;">PLEASELETMEKNOWIFYOUHAVEANYISSUES</span>
<BR><BR>
<span style="color: #1f497d;">Regards,</span><BR><BR>

しかし、待ってください。Body の代わりに BodyHTML プロパティを使用している場合、署名は追加されません。新しい関数を作成します:

Function getSignature() As String
    signature = Environ("appdata") & "\Microsoft\Signatures\"
    If Dir(signature, vbDirectory) <> vbNullString Then
        signature = signature & Dir$(signature & "*.htm")
    Else:
        signature = ""
    End If
    getSignature = CreateObject("Scripting.FileSystemObject").GetFile(signature).OpenAsTextStream(1, -2).ReadAll
End Function

最後に、次のようなものを使用します。

htmlBodyCode = "<span>This is HTML body</span>"
outMail.HTMLBody = "<p>" & htmlBodyCode & "</p>" & getSignature()

お役に立てれば!私は現在、この設定を使用して、現在働いている会社で Excel から大量の電子メールを生成しています。

于 2016-06-09T08:19:05.920 に答える