2014-01-30 3 views
0

Я создаю код, который выполняет поиск в папке Outlook и объединяет тело элементов всего за один элемент (чтобы построить историю для этого случая).Outlook VBA Сортировать по дате

Выполняется поиск с использованием метода поиска (не уверен, что все правильно). Как только я получу результаты поиска, я поместил их в массив.

Есть ли способ отсортировать массив по дате? Я получаю сообщение об ошибке с кодом ниже:

Dim olApp As Outlook.Application 
Dim olNs As Outlook.Namespace 
Dim olFldr As Outlook.MAPIFolder 
Dim olItms As Outlook.Items 
Dim olMail As Variant 
Dim MyArray() As String 


Set olApp = New Outlook.Application 
Set olNs = olApp.GetNamespace(”MAPI”) 
Set olFldr = olNs.GetDefaultFolder(olFolderInbox) 
Set olItms = olFldr.Items 


Set olMail = myTasks.Find("[Subject] = ""*140115LS*""") 
    If Not (olMail Is Nothing) Then 

MyArray = olMail.Display 
+0

Вы имели в виду 'olItms.Find (...)', а не 'myTasks.Find (...)'? –

+0

О, да, я изменил переменную несколько минут назад! Tks! Любые мысли о том, как я могу сортировать его по дате? – AndroidDev

ответ

1
'... 
Dim sFilter as string 
sFilter = "@SQL=""urn:schemas:mailheader:subject"" like '%140115LS%' " 

Set olFldr = olNs.GetDefaultFolder(olFolderInbox) 

Set olItms = olFldr.Items 
Set olMail = olItms.Find(sFilter) 

Do While Not olMail Is Nothing 
    'add to array... 

    Set olMail = olItms.FindNext 
Loop 
'... 
+0

Это не сработает - каждый раз, когда вы вызываете olFldr.Items, вы возвращаете новый COM-объект без знания предыдущих экземпляров. В конечном итоге вы вызываете FindNext на экземпляр разности объекта Items. Вам нужно кэшировать коллекцию Items в отдельной переменной, как это делает оригинальный плакат. –

+0

@DmitryStreblechenko - спасибо - отредактировал бы мой ответ –

0

вызов olItms.Sort("[ReceivedTime]") перед вызовом Find. Вам также необходимо вызвать FindNext в цикле, пока он не вернет значение null.

+0

Я думаю, что вы имеете в виду: olItms.Sort ("[ReceivedTime]") ... ReceivedDate не является собственностью в Outlook 2013. (Но, возможно, это было в предыдущих версиях) – lukehawk

+0

Да, вы правы, это ReceivedTime. Я обновил его ответ. –

Смежные вопросы