извлечь последнюю обновленную метку времени из элемента Outlook - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь узнать последнее полученное электронное письмо в каждой папке Outlook. по какой-то причине я могу распечатать его, но не могу присвоить переменной.

набор dat = obj.LastModificationTime генерирует исключение. как это исправить?

   Private Sub ProcessFolder(folder As MAPIFolder)

Dim folder2 As MAPIFolder
Dim obj As Object
Dim size As Double

Dim dat As Object
Set dat = Empty
If Not folder.Items Is Nothing Then
    For Each obj In folder.Items

        size = size + obj.size
        If TypeName(obj) = "MailItem" Then
       Debug.Print obj.LastModificationTime
      Set dat = obj.LastModificationTime
       End If


    Next
End If
 ' Create The Object
'Set FSO = CreateObject("Scripting.FileSystemObject")
' How To Write To A File


Debug.Print Now() & "," & folder.Name & "," & folder.Items.Count & "," & size & "," & folder.FolderPath & "," & dat
Set dat = Empty


'File.Write folder.Name & "," & folder.Items.Count & "," & size & "," & folder.FolderPath

For Each folder2 In folder.Folders
    ProcessFolder folder2
Next
'File.Close
End Sub

Sub FolderSize()

    'Needs reference to MS Outlook Object Library

   'Needs reference to MS Outlook Object Library

    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

        ProcessFolder olFolderA

    Next

End Sub

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Прежде всего, нет необходимости перебирать все элементы в папке:

If Not folder.Items Is Nothing Then
    For Each obj In folder.Items

Вместо этого вы можете использовать метод Sort класса Items, который сортирует коллекцию элементы по указанному свойству. По завершении этого метода индекс для коллекции сбрасывается на 1.

Sub SortByDueDate() 
 Dim myNameSpace As Outlook.NameSpace 
 Dim myFolder As Outlook.Folder 
 Dim myItem As Object
 Dim myItems As Outlook.Items 

 Set myNameSpace = Application.GetNamespace("MAPI") 
 Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox) 
 Set myItems = myFolder.Items 
 myItems.Sort "[LastModificationTime]", False 

 For Each myItem In myItems 
   Debug.Print myItem.Subject & "-- " & myItem.DueDate 
 Next myItem

End Sub

И вам не нужно использовать ключевое слово Set для назначения структуры даты и времени. Set используется для назначения ссылки на объект.

dat = obj.LastModificationTime
0 голосов
/ 30 мая 2020

LastModificationTime - это скалярное свойство (в данном случае DateTime), а не объект. «Set» требуется только в VB / VBA / VBS для объектов.

...