2011-11-30 58 views
4
Dim olApp As Outlook.Application 
Dim objNS As Outlook.NameSpace 
Set olApp = Outlook.Application 
Set objNS = olApp.GetNamespace("MAPI") 
Set myOlItems = objNS.GetDefaultFolder(olFolderInbox).Items 

我已经使用上面的代码来访问主Outlook收件箱,但如何访问收件箱中的文件夹,它是使用vba的邮件!使用visual basic访问收件箱中的子文件夹?

回答

15

那是非常接近:)

为了得到一个收件箱下称“临时”文件夹中的所有邮件试试这个

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) 
Set olFolder = olFolder.Folders("Temp") 

For Each msg In olFolder.Items 
    Debug.Print msg.Subject 
Next 
+4

+1虽然我个人的口味是在一个语句中分配'olFolder',而不是用第二个语句覆盖它:'Set olFolder = objNS.GetDefaultFolder(olFolderInbox).Folders(“Temp” )' –

+0

thx Jean-Francois。这是一个很好的观点,这是我的Outlook VBA编码的一个怪癖,即使我在VBA和VBScript中的其他地方代码不同,它仍然存在于我的Outlook VBA编码中。 – brettdj

+2

+1当访问非默认文件夹时,您需要遍历层次结构。设置级联对象引用来限制点的数量是最佳做法,但是当我匆忙时,我会像@ Jean-FrançoisCorbett所做的那样将所有内容填入一行。 – JimmyPena

3

我发现有在我的收件箱是为一些项目不是导致脚本停止的邮件项目。 这个小变化允许脚本,如果像会议邀请被发现继续运行:

Sub getmail() 

Dim olApp As Outlook.Application 
Dim objNS As Outlook.Namespace 
Dim olFolder As Outlook.MAPIFolder 

'Dim msg As Outlook.MailItem 
Dim InboxItem As Object 

Set olApp = Outlook.Application 
Set objNS = olApp.GetNamespace("MAPI") 
Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
Set olFolder = olFolder.Folders("temp") 

For Each InboxItem In olFolder.Items 
    Debug.Print InboxItem.Subject 
    Debug.Print InboxItem.EntryID 
Next 

End Sub 

谢谢您的回答!帮了我很多!

(我的歉意 - 想发表评论,但没有足够的代表。)

0

为了进一步深入,不断增加设置olFolder线:

Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
Set olFolder = olFolder.Folders("temp") 
Set olFolder = olFolder.Folders("temp2") 
Set olFolder = olFolder.Folders("temp3") 

获取你\收件箱\ temp \ temp2 \ temp3 \

相关问题