确定事件何时触发

时间:2015-12-28 16:56:25

标签: vba outlook outlook-vba

我正在关注MSDN上显示的示例,但我错过了一部分,因为我无法触发“事件”。

目标是每次用户打开/预览/标记为邮件项目时,在邮件末尾附加时间戳和用户名。

我读过MailItem.Open(https://msdn.microsoft.com/en-us/library/office/ff865989.aspx)和MailItem.Read(https://msdn.microsoft.com/EN-US/library/office/ff869872.aspx)。我已禁用宏安全性(启用所有宏)。

我在“ThisOutlookSession”中的代码。我每次更改内容时都会重新启动Outlook:

Public WithEvents SelectedItem As Outlook.MailItem

Sub Initialize_handler()
 Set SelectedItem = Application.ActiveExplorer.CurrentFolder.Items(1)
 SelectedItem.Display
End Sub

Sub SelectedItem_Read()
  MsgBox "Trigger by MailItem.Read"
End Sub

Sub SelectedItem_Open()
  MsgBox "Trigger by MailItem.Open"
End Sub

我无法在用户阅读的任何打开/预览3秒/标记的情况下显示msgbox。

当事件有效时,我打算调用以下子项:

Sub MessageWasOpenned()
    Dim myItem As MailItem
    Set SelectedItems = ActiveExplorer.Selection
    For Each myItem In SelectedItems
    myItem.Body = myItem.Body & vbCrLf & "This message was opened by: " & (Environ$("Username")) & " on: " & Now
    myItem.Save
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

您可以在文件夹中的第一个项目上设置事件处理程序,无论它是什么。很可能它将是文件夹中最旧的消息,但除非您明确对Items集合进行排序,否则不会确定顺序。该订单与您在Outlook的资源管理器中看到的内容无关。

如果您使用Selection集合,则会触发Open事件。