VBA Outlook - 阅读当前的资源管理器搜索过滤器

时间:2015-07-27 13:16:45

标签: vba outlook outlook-vba

我想阅读Explorer.Search函数的当前过滤器 我用这段代码试了一下:

private sub read_old_filter()
    dim objExplorer as Outlook.Explorer
    dim oldFiler as String

    set objExplorer = Outlook.ActiveExplorer
    oldFilter = objExplorer.search
end sub

但是objExplorer.search是一个函数,所以它无法工作。

我想重用旧的过滤器。我有makros如何过滤像strFilter = "received:(today OR yesterday)"这样的东西。 private sub read_old_filter()位于我的用户表单中。我想连接旧过滤器和用户窗体的新过滤器。

任何人都可以帮助我吗? 感谢您的任何赞扬和回答。亲切的判决,Nico

2 个答案:

答案 0 :(得分:3)

在Outlook VBA中,这显然不是直接。虽然有一个ActiveExplorer.CurrentView.Filter以及View的XML属性,但这不会公开当前的过滤器查询/条件。

然而,在搜索时,我遇到了这个提及救赎的线程,这似乎提供了你所需要的: How to get a search folder criteria in Outlook

希望这有帮助。

答案 1 :(得分:0)

我有个好主意。我制作了Modul1全球价值观。在此值中是宏的过滤器选项。 我用Integer保存当前的过滤器编号。 Public Function读取Integer并使用Select Case将正确的过滤器传递给用户表单。

<强> Modul1

Const FILTER_1 As String = ""                               'löscht alle filter
Const FILTER_2 As String = "followupflag:(followup flag)"   'zeigt nur Tasks an
Const FILTER_3 As String = "received:(today OR yesterday)"  'zeigt nur mails von heute und gestern
Dim filterUsed As Integer

'select right filter and save the number
Sub ViewFilter_all()
    filterUsed = 1
    Call filter_aktualisieren(FILTER_1)
End Sub
Sub onlyTasks()
    filterUsed = 2
    Call filter_aktualisieren(FILTER_2)
End Sub
Sub ViewFilter_today()
    filterUsed = 3
    Call filter_aktualisieren(FILTER_3)
End Sub
'search function for the macros
Private Sub filter_aktualisieren(strFilter As String)
    Dim objExplorer As Object
    Set objExplorer = Outlook.ActiveExplorer

    objExplorer.search strFilter, Outlook.OlSearchScope.olSearchScopeCurrentFolder
    objExplorer.Display
End Sub
'function to pass the filter to the userform
Public Function getFilterUsed() As String
    Select Case filterUsed
        Case 1
            getFilterUsed = FILTER_1
        Case 2
            getFilterUsed = FILTER_2
        Case 3
            getFilterUsed = FILTER_3
        Case Else
            getFilterUsed = "none"
    End Select
End Function

Userform的一部分

Public Sub UserForm_Initialize()
    'code....
    'vorFilter is a Global String in my Userform
    vorFilter = getFilterUsed()
    'code....
End Sub

希望解决方案也帮助其他人。