2

我正在通过 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?

提前感谢您的任何帮助。

4

1 回答 1

4

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

您正在创建邮件的 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 生成大量电子邮件。

于 2016-06-09T08:19:05.920 回答