如果帐户有多个邮箱,则VBA选择邮箱

时间:2015-11-27 08:44:13

标签: vba outlook-vba

这是我的要求。

我在配置的OUTLOOK中有多个帐户。 1)1@email.com(只有一个邮箱) 2)2@email.com(多个邮箱都在那里。例如:Unix机箱,Windows Box,Mac机箱)

这里我的第二个电子邮件帐户有自己的邮箱,并链接到多个邮箱,如UNIX,Windows等。每个邮箱都有自己的收件箱和子文件夹。

现在我需要在Unix框中选择一个文件夹(收件箱)并运行代码在文件夹旁边做一些事情。

这是我拥有的

For Each oAccount In Application.Session.Accounts
If oaccount ="1@email.com" then
Set folder = ns.GetDefaultFolder(olFolderInbox) ' here it selects the inbox folder of account.
For each item in folder.items
Code goes here
next
end if
next

这适用于单个邮箱帐户,但是当我为多个邮箱帐户执行此操作时,它无法正常工作。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用Account的{​​{3}}属性来获取其收件箱。例如:

Dim ns As NameSpace
Set ns = Application.Session

Dim acc As Account
Dim f As Folder

For Each acc In ns.Accounts
    ... Preconditions here ...
    Set f = acc.DeliveryStore.GetDefaultFolder(olFolderInbox)
    ... Now, do some looping ...
Next

答案 1 :(得分:1)

扩展DanL关于循环使用ns.Folders的建议,因为我无法判断你是否理解它。

Option Explicit

Sub accTopFolder()

Dim oAccount As Account
Dim ns As Namespace
Dim fldr As folder
Dim item As Object
Dim inbx As folder

Set ns = GetNamespace("MAPI")

For Each oAccount In Session.Accounts

    Debug.Print vbCr & "oAccount: " & oAccount
    '
    For Each fldr In ns.Folders
    ' Shows all the names so you can replace "test"
        Debug.Print " top folder: " & fldr.name
        If fldr = "test" Then
            Set inbx = fldr.Folders("Inbox")
            'inbx.Display
            For Each item In inbx.Items
                Debug.Print "  item .Subject: " & item.subject
            Next
            Exit For
        End If
    Next
Next

Set inbx = Nothing
Set ns = Nothing

End Sub