1

我正在从 Excel 中创建电子邮件。创建电子邮件后,我需要在顶部添加一两条评论。我已经想出了如何设置字体样式,但 Outlook 在回车上添加了一个我真的不想要的双行空间。我怎样才能改变这个?

下面的代码:

Sub CreateDailyEmail()

    Dim oApp As Object
    Dim oMail As Object

    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0)

    With oMail
        .To = Range("EMAIL_TO")
        .Cc = Range("EMAIL_CC")
        .Subject = Range("EMAIL_SUBJECT")
        .Attachments.Add (Range("PATH"))
        .HTMLBody = "<p style=""font-family: Calibri; font-size: 14px; color: #00f; line-height: 1;""><br /></p>" & RangetoHTML(ActiveWorkbook.Worksheets("Daily").Range("B6:H65"))
        .Display
    End With

    Set oMail = Nothing
    Set oApp = Nothing

End Sub
4

2 回答 2

2

看起来您正在使用出色的 Ron De Bruin 代码从 Excel 发送和发送电子邮件(因此使用 RangetoHTML() 公式)。

我一直在使用相同的代码,可以在http://www.rondebruin.nl/win/s1/outlook/mail.htm找到

而不是在 .HTMLBody 中使用段落 HTML 标记,而是使用 body 标记并将行高设置为 1。然后当 RangetoHTML 返回您想要的范围时,它只会与您拥有的任何文本分开一个空格!这使得代码....

Sub CreateDailyEmail()

Dim oApp As Object
Dim oMail As Object

Set oApp = CreateObject("Outlook.Application")
Set oMail = oApp.CreateItem(0)

With oMail
    .To = Range("EMAIL_TO")
    .Cc = Range("EMAIL_CC")
    .Subject = Range("EMAIL_SUBJECT")
    .Attachments.Add (Range("PATH"))
    .HTMLBody = "<body style=""font-family: Calibri; font-size: 14px; color: #00f; line-height: 1;""><br />" & RangetoHTML(ActiveWorkbook.Worksheets("Daily").Range("B6:H65")) & "</body" & .HTMLBody
    .Display
End With

Set oMail = Nothing
Set oApp = Nothing

End Sub
于 2016-04-08T14:55:35.907 回答
0

我不完全确定我是否理解您的要求,因为我不确定回车符是出现在 Excel 工作表的单元格中还是仅出现在 Outlook 中的 html 中,但我认为有两种方法:

您可以替换单元格中的回车和换行符(http://stackoverflow.com/questions/2321078/how-can-i-remove-blank-line-breaks-from-an-excel-cell-with-vb- or-a-formula ) 来处理间距问题,例如

Substitute(Substitute(A1, CHAR(10), ""), CHAR(13), "")

如果它出现在文档的 html 部分,那么这是一个特定于 Outlook 的问题,因为使用您的设置的 html 示例可以正常工作:

<!DOCTYPE html>

<html>

<head>

<meta name="description" content="A Jack Orange 

Lantern Example" />

<style type="text/css">

p
{
font-family: "Calibri"; 
font-size: 20px;
color: #00f;
line-height: 1;
} 

</style>


</head>

<title> What's Up? </title>

<body>



<p> This is totally a paragraph </p>

<p> this is totally a paragraph <br /> + a line 

break </p>

<p> this is totally a paragraph with a line break 

afterwards <br /> </p>

<p> Totally... yeah. <br /> </p>

</body>

</html>

对于 Outlook,您应该能够使用 Replace 函数替换回车:

stringNewText = Replace(stringOldText, vbCr, "")

或者,可能:

stringNewText = Replace(stringOldText, vbCr, <br>)

或者,或者:

stringNewText = Replace(stringOldText, vbCr, vbCrLf)

MSDN 文档直接解决了此 Microsoft 教程中有关使用项目主体的替换功能:http: //msdn.microsoft.com/en-us/library/office/dd492012 (v=office.12).aspx

vbaexpress 上的教程似乎至少在外围解决了这个问题,并可能提供进一步的说明:http ://www.vbaexpress.com/forum/showthread.php?t=39348

于 2012-07-31T15:20:36.727 回答