我使用以下代码跟踪公共(共享)文件夹中电子邮件类别的更改。
我已经设置了代码以便能够“打开/关闭”它,并且此代码添加在ThisOutlookSession中:
Private WithEvents myOlItems As Outlook.Items
Private Sub myOlItems_ItemChange(ByVal Item As Object)
Dim prompt As String
prompt = Item.Categories
If MsgBox(prompt, vbYesNo + vbQuestion) = vbYes Then
'do stuff
End If
End Sub
Sub TriggerOn()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set myOlItems = Outlook.Session.Folders("SampleMailBox").Folders("Inbox").Items
End Sub
Sub TriggerOff()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set myOlItems = Nothing
End Sub
代码工作得非常好,但问题是,由于这是一个公共共享文件夹,如果任何其他用户进行更改,代码仍将被触发,并且有十几个用户,这可能会非常烦人,因为我想要仅跟踪我所做的更改。
欢迎任何建议:)
答案 0 :(得分:2)
您可以查看Namespace类的CurrentUser属性。该属性将当前登录用户的显示名称作为Recipient对象返回。所以,如果是你,你可以运行代码(显示消息框等)。
答案 1 :(得分:1)
检查PR_LAST_xyz属性的值(PR_LAST_MODIFIER_NAME,PR_LAST_MODIFIER_ENTRYID等)。可以使用MailItem.PropertyAccessor.GetProperty访问这些属性。使用OutlookSpy(单击IMessage按钮)查看消息,以查看可用属性及其值以及调用GetProperty时需要使用的属性DASL名称。
另一种解决方案是使用MailItem.Write事件。如果您假设可以通过右键单击消息来修改类别,并且在修改之前必须选择消息,则可以跟踪Explorer.SelectionChange事件,在所选消息上设置事件接收器,并跟踪MailItem 。写事件。