我希望了解MailItem中已更改内容的详细信息。
我已经能够将ItemChange基于Application.Session.Folders(“TargetFolder”)触发到变量,如下所示:
Private Sub olInvMbxItems_ItemChange(ByVal X As Object)
。
我想知道X
中的属性已更改。如果我将X
传递给Private Sub X_PropertyChange(ByVal x As Object)
的全局变量,则会错过第一次迭代,因为在X
的第一次传递中ItemChange
未初始化。
如何监控MailItems的文件夹以检测类别更改。虽然ItemChange执行此操作,但如果我查找特定类别,它会提供重复操作,因为许多更改会触发ItemChange,如下所述:
Handle ItemChange event when outlook appointments are dismissed
在这里:
Outlook Macro that will copy an email I flag and put it in a folder
第二项中UserProperties的二进制标志将不起作用,因为它不是一次性事件。
Outlook Events VBA说使用PropertyChange但没有提供实现技术。
答案 0 :(得分:1)
无法做到这一点 - 即使在MAPI级别,商店提供商也无法跟踪更改的内容。您唯一的解决方案是比较旧的(由您保存在其他地方)和新值,以查看更改的内容。
答案 1 :(得分:0)
这是一种适用于单一选择的方法。需要细化,但这是一个起点:
Private WithEvents olExplorer As Outlook.Explorer
Private olCurSel As Selection
Private WithEvents olCurSelItem As Outlook.MailItem
Private Sub olExplorer_SelectionChange()
Set olCurSel = olExplorer.Selection
Set olCurSelItem = Nothing
Dim i As Long
For i = 1 To olCurSel.Count
If TypeName(olCurSel.Item(i)) = "MailItem" Then
Set olCurSelItem = olCurSel.Item(i)
End If
Next i
End Sub
Private Sub olCurSelItem_PropertyChange(ByVal Name As String)
Debug.Print Name; " is what changed!"
End Sub
使用Outlook.Explorer.Selection
,我们可以知道已选择了某个项目。然后,我们可以有条件地将该项目分配给Outlook.MailItem
,并使用该PropertyChange
的{{1}}事件触发我们希望采取的操作。
问题:
Outlook.MailItem
也由每个选择的阅读窗格触发。因此,如果阅读窗格打开,则会触发两次。如上所述,SelectionChange
每olCurSelItem
设置两次。