2014-12-10 3 views
1

Restrict(), похоже, не принимает значение даты, если оно указано снаружи.Outlook. Метод ограничения не работает с датой

Public Sub EBS() 
    Dim oMail As MailItem 
    Dim sPath As String 
    Dim dtDate As Date 
    Dim dtRecDate As Date 
    Dim sName As String 

    Dim oNameSpace As Outlook.NameSpace 
    Dim oInboxFolder As Outlook.Folder 
    Dim oSentFolder As Outlook.Folder 
    Dim i As Long 

    Set oNameSpace = Application.GetNamespace("MAPI") 
    Set oInboxFolder = oNameSpace.GetDefaultFolder(olFolderInbox) 
    Set oSentFolder = oNameSpace.GetDefaultFolder(olFolderSentMail) 

    dtRecDate = DateAdd("d", -180, Now) 

    Set setItems = oInboxFolder.Items 
    Set RestrictedItems = setItems.Restrict("[ReceivedTime] < dtRecDate AND [MessageClass] = 'IPM.Note'") 
    For i = RestrictedItems.Count To 1 Step -1 
     Set oMail = RestrictedItems.item(i) 
     sName = oMail.Subject 
     dtDate = oMail.ReceivedTime 
     sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, vbUseSystem) & Format(dtDate, "_hhnnss", vbUseSystemDayOfWeek, vbUseSystem) & "_" & sName & ".msg" 
     sName = Left(sName, 256) 
     sPath = "C:\ARCHIVE\OUTLOOK\Inbox\" 
     Debug.Print dtRecDate 
     oMail.SaveAs sPath & sName, olMSG 
     oMail.Delete 
    Next i 
End Sub 

Ограничение работает, когда, например, '2014/06/13' используется вместо dtRecDate.

Когда используется dtRecDate, он не ограничивает товар.

Не могли бы вы помочь?

ответ

2

Я вижу следующие критерии фильтрации в коде:

"[ReceivedTime] < dtRecDate AND [MessageClass] = 'IPM.Note'" 

Вы не можете объявить объект в строке. Он не будет преобразован в строку автоматически. Вы должны сделать это в коде, например:

"[ReceivedTime] < '" + Format(Date, "yyyy/mm/dd") +"' AND [MessageClass] = 'IPM.Note'" 

Метод Restrict имеет следующий образец на странице в MSDN:

sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'" 
Смежные вопросы