2016-07-05 18 views
0

VBAで指定された範囲のスプレッドシートに記載されている多数の電子メールタイトルを検索する必要があります。次に、双方向ルックアップを使用してSentOn時間をExcelに貼り付ける必要があります。件名と指定された日付範囲をExcelにコピーするメールのSentOn日付を取得する

現在の日付の前に日付を入力すると、双方向のルックアップが今日のメールのSentOnの日付を貼り付けるように、私は現在の日付だけこれを行うことができます。これは私がOutlookの検索を混乱させたと思う。ここに私が使用している(切り捨てられた)コードがあります:

Dim filterStr As String 
filterStr = "urn:schemas:httpmail:subject = '" & EmailName & "' AND urn:schemas:httpmail:date >= '" & TDateUTC & "' AND urn:schemas:httpmail:date <= '" & TDateUTCEOD & "' " 

For Each OutputType In ThisWorkbook.Worksheets("Static Data").Range("F:F") 
    If OutputType.value = "Email" Then 
     ProcessName = OutputType.Offset(0, -5).value 
     EmailName = OutputType.Offset(0, 2).value 

    On Error Resume Next 
     If Not (TargetInbox.Items.AdvancedSearch(TargetInbox, filterStr, False, "criteria") Is Nothing) Then 

     SLA_Completion_Tracker_FileName.Activate 
     MatchFormula1 = WorksheetFunction.Match(CLng(CDate(TDate)), ActiveSheet.Range("1:1"), 0) 
     MatchFormula2 = WorksheetFunction.Match(ProcessName, ActiveSheet.Range("A:A"), 0) 

     EmailTime = TargetInbox.Items.Item(EmailName).SentOn 
     If Not EmailTime >= TDate And EmailTime <= TDateEOD Then EmailTime = "" 

     SLA_Completion_Tracker_FileName.Activate 
     Set IndexFormula = WorksheetFunction.Index(ActiveSheet.Range("A1:FA60"), MatchFormula2, MatchFormula1) 

     IndexFormula.value = Format(EmailTime, "ddddd ttttt") 

End If 

これは今日の日付で現在動作しています。これにより

EmailTime = TargetInbox.Items.Item(EmailName).SentOn 
If Not EmailTime >= TDate And EmailTime <= TDateEOD Then EmailTime = "" 

::私は、以前の日付を検索するように設定する場合 しかし、私はこれを置き換える

EmailTime = TargetInbox.Items.AdvancedSearch(TargetInbox, filterStr, False, "criteria").Item(EmailName).SentOn 

何も現れません。これは私がAdvancedSearch関数を適切に使用していないためだと分かります。どのように私はこの仕事のために適切に使用するのですか?

おかげ

編集:私はこのコードを使用して、同様に検索しようとしている:

EmailName = OutputType.Offset(0, 2).value 
Dim sFilter As String 
sFilter = "[Subject] = """ & EmailName & """ AND [SentOn] >= '" & Format(TDate, "ddddd h:nn AMPM") & "' AND [SentOn] <= '" & Format(TDateEOD, "ddddd h:nn AMPM") & "'" 
FoundMail = TargetInbox.Items.Find(sFilter) 
FoundTime = FoundMail.SentOn 

しかし、これはどちらかの仕事をしていません。

答えて

0

ここにOPは、私の問題を考え出しました。

最後にかなり簡単であることが判明し

:誰もが、この時につまずく場合にはここで

は、私がやってしまったものです。

0

AdvancedSearchは非同期であり、完了するまで待つ必要があります。 MAPIFolder.Items.Find/FindNextまたはItems.Restrictを使用しないのはなぜですか?

+0

私はそれを試みてきましたが、私は検索作業のどちらかを行うように見えません。私は私のOPでテストしているFindを編集しました。 –

関連する問題