引用不在默认收件箱下的文件夹

时间:2018-01-25 15:48:08

标签: vba outlook outlook-vba

我尝试过无数种方法从自定义文件夹中删除名为" Spam Digests"超过14天。当我将此文件夹嵌套在olDefaultFolder(Inbox)下面时,我已成功完成此操作,但当我将其置于默认收件箱之外时,我无法引用它,因为我收到了未找到的对象。

以下是我所拥有的内容,我似乎无法弄清楚在引用"fldSpamDigest"

时找不到对象的原因
    Dim outapp As Outlook.Application
    Set outapp = CreateObject("outlook.application")
    Dim olitem As Object
    Dim fldSpamDigest As Outlook.MAPIFolder

    Set fldSpamDigest = outapp.GetNamespace("MAPI").Folders("Spam Digests")
    For Each olitem In fldSpamDigest.Items
        If DateDiff("d", olitem.CreationTime, Now) > 14 Then olitem.Delete
    Next

    Set fldSpamDigest = Nothing
    Set olitem = Nothing
    Set outapp = Nothing

2 个答案:

答案 0 :(得分:4)

GetDefaultFolder(olFolderInbox)是一种捷径。

你可以长篇大论地引用任何文件夹。

Sub reference_walk_the_path()

    Dim outapp As Outlook.Application
    Set outapp = CreateObject("outlook.application")

    Dim olitem As Object
    Dim fldSpamDigest As Outlook.MAPIFolder

    ' from the default inbox to the parent which is your mailbox
    Set fldSpamDigest = outapp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent
    ' from the mailbox to a folder at the same level as the Inbox 
    Set fldSpamDigest = fldSpamDigest.folders("Spam Digests")

    ' or
    ' directly from the mailbox to a folder at the same level as the Inbox 
    'Set fldSpamDigest = outapp.GetNamespace("MAPI").folders("your email address").folders("Spam Digests")

    For Each olitem In fldSpamDigest.Items
        If dateDiff("d", olitem.CreationTime, Now) > 14 Then olitem.Delete                
    Next

    Set fldSpamDigest = Nothing
    Set olitem = Nothing
    Set outapp = Nothing

End Sub

答案 1 :(得分:1)

Dim outapp As Outlook.Application
Set outapp = CreateObject("outlook.application")

无需在Outlook VBA中创建新的Outlook应用程序实例,只需使用“应用程序”属性

即可

引用不在默认收件箱下的文件夹 - 例如

Option Explicit
Public Sub Example()
    Dim olNs As Outlook.NameSpace
    Set olNs = Application.Session

    Dim Digest_Fldr As Outlook.MAPIFolder
    Set Digest_Fldr = olNs.GetDefaultFolder(olFolderInbox) _
                          .Parent.Folders("fldSpamDigest")

    Dim Items As Outlook.Items
    Set Items = Digest_Fldr.Items

    Dim i As Long
    For i = Items.Count To 1 Step -1
        DoEvents
        Debug.Print Items(i).Subject
    Next

End Sub