【问题标题】:Determine when an event triggers确定事件何时触发
【发布时间】:2016-04-02 12:53:57
【问题描述】:

我正在关注 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

【问题讨论】:

  • 我也是 VBA 的新手。你可能想看代码清单 17.2。在 Outlook 项目上标记日期和当前用户 msdn.microsoft.com/en-us/library/dd492012(v=office.12).aspx>

标签: vba outlook


【解决方案1】:

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

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

【讨论】:

  • 你能提供一个小样本吗?我对此完全陌生。谢谢
  • 将 Application.ActiveExplorer.CurrentFolder.Items(1) 替换为 Application.ActiveExplorer.Selection.Item(1)。您还需要跟踪 Explorer.SelectionChange 事件并重置 SelectedItem 变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 2016-10-11
  • 2010-10-27
  • 2013-08-31
相关资源
最近更新 更多