2014-01-30 79 views
0

我正在构建一个代码,用于在Outlook文件夹中执行搜索,并将这些项目的主体放在一起(仅为一个项目构建历史记录)。Outlook VBA按日期排序

我正在使用Find方法执行搜索(不确定是否全部正确)。一旦我得到搜索结果,我会把它们放入一个数组中。

有没有办法按日期排序数组?调用find前

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对象,但不知道以前的实例。您最终会对Items对象的差异实例调用FindNext。您需要将Items集合缓存到单独的变量中,就像原始的海报一样。 –

+0

@DmitryStreblechenko - 谢谢 - 将编辑我的回复 –

0

呼叫olItms.Sort("[ReceivedTime]"):我不断收到一个错误与下面的代码。您还需要在循环中调用FindNext,直到它返回null。

+0

我认为你的意思是:olItms.Sort(“[ReceivedTime]”)... ReceivedDate不是Outlook 2013中的一个属性。(但也许是以前的版本) – lukehawk

+0

是的,你是对的,它是ReceivedTime。我更新了他的回答。 –