【问题标题】:Access VBA Outlook Mailtiem.Body vs MailItem.HTMLBody访问 VBA Outlook Mailtiem.Body 与 MailItem.HTMLBody
【发布时间】:2015-06-19 03:52:45
【问题描述】:

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

在我的代码中,我正在提取这些字段并解析它们以查找 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 格式输入整个电子邮件。

方法.htmlBody的示例输出(超链接有效但格式缺失)

可以通过以下方式访问该文件: '点击这里访问报告' 请使用过滤器选择您的...

方法.Body的示例输出(超链接无效但已格式化)

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

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

请使用过滤器选择您的...

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

【问题讨论】:

  • 听起来您的代码正在覆盖电子邮件正文的现有 HTML 结构。您能否捕获(在通过debug.print 打印的字符串或临时保存到文件中)电子邮件HTMLBody 的前后视图?这将告诉您是否正确修改/插入新链接。
  • 感谢您的回复,我从没想过这样检查 HTMLbody。 &lt;P&gt;&lt;FONT FACE="Calibri"&gt;&amp;nbsp;&amp;lt;HTML&amp;gt;&amp;lt;BODY&amp;gt;&amp;lt;A href='&lt;A HREF="http://HYPERLINK"&gt;http://HYPERLINK&lt;/A&gt; to Report/Report'&amp;gt;'Click here to access the Report '&amp;lt;/A&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt; &lt;BR&gt;你的理论是对的,我去看看我添加原始格式文本后是否可以添加超链接谢谢你的帮助!
  • 作为回复解释为什么我选择 Peters Answer,如果有人在未来偶然发现这一点。我选择了 Peter 使用的方法而不是 Pauls 的答案,尽管两者都可以工作并产生相似的结果,但 Peters 在我目前的系统中效果更好。通过在文本框中使用.body 填充电子邮件正文,Outlook 会自动为我生成 HTML 标记。以便保留文本框的格式。然后使用.HTMLbody 在填充正文中间插入超链接,以允许超链接正确生成而不会覆盖 HTML 标签。

标签: ms-access outlook vba


【解决方案1】:

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

【讨论】:

  • 谢谢,这解决了我的问题,在创建电子邮件之前,我在代码中为超链接留下了占位符。然后用你的方法用超链接替换占位符!
【解决方案2】:

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

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

Function CreateHyperLink(HyperText, HyperLink) As String

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

End Function

【讨论】:

  • 你说得对,我创建了太多标签,但以上内容并不能解决我的问题,因为 Outlook 将标准&lt;P&gt; 标签中的超链接标记,仅此而已。我必须在邮件项目在那里生成标签后添加标签
【解决方案3】:

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

第一步。转到表单的设计视图,确保文本框(您输入电子邮件正文的位置)设置为 富文本 而不是 纯文本。富文本会自动将您的数据包装在适当的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 是一个富文本框,格式已为您完成!

【讨论】:

  • 谢谢,是的,我学到了很多关于 Access/Outlook 如何处理不同文本格式的知识。第一次涉足 HTML。我认为我的问题没有得到很好的解释,感谢您提供的这些信息,尽管它有所帮助!
  • 很高兴为您提供帮助!祝你好运。 :)
猜你喜欢
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2012-05-31
  • 2022-01-21
  • 2017-11-17
相关资源
最近更新 更多