У меня есть код 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 ответ
Класс 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
Похожие вопросы
Новые вопросы
vba
Visual Basic для приложений (VBA) - это управляемый событиями объектно-ориентированный язык программирования для написания макросов, используемый для всего пакета Office, а также для других приложений. VBA не эквивалентен VB.NET или VBS; если вы работаете в Visual Studio, используйте [vb.net]. Если ваш вопрос конкретно касается программирования любого приложения MS Office, также используйте соответствующий тег: [excel], [ms-access], [ms-word], [outlook] или [ms-project].