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
答
感谢托尼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
(1)强调了错误“无法定义的变量”什么线? (2)您的代码依赖于包含默认收件箱的“[email protected]”。这是真的?在我的系统上,默认收件箱位于“Outlook数据文件”中。 –
在本答案开头,https://*.com/a/12146315/973283,有一个宏可以帮助确认问题的原因。尝试'设置oFolder = Session.Folders(“[email protected]”)。文件夹(“收件箱”)' –
此脚本引发“找不到文件夹”消息框警报。在原始脚本中,INBOX这个单词被突出显示为一行,其内容如下:olm.Move Inbox.Folders(“Processed_Reports”)[注意:olm是DIM olm As Outlook.MailItem]在挣扎之后,我将问题隔离为不识别文件夹。 –