。无论使用新的行命令,创建Outlook电子邮件时的文本文本都是双倍行距

时间:2013-06-27 16:54:07

标签: vba access-vba outlook-vba

我正在通过VBA创建一个Outlook电子邮件,该电子邮件通过Access表单按钮单击运行。对于.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"

电子邮件正文中的结果文本应为:

这里的第一行文字

这里的第二行文字。
这里的第三行文字。
这里的第四行文字。
这里的第五行文字
第六行文字。
这里有第七行文字。
这里有第八行文字。

当debug.print(ing)时,它在即时窗口中看起来很完美。但是,当它在Outlook窗口中创建时,它会对每行进行双重排列,以便您得到:

这里的第一行文字

这里的第二行文字。

这里的第三行文字。

这里的第四行文字。

这里的第五行文字

这里的第六行文字。

这里有第七行文字。

这里有第八行文字。

我已尝试过新行命令的每个组合(vbcrlf,vbcr,vblf,vbnewline等),每当我得到vba字符串中的需要时,每个命令都会产生相同的双倍间距结果。我也试过在.Body和这里显示的字符串对象中进行这种连接......这两种方法都有相同的结果。

关于如何防止这种双重间隔发生的任何想法?或者,如果没有,是否有办法在创建电子邮件正文时将行间距操作为0pt?

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:1)

我最近把它整理出来了(我有不同的情况,但解决方案是一样的。我会试着解释它为什么会发生:

您正在创建邮件的HTML正文。每行显示以下格式(或至少 - 类似):

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

但你知道吗? 'p'代表段落,默认情况下,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>

但等等,还有更多!使用BodyHTML属性而不是Body时,不会添加签名。创建新功能:

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生成大量电子邮件。