MailItem.Reply事件未按预期工作

时间:2014-06-04 05:14:23

标签: outlook-vba outlook-2013

当我使用Outlook 2013回复文本或rtf邮件时,我想编写一个更改邮件格式的脚本。要开始使用。我使用了MS dev centre中描述的回复事件。不幸的是,这个例子不能像我期望的那样工作。为了测试,我输入了一个简单的消息框,在单击回复按钮后会弹出。我从来没有看到那个消息框。我做错了什么?

Public WithEvents myItem As MailItem 

Sub Initialize_Handler() 

    Set myItem = Application.ActiveInspector.CurrentItem 

End Sub 


Private Sub myItem_Reply(ByVal Response As Object, Cancel As Boolean) 

    'Set Response.SaveSentMessageFolder = myItem.Parent
    MsgBox "I never see this message box :("

End Sub

3 个答案:

答案 0 :(得分:1)

您在资源管理器或检查器中单击“答复”吗?只有在检查器中单击“答复”按钮时,才会运行代码。

答案 1 :(得分:1)

要使用Microsoft提供的方法,您需要在ThisOutlookSession中使用此代码。如果事件代码不在此特殊类模块中,则需要它。

Private Sub Application_Startup()
    Initialize_handler
End Sub

如果所有代码都在ThisOutookSession中,则可以使用Max的答案中描述的方法,其中代码在Application_Startup而不是Initialize_handler中。

答案 2 :(得分:0)

你必须把它放到“ThisOutlookSession”中 - 只有它会起作用!

Option Explicit
Private WithEvents objInspectors As Outlook.Inspectors

Private Sub Application_Startup()
   Set objInspectors = Outlook.Inspectors
end Sub

Private Sub objInspectors_NewInspector(ByVal Inspector As Inspector)
    If Inspector.CurrentItem.Class = olMail Then
            Set newItem = Inspector.CurrentItem
    End If
    Set Inspector = Nothing
End Sub

Public Sub newItem_Open(Cancel As Boolean)
   newItem.BodyFormat = olFormatHTML
   If newItem.Sent = True Then Exit Sub
End Sub

这将适用于任何新的邮件项目,我不知道如何使这项工作仅用于回复。您可以检查主题,如果有主题,它将是一个回复。