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_startswithci_短语匹配运算符

    3.我的意思是对最小单元有一个特定的功能:针对单个条件测试一个项目。然后遍历所有目标项和所有条件

    请看MSDN中的部分,该部分描述了在Outlook中各种对象支持的筛选器中指定属性的一般规则

    View类的方法仅应用于Outlook视图。Items属性将返回项目的完整列表


    如果您指定最终目标,而不是解决我们不清楚的问题的可能方法,那会更好

    我知道我可以使用常规的
    集合
    。但我想
    Find
    Restrict
    对它不起作用。这就是我特别寻找
    项目
    集合的原因。感谢您的详细回答。在发布反馈之前,我必须阅读并测试一下。至于最终目标,请参见OP中背景的开头:我的意思是找到哪些项目的发件人与给定字符串匹配。我想探索一些选项,这样以后就可以很容易地扩展功能(不同的条件/操作)。
    规则似乎有两个缺点:1)它们似乎只作用于整个
    文件夹,2)在执行
    操作之前,似乎不可能检查哪些
    项满足某个条件(除非有人手动执行此操作,因此没有利用筛选器本身)。我猜您对我的特定问题的回答是“您不能这样做”。实际上,这两个必需的和枚举的操作都不可能。这是否正确?“您需要迭代所有选定的项”:但是在这种情况下,我能使用
    查找
    吗?你能显示具体的代码吗(我无法理解)?“…使用ci_startswith…”:我找到了这个选项。但我也发现了。这是矛盾的吗?