Ограничить элементы Outlook сегодняшней датой - VBA - PullRequest
0 голосов
/ 20 декабря 2018

Я написал некоторый код, который сканирует мой почтовый ящик Outlook по умолчанию для писем, полученных сегодня с определенной темой.

Затем я загружаю вложение для элементов Outlook, которые соответствуют моим критериям.У меня возникают проблемы с назначением метода Restrict для возврата элементов, полученных сегодня.

Вот что у меня есть:

Sub DownloadAttachmentFirstUnreadEmail()

Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object, oOlAtch As Object
Dim sFilter As String
Dim NewFileName As String

NewFileName = "C:\Temp\" & "CHG_Daily_Extract_" & Format(Date, "MM-DD-YYYY") & ".csv"

'~~> Get Outlook instance
Set oOlAp = GetObject(, "Outlook.application")
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

'Declare email item restriction
sFilter = "[ReceivedTime] = '" & Format(Date, "DDDDD HH:NN") & "'"

'Catch
If oOlInb.Items.Restrict(sFilter).Count > 0 Then


'~~> Loop thru today's emails
For Each oOlItm In oOlInb.Items.Restrict(sFilter)

    '~> Check if the email subject matches
    If oOlItm = "ASG CDAS Daily CHG Report" Then

     '~~> Download the attachment
     For Each oOlAtch In oOlItm.Attachments
              oOlAtch.SaveAsFile NewFileName
            Exit For
        Next
        End If

    Exit For
Next

'Display if no emails today
Else: MsgBox "No items"

End If
End Sub

Когда я запускаю код, я последовательно получаю свое сообщение catch "Нет товаров".

Пожалуйста, дайте мне знать, если я использую метод Restrict неправильно.Большое спасибо за помощь.

1 Ответ

0 голосов
/ 21 декабря 2018

Как насчет следующего:

Filter = "@SQL=" & "%today(" & Chr(34) & ("urn:schemas:httpmail:datereceived") & _
                               Chr(34) & ")%

Или с приложением

Filter = "@SQL=" & "%today(" & Chr(34) & ("urn:schemas:httpmail:datereceived") & _
                               Chr(34) & ")% AND " & _
                               Chr(34) & "urn:schemas:httpmail:hasattachment" & _
                               Chr(34) & "=1"

Пример

Option Explicit
Private Sub Examples()
    Dim olNs As Outlook.NameSpace
    Dim Inbox As Outlook.MAPIFolder
    Dim Items As Outlook.Items
    Dim Msg As String
    Dim i As Long
    Dim Filter As String

    Set olNs = Application.GetNamespace("MAPI")
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)

    Filter = "@SQL=" & "%today(" & Chr(34) & ("urn:schemas:httpmail:datereceived") & _
                                   Chr(34) & ")%"


    Set Items = Inbox.Items.Restrict(Filter)

    Msg = Items.Count & " Items in " & Inbox.Name

    If MsgBox(Msg, vbYesNo) = vbYes Then
        For i = Items.Count To 1 Step -1
            Debug.Print Items(i) 'Immediate Window
        Next
    End If
End Sub

Фильтрация элементов с использованием сравнения даты и времени MSDN

Макросы даты и времени Outlook

Перечисленные ниже макросы даты возвращают строки фильтра, которые сравнивают значение заданного свойства даты-времени с указанной датой в UTC;SchemaName - любое допустимое свойство даты и времени, на которое ссылается пространство имен.

Примечание. Макросы даты и времени в Outlook можно использовать только в запросах DASL.

Описание синтаксиса макроса

  1. сегодня %today(" SchemaName")% Ограничения для элементов со значением свойства SchemaName, равным сегодняшнему *

Больше примеров здесь

...