2015-04-23 80 views
0

,我希望MsgBox彈出。VBA Outlook 2010:每當有新郵件到達公共文件夾時,監控公共文件夾中的新電子郵件

Private Sub Application_NewMail() 

Dim oNS   As NameSpace 
Dim oFolder  As MAPIFolder 
Dim oNewMail As MailItem 

Set oNS = Application.GetNamespace("MAPI") 
Set oFolder = oNS.GetDefaultFolder(olFolderInbox) 
Set oNewMail = oFolder.Items.GetFirst 

MsgBox oNewMail.subject  

End Sub 

我也設法訪問並通過更換檢索公用文件夾最新的電子郵件:

Set oFolder = oNS.GetDefaultFolder(olFolderInbox) 

通過

Set oFolder = oNS.Folders(2).Folders(2).Folders("XX").Folders("XX") 

我使用此代碼解決了這個對於我自己的收件箱不管怎麼樣,當我手動評估代碼時,這顯然是有效的,因爲只有當新郵件到達我的收件箱時才執行代碼。我做了一些谷歌搜索,發現一個潛在的解決方案來監控公用文件夾:

Private WithEvents TestMail As Items 

Public Sub Application_Startup() 
    Set TestMail = Application.GetNamespace("MAPI").Folders(2).Folders(2).Folders("XX").Folders("XX").Items 
End Sub 

Private Sub TestMail_ItemAdd(ByVal Item As Object) 
    MsgBox ("new mails arrived") 
End Sub 

編輯 - 編譯時錯誤:未知的屬性在子或功能。我正在使用Outlook 2010專業版。

+0

從Eugene的回答中的評論「我通過將WithEvents代碼片段放入類模塊來修正錯誤。」你的源代碼應該已經指明瞭所有的代碼將放在ThisOutlookSession模塊中。 – niton

回答

0

嘗試使用下面的代碼:

Private WithEvents NewMail As Items 

Public Sub Application_Startup() 
    Set NewMail = Application.GetNamespace("MAPI").Folders(2).Folders(2).Folders("XX").Folders("XX").Items 
End Sub 

Private Sub NewMail_ItemAdd(ByVal Item As Object) 
    MsgBox ("new mails arrived") 
End Sub 

不過,我建議打破調用的長鏈:

Set NewMail = Application.GetNamespace("MAPI").Folders(2).Folders(2).Folders("XX").Folders("XX").Items 

,並宣佈對單獨的行每個屬性或方法調用碼。因此,您會發現生成錯誤的確切的ptoperty或方法調用。

您可能會發現How to get reference to Public Folder Store using Outlook Object Model for Outlook 2010?文章有幫助。

+0

嗨,你的代碼有什麼不同?我複製並粘貼了代碼,但同樣的錯誤。你可能是對的,分裂的代碼,但錯誤已經發生在Private WithEvents ...可能這是一個錯誤的設置在Outlook本身?希望是正確的,但我已經把代碼放在「ThisOutlookSession」 – user969113

+0

剛剛發現這個stackoverflow問題:http://stackoverflow.com/questions/18796071/extract-body-text-from-outlook我剛剛檢查了我的引用和所有除此之外還有:Microsoft Forms nn.n Object Library - 但是,我找不到那一個。不確定是否導致問題 – user969113

+0

我通過將WithEvents代碼片段放入類模塊來解決了錯誤。但是,代碼仍然不起作用。 – user969113

相關問題