【问题标题】:Select Outlook Folder With Excel VBA使用 Excel VBA 选择 Outlook 文件夹
【发布时间】:2017-09-22 15:10:49
【问题描述】:

我试图绕过必须选择我想要的文件夹,然后告诉 Excel 继续计算“收件箱”

Sub Get_Emails()

Dim OLF As Outlook.MAPIFolder
Dim EmailItemCount As Long

Set OLF = GetObject("", "Outlook.Application").GetNamespace("MAPI").PickFolder
EmailItemCount = OLF.Items.Count

Range("A1") = EmailItemCount

Set OLF = Nothing

Application.StatusBar = False

End Sub

有谁知道我如何在不选择文件夹的情况下获得计数? Excel VBA 应该会自动进入“收件箱”并给我计数。

注意:您必须转到工具 > 参考 > 并选择“Microsoft Outlook 14.0 对象库”才能使此宏起作用。

【问题讨论】:

标签: vba excel outlook


【解决方案1】:

以下是可行的:

Option Explicit

Sub LoopFoldersInInbox()

    Dim ns              As Outlook.Namespace
    Dim myfolder        As Outlook.Folder
    Dim mysubfolder     As Outlook.Folder

    Set ns = GetObject("", "Outlook.Application").GetNamespace("MAPI")

    Set myfolder = ns.GetDefaultFolder(olFolderInbox)

    For Each mysubfolder In myfolder.Folders
        Debug.Print mysubfolder.name
        Debug.Print mysubfolder.Items.Count
    Next mysubfolder

End Sub

有一些credits here。它具有早期绑定。因此,如果您按下nsmysubfolder 中的点,您将看到它们的属性和操作:

这里是后期绑定,因此您不需要显式引用 Outlook 库,代码将适用于更多用户:

Option Explicit

Sub LoopFoldersInInbox()

    Dim ns                  As Object
    Dim objFolder           As Object
    Dim objSubfolder        As Object

    Set ns = GetObject("", "Outlook.Application").GetNamespace("MAPI")
    Set objFolder = ns.GetDefaultFolder(6) ' 6 is equal to olFolderInbox

    For Each objSubfolder In objFolder.Folders
        Debug.Print objSubfolder.name
        Debug.Print objSubfolder.Items.Count
    Next objSubfolder

End Sub

在这个后期绑定中,我使用了6 而不是olFolderInbox

编辑: 如果您想要单元格中的结果,请使用以下代码:

Option Explicit

Sub LoopFoldersInInbox()

    Dim ns                  As Object
    Dim objFolder           As Object
    Dim objSubfolder        As Object
    Dim lngCounter          As Long

    Set ns = GetObject("", "Outlook.Application").GetNamespace("MAPI")
    Set objFolder = ns.GetDefaultFolder(6) ' 6 is equal to olFolderInbox

    For Each objSubfolder In objFolder.Folders
        With ActiveSheet
            lngCounter = lngCounter + 1
            .Cells(lngCounter, 1) = objSubfolder.Name
            .Cells(lngCounter, 2) = objSubfolder.Items.Count
        End With

        Debug.Print objSubfolder.Name
        Debug.Print objSubfolder.Items.Count

    Next objSubfolder

End Sub

【讨论】:

  • 感谢您的回复 Vityata 但这对我不起作用。您的代码未填写 Excel 工作表“Sheet 1”上的范围。我希望能够指定“收件箱”、“发件箱”、“草稿”等...
  • 这真是太棒了Vityata,你就是那个男人!还有一个问题。如何在子文件夹中指定特定文件夹?此代码有效 Set objFolder = ns.Folders("NoctalkSW").Folders("Inbox")。但是,这段代码没有设置 objFolder = ns.Folders("NoctalkSW").Folders("Inbox").Folders("Completed")。知道为什么不?我只想指定指定文件夹。
  • 我不太欣赏您关于“阅读任何 VBA 书籍的前 100 页”的评论。维提亚娜。保持积极,没有必要。
  • @MarkS - 对不起,我是用我最好的感觉告诉你的,我不想让你感觉不好或类似。但总的来说,在任何 VBA 书籍的前 100 页中,您都会找到如何引用单元格/范围/活动工作表。如果你觉得被冒犯了 - 我会删除它。
  • 没关系,别担心Vityata。您知道如何使用循环代码仅指定文件夹中的 olNoFlag 项吗?我无法获取代码以仅返回 No Flag 项目的日期/时间。我正在尝试使用 .Cells(lngCounter, 3) = objSubfolder.olNoFlag.Items.GetLast.ReceivedTime 但它不起作用。救命!
【解决方案2】:

以下是我正在寻找的更多内容,但 Vityana 的代码也运行良好。这一切都取决于你需要什么。我想在“收件箱”中指定一个文件夹,但目前无法。这仅获取“收件箱”的计数,但在“收件箱”文件夹下嵌套了一些我无法指定的文件夹。有人知道怎么做吗?

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("Joe.L.Smo@company.com").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

End Sub

【讨论】:

    【解决方案3】:

    你可以“继续规范”。

    你有:

    Set objFolder = objnSpace.Folders("Joe.L.Smo@company.com").Folders("Inbox")
    

    要获取 - 例如 - 收件箱下的子文件夹 Temp 的内容,请指定:

    Set objFolder = objnSpace.Folders("Joe.L.Smo@company.com").Folders("Inbox").Folders("Temp")
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-11-08
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2022-01-16
      • 2019-01-31
      • 2015-08-11
      相关资源
      最近更新 更多