2016-10-31 2 views
0

제목 줄을 기반으로받은 편지함의 하위 폴더를 찾는 검색이 있습니다. 나는 가장 최근의 메일을 반환하려고하고 코드를 사용하고 있습니다 :VBA Outlook - 날짜 혼란으로 정렬

Items.Sort "[ReceivedTime]", True 

을 나는 또한 괄호 사이에 CREATIONTIME 및 SentOn을 시도했습니다.

2016년 9월 23일 오전 9시 31분

2016년 10월 19일 오후 12시 57분

9/29 :하지만 검색은 다음과 같은 순서로 같은 제목으로 검색 메일을 반환/2016 오전 10시 54분

내 코드 : 희미한 FLDR으로 Outlook.MAPIFolder Outlook.Items 로 어둡게 항목 희미한 olMail

Set oOLapp = CreateObject("Outlook.application") 
Set olNs = oOLapp.GetNamespace("MAPI") 

For step = 1 To MaxCount 
    Set Fldr = olNs.GetDefaultFolder(olFolderInbox) 

    For Each Fldr in Fldr.Folders 
     Set Items = Fldr.Items 
     Items.Sort "[ReceivedTime]", True 

      For Each olMail in Items 
       If InStr(olMail.Subject, "Text" & Cstr(step)) 
        olMail.Display Then 
        Set Msg = oOLapp.CreateItem(olMailItem) 
        .Attachments.Add olMail, olEmbeddeditem 
        Set Msg = Nothing 
       End If 
      Next 
    Next 
Next 
변형으로

검색된 제목 줄과 함께 메일의 최신 인스턴스 하나만 필요합니다. 가장 빠른 메일을 반환 한 이유와 가장 최근의 메일을 반환하는 이유에 대한 아이디어가 있습니까?


은 또한 대부분의 사람들이 가장 최근의 코드를 검색 할 때 가장 성공을 것 같다 경우 아래의 코드를 시도했지만 나는 Error404는 "경계의 밖으로 배열 인덱스"고 주장 얻을.

For step = 1 To MaxCount 
    Set Fldr = olNs.GetDefaultFolder(olFolderInbox) 

    For i = Fldr.Folders.Count To 1 Step -1 
     Set Fldr = Fldr.Folders(i) 

      For a = Fldr.Items.Count To 1 Step - 1 
       Set olMail = Fldr.Items(a) 

       //Search and attachment code. See previous code 

      Next 
    Next 
Next 

결과 :

내 코드는에 보이는 폴더에 따라 순차적으로 메일을 끌어 최초의 타임 스탬프와 함께 메일이 전에 나타난 폴더로 가니 라. 다른 메일 그래서 내 코드가 최신 것 대신 가장 빠른 것을 끌어 당기는 이유입니다.

+1

전체 코드를 표시하십시오. MAPIFolder.Items를 한 번만 검색하고 모든 호출에 대해 캐시합니까? 매번 MAPIFolder.Items를 계속 호출 하시겠습니까? –

+0

@DmitryStreblechenko 내 코드에 내 코드를 포함 시켰습니다. – Joshua

+0

항목을 기록하는 코드는 무엇입니까? ReceivedTime 속성을 기록 했습니까? –

답변

0

OutlookSpy에서 스크립트를 실행해도 문제가 없었습니다 (스크립트 버튼을 클릭하고 스크립트를 붙여넣고 실행을 클릭하십시오) - 모든 메시지는 예상 된 순서대로 이전에서 최신으로 표시됩니다. 가장 오래된 것을 가장 오래된 것으로 분류 하시겠습니까?

set folder = Application.ActiveExplorer.CurrentFolder 
set items = folder.Items 
items.Sort "[ReceivedTime]", False 
For Each msg in items 
    Debug.Print msg.ReceivedTime & " " & msg.Subject 
next 
+0

예 가장 오래된 것을 가장 오래된 것부터 정렬하는 것을 의미했습니다.Sort 함수의 부울을 True로 변경합니다. 대부분의 경우, 그것은 그것이 예정되어있는 것처럼 작동하지만 그것이 그것이 내 게시물에 표시되는 방식으로하는 경우가 있습니다. 왜 그런지 파악하려고합니다. – Joshua

+0

그리고 주문이 잘못되었을 때 위의 스크립트가 똑같은 행동을 보입니까? –

+0

당신은 어떤 어둠을 사용하고 있습니까? Msg.Subject를 사용하여 검색하려고하면 "Object가이 속성이나 메서드를 지원하지 않습니다."라는 런타임 오류 '438'메시지가 나타납니다. – Joshua