Events是爲這個完美的。
當發生密鑰更改時,應用程序觸發事件。這可以讓你避免使用定時循環。
您可以使用WithEvents語句創建一個可以處理事件調用的變量。
在這個例子中,變量f指向收件箱。每當從該文件夾中刪除一個項目時,就會調用f_BeforeItemMove
過程。它顯示剩下的項目數,減1。我們減去一個,因爲事件在刪除之前被觸發(如果您願意,這會讓您有機會取消它)。
因爲我們使用的是object variable,所以我們需要創建並銷燬它。當應用程序啓動&退出時會發生這種情況。
Private WithEvents f As Folder ' Inbox folder, used to monitor events.
Private Sub Application_Startup()
' Register for events.
Set f = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
End Sub
Private Sub Application_Quit()
' Unregister.
Set f = Nothing
End Sub
Private Sub f_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)
' Called when an item is moved out of the inbox.
' Display the number of items left, after delete.
MsgBox (f.Items.Count - 1)
End Sub
必須將此代碼添加到ThisOutlookSession類中。如果粘貼到另一個模塊中,啓動和退出事件不會觸發。
EDIT
原始溶液,上方,是觸發之前項被從收件箱中刪除。 OP想要剛剛解僱的代碼。這個新的解決方案做到了。
Private WithEvents f As Folder ' Inbox folder, used to monitor events.
Private WithEvents i As Items ' Items within folder above
Private Sub Application_Startup()
' Register for events.
Set f = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set i = f.Items
End Sub
Private Sub Application_Quit()
' Unregister.
Set i = Nothing
Set f = Nothing
End Sub
Private Sub i_ItemRemove()
' Called each time an item is moved out of the inbox.
' This can be triggered by moving an item to another folder
' or deleting it.
' Display the new inbox item count.
MsgBox i.Count
End Sub
和以前一樣;此代碼應放置在ThisOutlookSession
之內。您將需要重新啓動Outlook,或手動執行Application_Startup
。
感謝您的回覆。我試過這個,不幸的是它不會觸發任何東西。我已將代碼放在ThisOutlookSession中,並將其指向我要監視的文件夾,但當我刪除或移出收件箱中的電子郵件時,它沒有做任何事情。 –
對不起,我應該添加;要獲得此代碼,您需要手動運行Application_Startup或關閉並重新打開Outlook。要手動運行只需點擊子內,然後按F5鍵。爲什麼?因爲需要通過SET語句創建f對象變量。一旦完成,它將開始響應事件。 –
現在,我已重新啓動Outlook,這很好。非常感謝。一個問題,但。我需要在郵件項目移動之後運行它,而不僅僅是之前,因爲我的下一個代碼將檢查郵箱計數,並且只有在它等於0時才運行。由於此操作在手邊運行,因此它認爲郵箱中仍有一封電子郵件我的下一部分沒有運行。 –