Vba 创建一个“Items”集合,其中包含对已存在的“Item”的引用
我的意思是创建一个Vba 创建一个“Items”集合,其中包含对已存在的“Item”的引用,vba,outlook,items,Vba,Outlook,Items,我的意思是创建一个Items集合,并向其中添加几个已经存在的Items。 例如,如果我有两个对MailItems的引用,我想设置一个Items集合,其中包含这两个Items 大概是 ' ... ' Code that assigns references to olMail1 and olMail2, of type Outlook.MailItem ' ... Dim MyItems As Outlook.Items ' Assign with Set / create the object
Items
集合,并向其中添加几个已经存在的Item
s。
例如,如果我有两个对MailItem
s的引用,我想设置一个Items
集合,其中包含这两个Item
s
大概是
' ...
' Code that assigns references to olMail1 and olMail2, of type Outlook.MailItem
' ...
Dim MyItems As Outlook.Items
' Assign with Set / create the object
MyItems.Add olMail1
MyItems.Add olMail2
' Code that can use MyItems(1) to get a reference to olMail1
如何做到这一点
需要澄清的是:
查找
或限制
;这允许在比整个文件夹
小得多的集合上应用这些方法
PS:我甚至无法从
Application.ActiveExplorer.Selection
(即,无需创建集合并逐个添加项)。这将是一个良好的开端
背景
我的意思是找到哪些项目
s的发件人与给定字符串匹配。可能使我的案例比“基本案例”更复杂的方面有:
我的意思是只对选定的一组项目应用过滤器。例如,仅在收件箱索引中选择的项目上
我想做部分匹配。此时,我不需要正则表达式,甚至不需要通配符*?。但至少部分匹配,如InStr
中所示
我的意思是为最小单元设置一个特定的功能
:针对单个条件测试一个项
。然后循环遍历所有目标项和所有条件
我设想了3种方法:
使用规则
使用过滤器
或限制
。这些不接受通配符(原则上?)
使用仪表
“手动”检查条件,例如
对于一种或多种方法,上述每个方面都可能具有一些复杂性
此时,我正在探索方法2。我有一个对单个项的引用
,我发现了如何使用匹配条件应用过滤器
(请参阅
,
,以及未被接受的答案)。但是要应用过滤器
,我需要一个项目
集合,其中包含我的单个项目
我对方法3有一些想法(如的公认答案中所建议的)
相关链接
您只需使用常规集合即可:
Dim myItems As Collection
Set myItems = New Collection
myItems.Add olMail1
myItems.Add olMail2
现在,如果您希望限制对象的类型,而不是myItems
所能包含的对象,那么它会变得有点复杂,但有一种方法可以做到:
我建议从MSDN中的文章开始
无法在代码中创建Items类的实例。它是关联的,属于任何文件夹。您可以创建文件夹以获取新的Items实例
您可以使用Outlook items的方法创建该对象的另一个实例。然后,可以使用该方法将项目移动到另一个项目集合(文件夹)
1.我的意思是仅对选定的项目组应用筛选器。例如,仅在收件箱索引中选择的项目上
您需要迭代所有选定的项目。Find/FindNext和Restrict方法仅属于Items类。因此,您只能将它们应用于文件夹项目
2.我想做部分匹配。此时,我不需要正则表达式,甚至不需要通配符*?。但至少在InStr中是部分匹配的
看。您可以使用ci_startswith或ci_短语匹配运算符
3.我的意思是对最小单元有一个特定的功能:针对单个条件测试一个项目。然后遍历所有目标项和所有条件
请看MSDN中的部分,该部分描述了在Outlook中各种对象支持的筛选器中指定属性的一般规则
View类的方法仅应用于Outlook视图。Items属性将返回项目的完整列表
如果您指定最终目标,而不是解决我们不清楚的问题的可能方法,那会更好 我知道我可以使用常规的集合
。但我想Find
或Restrict
对它不起作用。这就是我特别寻找项目集合的原因。感谢您的详细回答。在发布反馈之前,我必须阅读并测试一下。至于最终目标,请参见OP中背景的开头:我的意思是找到哪些项目的发件人与给定字符串匹配。我想探索一些选项,这样以后就可以很容易地扩展功能(不同的条件/操作)。规则似乎有两个缺点:1)它们似乎只作用于整个文件夹,2)在执行操作之前,似乎不可能检查哪些项满足某个条件(除非有人手动执行此操作,因此没有利用筛选器本身)。我猜您对我的特定问题的回答是“您不能这样做”。实际上,这两个必需的和枚举的操作都不可能。这是否正确?“您需要迭代所有选定的项”:但是在这种情况下,我能使用查找吗?你能显示具体的代码吗(我无法理解)?“…使用ci_startswith…”:我找到了这个选项。但我也发现了。这是矛盾的吗?