Ms access 访问VBA Outlook Mailtiem.Body vs mailtItem.HTMLBody

Ms access 访问VBA Outlook Mailtiem.Body vs mailtItem.HTMLBody,ms-access,outlook,vba,Ms Access,Outlook,Vba,我试图用自定义超链接填充一系列生成的电子邮件,但在正确生成超链接方面遇到了困难。 我有一个用户表单,允许创建报告的人在电子邮件正文中输入文本字段。此字段已分配给表 在我的代码中,我提取这些字段,并对它们进行诸如日期和超链接之类的关键字解析,然后用代码生成的数字替换这些关键字 在创建超链接时,我将它们插入到正文字符串中,如下所示: Function CreateHyperLink(HyperText, HyperLink) As String CreateHyperLink = "<

我试图用自定义超链接填充一系列生成的电子邮件,但在正确生成超链接方面遇到了困难。 我有一个用户表单,允许创建报告的人在电子邮件正文中输入文本字段。此字段已分配给表

在我的代码中,我提取这些字段,并对它们进行诸如日期和超链接之类的关键字解析,然后用代码生成的数字替换这些关键字

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

Function CreateHyperLink(HyperText, HyperLink) As String

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

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

如果我用

 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”和“body”标记。您生成的HTML电子邮件中应该只有一个HTML和一个body标记

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

Function CreateHyperLink(HyperText, HyperLink) As String

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

End Function
函数创建超链接(超文本,超链接)作为字符串
CreateHyperLink=“”
端函数

看一看。我的答案显示了如何插入到现有
.HTMLBody
的中间,正如Josh所提到的。您必须将整个电子邮件包装在一个
HTML
正文中。因此,我使用Josh所提到的内容,但对您的表单设计进行了一些更改

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

Function CreateHyperLink(HyperText, HyperLink) As String
    CreateHyperLink = "<A HREF = '" & HyperLink & "'>'" & HyperText & "'</A>"
End Function
函数创建超链接(超文本,超链接)作为字符串
CreateHyperLink=“”
端函数
然后在正文中,您只需使用(我不确定您是否对HTML进行了预格式化,但我将这样做。)

Set-oMail=oApp.CreateItem(olMailItem)
与奥马尔
.To=t
.CC=c
.HTMLBody=“&eBody(i)&”
.Subject=eSubject(一)
以

记住
eBody(i)
只是解析关键字的结果,而不是格式化。由于文本框是一个富文本框,格式化就为您完成了!

听起来您的代码正在覆盖电子邮件正文的现有HTML结构。您能捕获吗(通过
debug.print
打印或临时保存到文件中的字符串)电子邮件的
HTMLBody
?的前后视图将告诉您是否正确修改/插入了新链接。感谢您的回复,我从未想过要这样检查HTMLBody。

HTMLBODYA href='to Report/Report''单击此处访问报告'/A/BODY/HTML

您现在的位置正确eory,我会看看,在我添加了原始格式的文本后,我是否可以添加超链接谢谢你的帮助!作为回答,如果将来有人偶然发现这个问题,我会解释为什么我选择Peters的答案。我选择Peter使用的方法,而不是Pauls的答案,尽管两者都能工作并产生类似的结果,Peters与m的合作效果更好通过使用文本框中的“<代码> >正文< /代码>来填充电子邮件的正文,Outlook自动为我生成HTML标记,从而保存文本框的格式。然后使用<代码> .HTMLBOOS将超链接插入到填充体的中间,以允许超链接生成正确的WITT。不要覆盖HTML标记。你是对的,我创建了太多的标记,但是上面没有解决我的问题,因为Outlook标记了标准

标记中的超链接,仅此而已。我必须在邮件项目生成标记后添加标记。谢谢,这解决了我的问题,我在中为超链接保留了一个占位符在创建电子邮件之前,请先删除代码。然后使用您的方法将占位符替换为超链接!谢谢,是的,我学到了很多关于Access/Outlook如何处理不同文本格式的知识。我第一次接触HTML。我想我的问题解释得不好,谢谢您提供的这些信息,尽管它有所帮助!很高兴提供帮助!祝您好运。:)
Function CreateHyperLink(HyperText, HyperLink) As String
    CreateHyperLink = "<A HREF = '" & HyperLink & "'>'" & HyperText & "'</A>"
End Function
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