Как напечатать размер папки - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть код VBA, который печатает имена папок и количество элементов. Я не вижу никаких вариантов, чтобы проверить размер папки. Как я могу запросить размер папки для Outlook.MAPIFolder?

'Требуется ссылка на библиотеку объектов MS Outlook

Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.NameSpace
Dim objSourceFolder As Outlook.MAPIFolder
Dim objDestFolder As Outlook.MAPIFolder
Dim InboxMsg As Object
Dim Inbox As Outlook.Folder
Dim SystemEmails As String

 Dim filter As String
   Dim olParentFolder As Outlook.MAPIFolder
Dim olFolderA As Outlook.MAPIFolder
Dim olFolderB As Outlook.MAPIFolder

Set objOutlook = Application
Set objNamespace = objOutlook.GetNamespace("MAPI") '

Set olParentFolder = objNamespace.GetDefaultFolder(olFolderInbox)

For Each olFolderA In olParentFolder.Folders
    Debug.Print olFolderA.FolderPath, olFolderA.Items.Count, olFolderA.Folders.Count


    For Each olFolderB In olFolderA.Folders
        Debug.Print olFolderB.FolderPath, olFolderB.Items.Count
    Next
Next

End Sub

1 Ответ

0 голосов
/ 29 апреля 2020

Класс MAPIFolder или Folder из объектной модели Outlook не предоставляет никаких свойств, связанных с размером. Чтобы выполнить работу, вам нужно перебрать все элементы в папке и подсчитать размер папки, суммируя каждый размер элемента. Например:

For Each olFolderB In olFolderA.Folders
   Debug.Print olFolderB.FolderPath, olFolderB.Items.Count

   Dim count as Integer
   count = 0
   Dim folderItem as Object
   For Each folderItem In olFolderB.Items
      count = count + folderItem.Size
   Next

Next

Кроме того, вам нужно использовать рекурсию для перебора всех вложенных папок в хранилище.

Private Sub processFolder(ByVal oParent As Outlook.MAPIFolder)

        Dim oFolder As Outlook.MAPIFolder
        Dim oMail As Outlook.MailItem

        For Each oMail In oParent.Items

        'Get your data here ...

        Next

        If (oParent.Folders.Count > 0) Then
            For Each oFolder In oParent.Folders
                processFolder oFolder
            Next
        End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...