2017-01-09 34 views
0

這是我詢問的previous question的後續結果。感謝社區爲您提供幫助。子結束後Application_Startup變量消失

我試圖創建WithEvents代碼第一次檢查新項目的文件夾。最終的計劃是使用ItemsAdd事件觸發一堆其他處理,但現在,只是試圖將其保存到一個文件夾,並沒有得到那麼多。

當我運行下面的Application_Startup代碼時,立即窗口顯示我找到了正確的clntFldrItms。問題是,如果我然後將一個項目拖到相關文件夾中,則ItemAdd宏不會觸發。當我嘗試爲clntFldrItms添加手錶時,該變量未設置爲任何內容。它看起來像Application_Startup子完成後,分配停止。

所有的代碼都在ThisOutlookSession對象中。

這是因爲我正在使用SMTP電子郵件地址(而不是Exchange)嗎?

再次感謝您的幫助。

編輯添加我對尤金評論的迴應。我注意到,當我打開編輯器並進入Application_Startup子目錄時,即使在設置clntFldrItms = clntFldr.Items行之前,clntFldrItms也已正確分配。一旦我完成了一步,它就消失了。我無法進入ItemAdd子項,但是當我進入其他代碼時,clntFldrItms是Nothing。

FINAL EDIT對不起,我意識到我忘了關閉它。我本身無法解決問題,但我意識到這是由於我的SMTP帳戶。當我在Exchange上使用它時,它工作正常。看來,除非我在Exchange工作,否則事件不會啓動。

Option Explicit 

Public WithEvents clntFldrItms As Outlook.Items 

Private Sub Application_Startup() 
    Dim clntFldr As MAPIFolder 
    Set clntFldr = Application.Session.GetDefaultFolder(olFolderSentMail).Folders("Client Emails") 
    Set clntFldrItms = clntFldr.Items 
    Set clntFldr = Nothing 
    Debug.Print clntFldrItms.item(1).Subject 
End Sub 

Private Sub clntFldrItms_ItemAdd(ByVal item As Object) 
    Dim bChar As String 
    bChar = "\/:*?™""® <>|.&@#_+`©~;-+=^$!,'" & Chr(34) 
    Dim saveName As String 
    If item.Class = olMail Then 
     saveName = item.Subject 
     For x = 1 To Len(bChar) 
      saveName = Replace(saveName, Mid(bChar, x, 1), "-") 
     Next x 
     item.SaveAs "C:\Users\User\Google Drive\8 - VBA work\Preparation for Assisted Responder\Sent Messages Folder\" & _ 
     saveName & ".msg", olMSG 
    End If 
End Sub 
+0

是否允許在Outlook中運行VBA宏?您是否有機會查看信任中心設置? –

+0

謝謝Eugene,我已經在我的outlook會話中運行了一堆宏。沒有骰子... – PKB

+0

我已經採取了代碼工作,它似乎在Outlook 2010和Microsoft Exchange上工作,因此就我而言,問題就解決了。我不知道問題是否是Outlook 2016或SMTP電子郵件地址,但我懷疑後者。喜歡想法,但如果沒有人,謝謝你的嘗試。乾杯 – PKB

回答

1

嘗試設置在ItemAdd事件處理程序斷點,出現退房的clntFldrItms對象時斷點命中。

請注意,當同時添加多個項目(超過16個 - 這是Outlook中的一個衆所周知的問題)時,不會觸發ItemAdd事件。

您可能會發現該文章Getting Started with VBA in Outlook 2010 hellpful。

編輯設置了clntFldrItms是因爲在啓動Outlook時運行啓動事件處理程序。所以,該對象在場景後面的啓動時被初始化。

+0

非常感謝尤金。我已經完成了這一步,並從我所能看到的設置正確。不過,我注意到了一件有趣的事情。當我打開編輯器並進入Application_Startup子目錄時,即使在進入「Set clntFldrItms = clntFldr.Items」行之前,也會正確分配「clntFldrItms」。一旦我完成了一步,它就消失了。我無法進入ItemAdd子項,但是當我進入其他代碼時,「clntFldrItms」是Nothing。 – PKB

+0

對不起,過早輸入....任何想法? – PKB

+1

嘗試刪除以下語句:'Set clntFldr = Nothing' –