2017-01-09 28 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' –