【问题标题】:Reference a folder not under the default inbox引用不在默认收件箱下的文件夹
【发布时间】:2020-06-21 08:43:36
【问题描述】:

我尝试了无数种方法来从名为“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

【问题讨论】:

  • 你为什么不创建一个规则?
  • 或者为文件夹设置一个特殊的归档设置(删除早于 x 的电子邮件)。这就是我所做的,它对我有用。
  • 你从哪里运行代码?
  • 出于某种原因,我们正试图远离自动存档功能。如果我按照自己的方式进行操作,那将从第一天开始就完成,但是我猜有人使用存档被烧毁了,现在我们没有“被允许”使用它。

标签: vba outlook


【解决方案1】:

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

【讨论】:

  • 太棒了。抱歉,我花了这么长时间才得到反馈。偏离了另一个问题。该解决方案正是我想要的。完全有道理。希望我会这样想。谢谢!
【解决方案2】:
Dim outapp As Outlook.Application
Set outapp = CreateObject("outlook.application")

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


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

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

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多