我在收到来自特定主题的特定地址的电子邮件的事件上运行以下脚本。目标是使用超链接标记电子邮件,该超链接对于所述电子邮件的收件人在原始邮件正文中有用。
Option Explicit
Sub Megatron(MyMail As MailItem)
Dim objOL As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim strID As String
Dim strLink As String
Dim strNewText As String
Dim strLinkText As String
'On Error Resume Next
Set objOL = Application
strID = MyMail.EntryID
Set MyMail = Application.Session.GetItemFromID(strID)
If Not MyMail Is Nothing Then
Set objNS = objOL.Session
MyMail.BodyFormat = olFormatHTML
If MyMail.BodyFormat = olFormatHTML Then
MsgBox ("set to html")
End If
strLink = "http://www.example.com"
strLinkText = "Click on this Example!"
strNewText = "<p><a href=" & Chr(34) & strLink & _
Chr(34) & ">" & strLinkText & "</a></p>"
MyMail.HTMLBody = Replace(MyMail.HTMLBody, "</body>", _
strNewText, 1, 1, vbTextCompare)
MyMail.Save
MsgBox ("Hyperlink appended!")
Else
MsgBox ("Failure!")
End If
End Sub
当我收到消息框告诉我发生了正确的事件时,似乎没有进行实际更改(或者没有正确保存?)。
这是我在任何编程方面所做的第一项工作。我已经详细介绍了VB的一些教程,但我对此非常陌生。非常感谢任何帮助/指导!
答案 0 :(得分:3)
这是需要使用Option Explicit
来要求显式变量声明的经典案例。使用它,因为你正在学习VBA。同时避免使用On Error Resume Next
的习惯,因为这会忽略所有错误处理。
您可能没有意识到这一点,但您通过以下方式引用了您的邮件:
请注意以下两个命令
objMsg.HTMLBody
objMail.Save
是在不存在的对象上执行的。
删除以上三个额外的引用:
Sub Megatron(MyMail As MailItem)
Dim objOL As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objItem As Object
Dim strID As String
Dim strLink As String
Dim strNewText As String
Dim strLinkText As String
strLink = "http://www.example.com"
strLinkText = "Click on this Example!"
strNewText = "<p><a href=" & Chr(34) & strLink & _
Chr(34) & ">" & strLinkText & "</a></p>"
MyMail.HTMLBody = Replace(MyMail.HTMLBody, "</body>", _
strNewText, 1, 1, vbTextCompare)
MyMail.Save
end Sub
您也不需要清理。