【问题标题】:Outlook VBA Macro not modifying emailOutlook VBA宏不修改电子邮件
【发布时间】:2020-06-24 20:49:22
【问题描述】:

如果我收到来自特定地址的具有特定主题的电子邮件,我将运行以下脚本。目标是使用超链接标记电子邮件,该超链接将有助于该电子邮件的收件人在原始邮件正文中包含该链接。

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 的教程,但我对此很陌生。非常感谢任何帮助/指导!

【问题讨论】:

  • 什么是 objMail?你之前设置的吗?和objMsg一样吗?我会在整个过程中添加 MsgBox,呼应 objMsg.HTMLBody 之类的内容,以确保您正在修改您认为正在修改的内容,而不是未定义的对象。看起来您应该在整个 objItem 中进行操作。 . .
  • 注释掉On Error Resume Next - 你打算如何在那里调试?

标签: vba email outlook


【解决方案1】:

这是需要使用Option Explicit 来要求显式变量声明的经典案例。使用它,因为您正在学习 VBA。还要避免使用On Error Resume Next 的习惯,因为这会忽略所有错误处理。

您可能没有意识到这一点,但您通过以下方式引用您的邮件:

  • 我的邮件
  • objItem
  • objMsg
  • objMail

注意以下两条命令

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

你也不需要清理。

【讨论】:

  • edit above 反映了您的建议(与上述 cmets 并行)。我在这里严格尝试了您的 sn-p,但仍然没有在电子邮件中添加超链接。随后尝试手动设置 MyMail.BodyFormat 属性(请参阅编辑)并返回相同的结果。
  • @worseone 你确定这真的被调用了吗?我可以运行上述命令将您的超链接附加到邮件项。您的电子邮件不是以 HTML 开头的吗?
  • 我已经尝试通过设置 if 语句来通知我类型、手动将其设置为 HTML(如我编辑的代码所示)以及将图像放入电子邮件中来测试它是否已经是 HTML我正在测试。到目前为止的一切都告诉我它们是 HTML 格式的。
  • 尽管我尝试转换,但电子邮件的内容类型显然是多部分/替代或类似的。强制发送一封 HTML 格式的电子邮件,解决方案有效。感谢您的帮助!
猜你喜欢
  • 2017-10-05
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多