我有一个会议/约会项目,并通过设定的类别提供此表格。
我想决定将其中哪些输入到我的日历中。
我有工作代码来查找我的特定类别。
' 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。
如果我删除我设定类别的所有收入项目,我希望它们不会添加到我的日历中。
然后我运行搜索脚本以在要删除的对象列表中找到它并将其显示给用户。
首先,我建议使用
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 属性)。IsInstantSearchEnabled
类的 Store
属性)。Stop
类的 Search
方法随时停止搜索过程。