2017-04-25 186 views
1

我试图绕过不必选择我想要的文件夹,只是告诉Excel中继续前进,算上“收件箱”选择Outlook文件夹使用Excel VBA

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 Object Library”。

+0

您重复见注释如果您在尝试使用它之前没有设置objnSpace = Nothing,那么该代码应该在哪里工作。 http://stackoverflow.com/questions/43637311/how-to-specify-nested-folder-in-outlook-using-excel-vba – niton

回答

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你会看到属性和行为,他们有: enter image description here

这里是绑定晚了,所以你并不需要参考到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 

在此后期绑定,我已经在olFolderInbox代替使用6

编辑: 如果你想在单元格中的结果,使用此代码:

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 
+0

谢谢你的回应Vityata,但这并不适合我。您的代码不会在Excel工作表“工作表1”中填写范围。我希望能够指定“收件箱”,“Outbod”,“草稿”等... –

+0

这真是伟大的Vityata,你是男人!还有一个问题。如何在子文件夹中指定特定的文件夹?此代码工程设置objFolder = ns.Folders(“NoctalkSW”)。文件夹(“收件箱”)。但是,这段代码并没有设置objFolder = ns.Folders(“NoctalkSW”)。Folders(“Inbox”)。Folders(“Completed”)。任何想法为什么不呢?我只想指定指定的文件夹。 –

+0

我不太喜欢你对“阅读任何VBA书籍的前100页”的评论。 Vityana。保持积极,没有必要。 –

0

下更多的是什么,我寻找,但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("[email protected]").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 
-1

您可以“继续说明”。

您有:

Set objFolder = objnSpace.Folders("[email protected]").Folders("Inbox") 

为了获得 - 用于例 - 收件箱下的子文件夹临时的内容,规定:

Set objFolder = objnSpace.Folders("[email protected]").Folders("Inbox").Folders("Temp") 

希望这有助于