Outlook vba未找到现有文件夹

问题描述:

我的Outlook宏一次工作,然后停止。当它解析时,宏会引发错误“编译错误:变量未定义”。看起来宏不知道该文件夹存在。我将代码截至最低限度,这是一个可重复的问题。该宏将识别标准文件夹,如JUNK和DRAFTS,但不是PROCESSED_FOLDERS。我尝试重命名Processed_Folders以及使用不同的名称创建一个新文件夹。没有快乐。Outlook vba未找到现有文件夹

文件夹结构:

[email protected] 
Inbox 
     Drafts 
     Sent 
     Trash 
     Junk 
     Processed_Reports 
Outbox 
Sync Issues1 (This computer only) 
SearchFolders 

CODE:

Sub testfforfolder() 
    Dim olApp As Outlook.Application 
    Dim objNS As Outlook.NameSpace 
    Dim olFolder As Outlook.MAPIFolder 
    Dim msg As Outlook.MailItem 
    Set olApp = Outlook.Application 
    Set objNS = olApp.GetNamespace("MAPI") 
    Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
    On Error GoTo xyz 
    Set olFolder = olFolder.Folders("Processed_Reports") 
    MsgBox "Folder Exists" ' This line works if I use DRAFTS or JUNK 
    Exit Sub 
xyz: 
    MsgBox ("Cannot find Folder") ' I get here if I use PROCESSED_REPORTS 
    Exit Sub 
End Sub 
+0

(1)强调了错误“无法定义的变量”什么线? (2)您的代码依赖于包含默认收件箱的“[email protected]”。这是真的?在我的系统上,默认收件箱位于“Outlook数据文件”中。 –

+0

在本答案开头,https://*.com/a/12146315/973283,有一个宏可以帮助确认问题的原因。尝试'设置oFolder = Session.Folders(“[email protected]”)。文件夹(“收件箱”)' –

+0

此脚本引发“找不到文件夹”消息框警报。在原始脚本中,INBOX这个单词被突出显示为一行,其内容如下:olm.Move Inbox.Folders(“Processed_Reports”)[注意:olm是DIM olm As Outlook.MailItem]在挣扎之后,我将问题隔离为不识别文件夹。 –

感谢托尼Dallimore评论我能够解决这个问题。链接到https://*.com/a/12146315/973283让我解决了这个问题。使用Outlook的更新版本时,将引用默认电子邮件帐户而不是所选项目的帐户。 Processed_Reports文件夹只存在于另一个帐户文件夹中。正如托尼建议的那样,解决方案是将目标文件夹设置为目标的完整路径。我确实需要更多层次,如下面的工作解决方案所示。

Sub testfforfolder() 
     Dim olApp As Outlook.Application 
     Dim objNS As Outlook.NameSpace 
    Dim olFolder As Outlook.MAPIFolder 
    Dim msg As Outlook.MailItem 
    Set olApp = Outlook.Application 
    Set objNS = olApp.GetNamespace("MAPI") 
    Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
    On Error GoTo xyz 
'OLD INCORRECT  
    'Set olFolder = olFolder.Folders("Processed_Reports") 
'WORKING CORRECTION 
    Set TgtFolder= _ 
    Session.Folders("[email protected]"). _ 
    Folders("Inbox").Folders("Processed_Reports") 

    MsgBox "Folder Exists" ' This line works if I use DRAFTS or JUNK 
    Exit Sub 
xyz: 
    MsgBox ("Cannot find Folder") ' I get here if I use PROCESSED_REPORTS 
    Exit Sub 
End Sub 

这里是一种方式来获得会话文件夹不知道会话名称

Sub topFolder() 

    Dim topFolder As Folder 
    Set topFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent 

    Dim i As Integer 

    For i = 1 To topFolder.Folders.Count 
     Debug.Print topFolder.Folders(i).Name 
    Next i 

    For i = 1 To topFolder.Folders("inbox").Folders.Count 
     Debug.Print topFolder.Folders("inbox").Folders(i).Name 
    Next i 

End Sub