访问 VBA 展望 Mailtiem.Body 对比 MailItem.HTMLBody

Access VBA Outlook Mailtiem.Body vs MailItem.HTMLBody

我正在尝试使用自定义超链接填充一系列生成的电子邮件,但无法正确生成超链接。 我有一个用户表单,允许创建报告的人在电子邮件正文中输入文本字段。此字段已分配给 Table。

在我的代码中,我正在提取这些字段并针对 DATE 和 HYPERLINK 等关键字解析它们,并用代码生成的数字替换这些关键字。

当我创建超链接时,我将它们插入正文字符串中,如下所示:

Function CreateHyperLink(HyperText, HyperLink) As String

    CreateHyperLink = "<HTML><BODY>"
    CreateHyperLink = CreateHyperLink & "<A href='" & HyperLink & "'>'" & HyperText & "'</A>"
    CreateHyperLink = CreateHyperLink & "</BODY></HTML>"

End Function

但是当我插入这些时(eBody 是一个字符串数组)

 Set oMail = oApp.CreateItem(olMailItem)
 With oMail
    .To = t
    .CC = c
    .HTMLBody = eBody(i)
    .Subject = eSubject(i)
ETC.....

超链接正确创建,但我丢失了用户输入的文本中的所有间距和换行符。

如果我改用

 Set oMail = oApp.CreateItem(olMailItem)
 With oMail
    .To = t
    .CC = c
    .Body = eBody(i)
    .Subject = eSubject(i)
ETC.....

我保留了所有格式但丢失了超链接。 是否有两全其美的解决方案?我不希望我的用户必须在 HTML.

中输入整个电子邮件

Example Output of Method .htmlBody (Hyperlink is Valid but Missing Format)

可以通过以下方式访问该文件: 'Click here to access the Report ' 请使用过滤器 select 您的...

Example Output of Method .Body (Hyperlink is not Valid but Formated)

可以通过以下方式访问该文件:

<HTML><BODY><A href='http://FILELOCATION'>'Click here to access the Report '</A></BODY></HTML>  " 

请使用过滤器 select 您的...

有没有办法在 .body 中添加超链接,或者有办法用 .HTMLbody 保持格式?

如果我正确阅读了您的描述,您正在为每个超链接创建一组新的 "HTML" 和 "BODY" 标签。您生成的 HTML 电子邮件中应该只有 1 个 HTML 和 1 个 BODY 标签。

我建议您将 CreateHyperLink 函数更新为:

Function CreateHyperLink(HyperText, HyperLink) As String

    CreateHyperLink = "<a href='" & HyperLink & "'>'" & HyperText & "'</a>"

End Function

看看Range in Middle of Email Body。我在那里的回答显示了如何插入现有 .HTMLBody.

的中间

正如乔希所提到的。您必须将整个电子邮件包装在一个 HTML BODY 中。所以我正在使用 Josh 已经提到的内容,但对您的表单设计进行了一些更改。

第一步。转到表单的设计视图,确保文本框(您输入电子邮件正文的地方)设置为 Rich Text 而不是纯文本。富文本自动将您的数据包装在适当的 DIV 标签中。所以你创建超链接的代码是,

Function CreateHyperLink(HyperText, HyperLink) As String
    CreateHyperLink = "<A HREF = '" & HyperLink & "'>'" & HyperText & "'</A>"
End Function

然后在正文中,您只需使用 (我不确定您是否正在预先格式化 HTML,但我会这样做。)

Set oMail = oApp.CreateItem(olMailItem)
With oMail
    .To = t
    .CC = c
    .HTMLBody = "<HTML><BODY><FONT FACE='Calibri'>" & eBody(i) & "</FONT></BODY></HTML>"
    .Subject = eSubject(i)
End With

记住eBody(i) 是仅解析关键字的结果,而不是格式化的结果。由于 TextBox 是一个多信息文本框,因此格式化已为您完成!