Почтовый элемент Outlook несколько ограниченных методов - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь применить фильтр с помощью метода Restrict почтовых элементов с помощью Outlook VBA. Приведенный ниже код работает нормально, если я использую только один метод ограничения, основанный на переменной Category_Filter, но когда я пытаюсь использовать два метода ограничения,

Каким-то образом мой Flag_Filter завершается ошибкой.

Я полагаю, что я делаю какую-то ошибку в конкатенации для Flag_Filter и нужна подсказка здесь.

Sub ApplyFilters()
Dim ol As Outlook.Application
Dim ns As Outlook.NameSpace
Dim fol As Outlook.Folder
Dim i As Object
Dim mi As Outlook.MailItem

Dim OrderNumber, Category_Filter, Flag_Filter As String

Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Set fol = ns.GetDefaultFolder(olFolderInbox)


OrderNumber = "GCU5689"

Category_Filter = "[Categories] = 'Textile'"
Flag_Filter = "[FlagRequest] = " & OrderNumber


For Each i In fol.Items.Restrict(Category_Filter).Restrict(Flag_Filter)

 ' Some actions

Next i

End Sub

Ответы [ 3 ]

2 голосов
/ 17 января 2020

Вы не можете ограничить ограниченную коллекцию. Вам нужно объединить ограничения (используя «и») в один запрос и вызывать Restrict только один раз.

1 голос
/ 21 января 2020

как @Dmitry Streblechenko говорит использовать И оператор (Visual Basi c) MSDN с вашим Outlook ограничить метод

Пример

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 = "[Categories] = 'Textile' And [FlagRequest] = 'Follow up'"

    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

Дополнительные примеры здесь

для переменной, вы можете использовать функцию chr(34) для представления двойная кавычка (значение символа ASCII которой равно 34), которая используется как escape-символ или используется двойная кавычка.

Пример

Dim OrderNumber As String
OrderNumber = "GCU5689"    
Filter = "[Categories] = 'Textile' And [FlagRequest] = '" & OrderNumber & "'"
1 голос
/ 18 января 2020

Как правило, вы можете применять несколько действий по одному. Такой подход облегчает поиск неисправностей.

Option Explicit ' Consider this mandatory
' Tools | Options | Editor tab
' Require Variable Declaration

Sub ApplyFilters()

Dim ns As NameSpace
Dim fol As folder

Dim i As Object
Dim mi As MailItem

Dim resItms As Items

Dim OrderNumber  As String
Dim Category_Filter As String
Dim Flag_Filter As String

Set ns = GetNamespace("MAPI")
Set fol = ns.GetDefaultFolder(olFolderInbox)

OrderNumber = "GCU5689"

Category_Filter = "[Categories] = 'Textile'"
Flag_Filter = "[FlagRequest] = " & OrderNumber

Set resItms = fol.Items.Restrict(Category_Filter)
Debug.Print "Items after first  restrict: " & resItms.Count

Set resItms = resItms.Restrict(Flag_Filter)
Debug.Print "Items after second restrict: " & resItms.Count

For Each i In resItms

    ' Some actions

    ' If, for instance, a property is only found on mailitems
    If i.Class = olmail Then
        Set mi = i
        Debug.Print mi.Subject
    End If

Next

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...