【问题标题】:How to specify nested folder in Outlook using Excel VBA如何使用 Excel VBA 在 Outlook 中指定嵌套文件夹
【发布时间】:2017-04-26 14:37:59
【问题描述】:

我需要使用 Excel VBA 在 Outlook 中指定嵌套文件夹的帮助。我将在下面发布我正在使用的代码。

我可以指定“收件箱”文件夹,但是当我尝试指定“收件箱”文件夹中的文件夹时,代码会返回“无此类文件夹”消息。

有谁知道为什么这会发生在我身上?如果是这样,我该如何解决?

Option Explicit
Sub HowManyEmails()
    Dim objOutlook As Object, objnSpace As Object, objFolder As Object
    Dim EmailCount As Integer
    Set objOutlook = CreateObject("Outlook.Application")
    Set objnSpace = objOutlook.GetNamespace("MAPI")

    On Error Resume Next
    Set objFolder = objnSpace.Folders("NoctalkSW").Folders("Inbox")
    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "No such folder."
        Exit Sub
    End If

    EmailCount = objFolder.Items.Count
    Set objFolder = Nothing
    Set objnSpace = Nothing
    Set objOutlook = Nothing

    [B2].Value = EmailCount

    On Error Resume Next
    Set objFolder = 
    objnSpace.Folders("NoctalkSW").Folders("Inbox").Folders("COMPLETED")
    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "No such folder."
        Exit Sub
    End If

    EmailCount = objFolder.Items.Count
    Set objFolder = Nothing
    Set objnSpace = Nothing
    Set objOutlook = Nothing

    [B3].Value = EmailCount

End Sub

【问题讨论】:

  • 不,这对我没有帮助。我需要在“收件箱”文件夹下指定一个嵌套文件夹。我在问您如何使用 Excel VBA 指定 Outlook 文件夹的层次结构。
  • 你设置了 objnSpace = Nothing 然后尝试稍后使用 objnSpace
  • 你能解释一下你在代码中试图做什么吗?
  • 这行代码有效:Set objFolder = objnSpace.Folders("NoctalkSW").Folders("Inbox") 但是这行代码无效 objnSpace.Folders("NoctalkSW").Folders("收件箱").Folders("COMPLETED")。当我尝试访问低于 Outlook 二级文件夹的文件夹时,代码返回“无此类文件夹”消息。这更有意义吗?
  • 还有一个我忘了问的快速问题,您是在使用默认收件箱还是共享收件箱?

标签: excel vba email outlook


【解决方案1】:

您是否尝试调试代码?无论如何,尝试使用以下代码:

Option Explicit

Sub HowManyEmails() 
 Dim objOutlook As Object, objnSpace As Object, objFolder As Object
 Dim EmailCount As Integer
 Set objOutlook = CreateObject("Outlook.Application")
 Set objnSpace = objOutlook.GetNamespace("MAPI")

 On Error Resume Next
 Set objFolder = objnSpace.Folders("NoctalkSW").Folders("Inbox")
 If Err.Number <> 0 Then
  Err.Clear
  MsgBox "No such folder."
  Exit Sub
 End If

 EmailCount = objFolder.Items.Count
 Set objFolder = Nothing
 Set objOutlook = Nothing

 [B2].Value = EmailCount

 On Error Resume Next
 Set objFolder = objnSpace.Folders("NoctalkSW").Folders("Inbox").Folders("COMPLETED")
 If Err.Number <> 0 Then
  Err.Clear
  MsgBox "No such folder."
  Exit Sub
 End If

 EmailCount = objFolder.Items.Count
 Set objFolder = Nothing
 Set objnSpace = Nothing
 Set objOutlook = Nothing

 [B3].Value = EmailCount
End Sub

您也可以尝试遍历文件夹,请参阅How to: Enumerate Folders

【讨论】:

  • 代码不需要调试,因为它可以工作,直到我尝试在“收件箱”文件夹下指定一个文件夹。就像我上面说的,当我尝试这样做时,它会给我“没有这样的文件夹”消息,因为它不知道我在说什么文件夹。我会试试这个,但我不得不说这看起来就像你从顶部重新粘贴了我的代码。这里有什么区别?我没看到。
  • Set objnSpace = Nothing 的第一个实例被删除。
【解决方案2】:

如果您想访问共享收件箱和子文件夹,请使用 GetSharedDefaultFolder Method

GetSharedDefaultFolder Method 返回表示指定用户的指定默认文件夹的 MAPIFolder 对象。此方法用于委派方案,其中一个用户已将一个或多个默认文件夹的访问权限委派给另一个用户。


代码示例

Option Explicit
Const olFolderInbox = 6
Sub HowManyEmails()
    Dim olApp As Object
    Dim olNs As Object
    Dim Inbox As Object
    Dim SubFolder As Object
    Dim Recip As Object

    Set olApp = CreateObject("Outlook.Application")
    Set olNs = olApp.GetNamespace("MAPI")
    Set Recip = olNs.CreateRecipient("0m3r@email.com") ' Share address
        Recip.Resolve
    Set Inbox = olNs.GetSharedDefaultFolder(Recip, olFolderInbox) ' Inbox

    [B2].Value = Inbox.Items.Count

    Set SubFolder = Inbox.Folders("COMPLETED") ' subfolder

    [B3].Value = SubFolder.Items.Count

    Set olApp = Nothing
    Set olNs = Nothing
    Set Inbox = Nothing
    Set SubFolder = Nothing
    Set Recip = Nothing
End Sub

【讨论】:

  • 感谢您尝试解决这个 0m3r。您的代码无法执行。它停在显示“[B3].Value = SubFolder.Items.Count”的行,并显示错误消息“运行时错误'-2147221241 (80040107)':操作失败。”
  • 代码没有问题@MarkS 错误可能是 Exchange 缓存模式\或连接速度慢 - 尝试查看您的高级附加邮箱:缓存 Exchange 模式设置。
  • 不,它不起作用。我试过。我正在使用的解决方案来自此页面。它将每个文件夹中的所有电子邮件计数提取到 Excel 中。然后我将我需要的内容从具有文件夹计数的工作表中提取到我拥有的另一个工作表中。见此代码:stackoverflow.com/a/43613635/5227322
猜你喜欢
  • 2017-09-22
  • 2019-01-31
  • 2019-10-06
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2018-11-08
相关资源
最近更新 更多