Filter Outlook 2010 tasks using VBA

时间:2017-08-04 12:22:33

标签: vba outlook outlook-vba outlook-2010

I need to create custom filters in Outlook to save me from having to manually adjust the filter setting each time, preferably with VBA.

Below is my attempt. I inserted the message box line to check the correct items are being restricted. On running the macro I get a number of message boxes displayed with "1" indicating to me that it is working as expected (message box appears for each 'In Progress' item).

For Each Task_List In CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(13).Items.Restrict("[Status]='In Progress'")
        MsgBox Task_List.Status
        sFilter = "[Status]=Task_List.Status"
Next

However, the tasks in the task folder are not filtered, all the tasks are displayed regardless of criteria.

What am I missing from my code? Or am I completely barking up the wrong tree.

Thanks, and apologies in advance for the simplistic question.

3 个答案:

答案 0 :(得分:0)

手动设置不同的视图后,您可以通过这种方式访问​​它们。

视图以例如#34; In Progress"

命名
Sub TaskView_InProgress()
    ' No error if the view does not exist
    ' No error if not currently in Tasks folder
    ActiveExplorer.CurrentView = "In Progress"
End Sub

答案 1 :(得分:0)

这演示了如何访问In Progress任务。如果你有很多任务,虽然比视图更有帮助。

Private Sub task_Filter()

' Folders may contain any type of item
Dim myItem As Object

Dim myItems As items
Dim resItems As items

Dim myTaskFolder As Folder

Dim sFilter As String
Dim msgPrompt As String

Set myTaskFolder = Session.GetDefaultFolder(olFolderTasks)

Set myItems = myTaskFolder.items

sFilter = "[Status]='In Progress'"
Set resItems = myItems.Restrict(sFilter)

For Each myItem In resItems
    If myItem.Class = OlTask Then
        myItem.Display
    End If
Next

End Sub

答案 2 :(得分:0)

此子对我来说非常有用。我还想从Excel在任务窗口的搜索字段中输入一个字符串。因此我将字符串加载到剪贴板,并使用发送键将其粘贴到“ Ctrl E”(输入搜索字段),然后粘贴“ Ctrl V”。此例程将关闭num lock。因此,我为此添加了一个切换器。

Sub btn_GotoTask()

    Set cl = New clsClient
    ' Folders may contain any type of item
    Dim myItem As Object

    Dim myItems As items
    Dim resItems As items

    Dim myTaskFolder As Folder

    Dim sFilter As String
    Dim msgPrompt As String

    On Error GoTo outlookError
    Set myTaskFolder = Session.GetDefaultFolder(olFolderTasks)
    myTaskFolder.Display

    SetClipboard cl.Pol

    'Activate task window
    myTaskFolder.Application.ActiveWindow

    SendKeys "^{e}"
    SendKeys "^{v}"

    SendKeys "{NUMLOCK}"
Exit Sub
outlookError:

MsgBox "Outlook may not be open"

End Sub