如何使用 VBA 从 Outlook 状态栏中删除 DASL 过滤器文本?

Posted

技术标签:

【中文标题】如何使用 VBA 从 Outlook 状态栏中删除 DASL 过滤器文本?【英文标题】:How to remove DASL filter text from Outlook status bar with VBA? 【发布时间】:2022-01-15 22:19:58 【问题描述】:

我正在使用工作正常的 DASL 过滤器过滤 Outlook。但是当清除过滤器时,过滤的内容会被重置,但它不会在底部显示电子邮件的数量。它显示为“已应用过滤器”。所以我需要手动去清除 DASL 过滤器的值。

我们能否在不更改我所在的现有视图的情况下通过 VBA 将 DASL 过滤器清除为默认值?

对于清除过滤器,我在发布的答案中使用相同的代码。它清除数据。但它不会清除状态栏中的文本,并且一直显示“已应用过滤器”。

Public Sub FilterView()

    Dim objView As View
    Dim olApp As Outlook.Application
    Dim olMail As Outlook.MailItem

    Set olApp = New Outlook.Application
    On Error Resume Next
        Set olMail = olApp.ActiveInspector.currentItem
    On Error GoTo 0
    If olMail Is Nothing Then
        On Error Resume Next
            Set olMail = olApp.ActiveExplorer.Selection.Item(1)
        On Error GoTo 0
    End If
    If Not olMail Is Nothing Then   
            SName = olMail.Sender
    Else
        MsgBox "Active item is not an email or no email selected"
    End If
    
    Set objView = Application.ActiveExplorer.CurrentView
    QueryV = "urn:schemas:mailheader:sender = " & Chr(39) & SName & Chr(39)
  
    objView.Filter = QueryV
    objView.Save
End Sub

【问题讨论】:

您在 Outlook 中使用什么代码进行筛选?您是否将筛选器应用于 Outlook 中的文件夹视图? 【参考方案1】:

View.Standard 属性返回一个布尔值,用于指定视图是否为内置 Outlook 视图。因此,如果它不是标准的,您可以随时调用 View.Reset 方法,将内置 Microsoft Outlook 视图重置为其原始设置。

Sub ResetView() 
 Dim v as Outlook.View
 ' Save a reference to the current view object
 Set v = Application.ActiveExplorer.CurrentView
 ' Reset and then apply the current view 
 v.Reset 
 v.Apply 
End Sub

您也可以考虑通过设置View.Filter 属性在 Outlook 中自行设置 CurrentView,该属性返回或设置表示视图过滤器的字符串值。例如:

Private Sub FilterViewToLastWeek() 
 Dim objView As View 
 ' Obtain a View object reference to the current view.
 Set objView = Application.ActiveExplorer.CurrentView 
 ' Set a DASL filter string, using a DASL macro, to show
 ' only those items that were received last week. 
 objView.Filter = "%lastweek(""urn:schemas:httpmail:datereceived"")%" 
 
 ' Save and apply the view. 
 objView.Save 
 objView.Apply 
 
End Sub

【讨论】:

感谢您的更新。我只是想要一种方法来清除前景底部的过滤器文本。一旦应用过滤器并清除它,它仍然会在 Outlook 状态栏中显示“已应用过滤器”。相反,当 cleat 它应该显示电子邮件和未读电子邮件的数量。我正在使用与您在上面发送的过滤器相同的代码。 您尝试了哪些代码来清除筛选器并在 Outlook 中应用您的更改? 应用我正在使用的过滤器 很清楚如何应用过滤器,但没有重置视图的代码。

以上是关于如何使用 VBA 从 Outlook 状态栏中删除 DASL 过滤器文本?的主要内容,如果未能解决你的问题,请参考以下文章

pyqt - 如何从状态栏中的小部件中删除边框?

是否有 VBA 方法可以在 Outlook 中创建新日历(不是约会)

删除 TinyMCE4 状态栏中的路径

从 MS Access 2016 VBA 启动 Outlook 2016 触发“另一个程序正在使用 Outlook”并死掉

使用 Access VBA 从 Outlook 获取附件

如何使用excel vba,对outlook进行操作?