Outlook .items.restrict 使用两个过滤器 [英] Outlook .items.restrict using two filters

查看:27
本文介绍了Outlook .items.restrict 使用两个过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用一个脚本来打开电子邮件并下载其附件.现在我可以选择下载最新电子邮件中的最新附件:

I'm using a script that opens an email and downloads its attachment. Right now I can either choose to download the most recent attachment on the most recent email:

Sub CTEmailAttDownload()

Const olFolderInbox As Integer = 6
'~~> Path for the attachment
Const AttachmentPath As String = "C:TEMPTestExcel"

    Dim oOlAp As Object
    Dim oOlns As Object
    Dim oOlInb As Object
    Dim oOlItm As Object
    Dim oOlAtch As Object
    Dim oOlResults As Object

    Dim x As Long

    Dim NewFileName As String
    NewFileName = "Daily Tracker " & Format(Now, "dd-MM-yyyy")

    'You can only have a single instance of Outlook, so if it's already open
    'this will be the same as GetObject, otherwise it will open Outlook.
    Set oOlAp = CreateObject("Outlook.Application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    'No point searching the whole Inbox - just since yesterday.
    Set oOlResults = oOlInb.Items.Restrict("[ReceivedTime]>'" & Format(Date - 1, "DDDDD HH:NN") & "'")

    'If you have more than a single attachment they'll all overwrite each other.
    'x will update the filename.
    x = 1
    For Each oOlItm In oOlResults
        If oOlItm.Attachments.Count > 0 Then
            For Each oOlAtch In oOlItm.Attachments
                If GetExt(oOlAtch.FileName) = "xlsx" Then
                    oOlAtch.SaveAsFile AttachmentPath & "" & NewFileName & ".xlsx"
                End If
                x = x + 1
            Next oOlAtch
        End If
    Next oOlItm

End Sub

'----------------------------------------------------------------------
' GetExt
'
'   Returns the extension of a file.
'----------------------------------------------------------------------
Public Function GetExt(FileName As String) As String

    Dim mFSO As Object
    Set mFSO = CreateObject("Scripting.FileSystemObject")

    GetExt = mFSO.GetExtensionName(FileName)
End Function

通过使用 '[Subject] =' 我可以按主题下载它.

By using '[Subject] =' I can download it by subject.

我的问题是,如何将这两个过滤器放在一起,以便按主题和接收时间进行过滤?

My question is, how can I put those two filters together so I can filter by Subject and ReceivedTime?

我尝试将它们与 &+ 绑定在一起,但到目前为止我还没有成功了.

I tried binding them together with ,, &, + and so far I haven't been successful.

推荐答案

即使是一个限制,也很难获得语法.正如 Scott Holtzman 在评论中指出的那样,如果您分别了解每个过滤器,则可以过滤两次.

It is a struggle to get the syntax for even one restrict. As indicated in the comment by Scott Holtzman, if you know each filter separately, you can filter twice.

Option Explicit

Sub CTEmailAttDownload()

    Const olFolderInbox As Integer = 6
    '~~> Path for the attachment
    Const AttachmentPath As String = "C:TEMPTestExcel"

    Dim oOlAp As Object
    Dim oOlns As Object
    Dim oOlInb As Object

    Dim oOlItm As Object
    Dim oOlAtch As Object

    Dim oOlResults As Object
    Dim oOlSubjectResults  As Object
    Dim strFilter As String
    Dim i As Long

    Dim x As Long

    Dim NewFileName As String
    NewFileName = "Daily Tracker " & format(Now, "dd-MM-yyyy")

    'You can only have a single instance of Outlook, so if it's already open
    'this will be the same as GetObject, otherwise it will open Outlook.
    Set oOlAp = CreateObject("Outlook.Application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    'No point searching the whole Inbox - just since yesterday.
    Set oOlResults = oOlInb.Items.Restrict("[ReceivedTime]>'" & format(Date - 1, "DDDDD HH:NN") & "'")

    strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%test%'"

    Set oOlSubjectResults = oOlResults.Restrict(strFilter)

    If oOlSubjectResults.count = 0 Then
        Debug.Print "No emails found with applicable subject"

    Else
        'If you have more than a single attachment they'll all overwrite each other.
        'x will update the filename.
        x = 1

        For i = 1 To oOlSubjectResults.count
            Set oOlItm = oOlSubjectResults(i)
            If oOlItm.Attachments.count > 0 Then
                Debug.Print oOlItm.Subject
                For Each oOlAtch In oOlItm.Attachments

                    Debug.Print oOlAtch.DisplayName

                    If GetExt(oOlAtch.FileName) = "xlsx" Then
                        oOlAtch.SaveAsFile AttachmentPath & "" & NewFileName & ".xlsx"
                    End If
                    x = x + 1
                Next oOlAtch
            End If
        Next i
    End If

ExitRoutine:
    Set oOlAp = Nothing
    Set oOlns = Nothing
    Set oOlInb = Nothing

    Set oOlResults = Nothing
    Set oOlSubjectResults = Nothing

End Sub

这篇关于Outlook .items.restrict 使用两个过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆