阻止具有特定类别的日历条目

问题描述 投票:0回答:1

我有一个会议/约会项目,并通过设定的类别提供此表格。
我想决定将其中哪些输入到我的日历中。

我有工作代码来查找我的特定类别。

' Outputs all elements without set category
Sub SearchCategoryRestriction()
 Dim myFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim Filter As String
 Dim myNamespace As Namespace
 
 'This will return all items that have the set category.
 Filter = "[Categories] = 'myKeyword'"
 Set myNamespace = GetNamespace("MAPI")
 Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
 Set myItems = myFolder.Items.Restrict(Filter)
 Debug.Print myItems.Count

End Sub

当我找到该项目后,我想查看约会以决定是否要将其添加到我的日历中。

也许我找到了解决方案https://support.office.com/en-us/article/Show-a-declined-meeting-on-my-calendar-24E81B9B-3906-4C02-8B63-F97B02161763
如果我删除我设定类别的所有收入项目,我希望它们不会添加到我的日历中。
然后我运行搜索脚本以在要删除的对象列表中找到它并将其显示给用户。

vba outlook
1个回答
0
投票

首先,我建议使用

Instr
函数而不是比较字符串。类别字符串可能包含其他标记,而不仅仅是您的单个标记。

尚不清楚使用什么代码来搜索具有特定类别设置的项目,很可能您只是迭代文件夹中的所有项目,这是不好的。相反,您需要使用

Find
/
FindNext
Restrict
Items
方法来仅获取符合您条件的项目。例如:

Sub MoveItems()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myFolder As Outlook.Folder  
    Dim myItems As Outlook.Items  
    Dim myRestrictItems As Outlook.Items  
    Dim myItem As Outlook.MailItem  

    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myFolder = _  
        myNamespace.GetDefaultFolder(olFolderInbox)  
    Set myItems = myFolder.Items  
    Set myRestrictItems = myItems.Restrict("[Categories] = 'testword'")  
    ' do whatever you need with items found, for example, move to a subfolder
    For i =  myRestrictItems.Count To 1 Step -1  
        myRestrictItems(i).Move myFolder.Folders("Business")  
    Next  
End Sub

Categories
字段是关键字类型,旨在保存多个值。以编程方式访问它时,
Categories
字段的行为类似于
Text
字段,并且字符串必须完全匹配。文本字符串中的值由逗号和空格分隔。这通常意味着如果关键字字段包含多个值,则无法在关键字字段上使用
Find
Restrict
方法。例如,如果您在“商务”类别中拥有一名联系人,在“商务和社交”类别中拥有一名联系人,则您无法轻松使用
Find
Restrict
方法来检索“商务”类别中的所有项目。相反,您可以循环遍历文件夹中的所有联系人,并使用
Instr
函数来测试字符串“Business”是否包含在整个关键字字段中。

一个可能的例外是,如果您将

Categories
字段限制为两个或较少的值。然后,您可以使用
Find
Restrict
方法以及 OR 逻辑运算符来检索所有项目。例如(伪代码):“商业”或“商业,个人”或“个人,商业”。

注意

Category
字符串不区分大小写。

在以下文章中了解有关这些方法的更多信息:

此外,您可能会发现AdvancedSearch方法很有帮助。在 Outlook 中使用

AdvancedSearch
方法的主要好处是:

  • 搜索是在另一个线程中执行的。您不需要手动运行另一个线程,因为
    AdvancedSearch
    方法会在后台自动运行它。
  • 可以在任何位置(即超出特定文件夹的范围)搜索任何项目类型:邮件、约会、日历、笔记等。
    Restrict
    Find
    /
    FindNext
    方法可应用于特定的
    Items
    集合(请参阅 Outlook 中
    Folder
    类的 Items 属性)。
  • 完全支持 DASL 查询(自定义属性也可用于搜索)。您可以在 MSDN 中的Filtering 文章中阅读有关此内容的更多信息。为了提高搜索性能,如果商店启用了即时搜索,则可以使用即时搜索关键字(请参阅
    IsInstantSearchEnabled
    类的
    Store
    属性)。
  • 您可以使用
    Stop
    类的
    Search
    方法随时停止搜索过程。
© www.soinside.com 2019 - 2024. All rights reserved.