SyncObjects.Item 方法 (Outlook),解释

SyncObjects.Item 方法 (Outlook),解释

此链接: https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/syncobjects-item-method-outlook 没有解释。例如,SyncObjects.Item(1) 是什么意思?我可以举一个实际的例子吗?SyncObjects.Item(1) 对应于我的文件夹(电子邮件地址)中的第一个文件夹还是 Outlook 中绝对路径中的第一个文件夹?

答案1

你正在发现集合类。一个这样的类是VBA.Collection类;在 Excel 中,您可能遇到过Workbooks集合 类,或Worksheets集合,或UserForms,或ControlsSyncObjects只是另一个这样的集合。

所有集合类都有一些共同点。它们是类,这意味着它们代表对象 - 但它们也包含项目. 一些集合只包含一种类型的对象(例如,Worksheets只包含Worksheet对象),其他集合则包含任何物体的类型。

按照惯例,所有集合都是以 1 为基础的,因此集合中的第一个项目将位于索引 1 处。

所有收藏品均可枚举- 即使用For Each...Next循环进行迭代。它们可以这样做,因为它们都公开了一个[_NewEnum]具有特殊隐藏属性的隐藏成员。

For Each foo In myCollection
    Debug.Print foo.Bar
Next

所有收藏品也可以索引- 也就是说,它们的各个项目可以通过索引或某种类型的键/名称来访问。这允许使用循环迭代集合For...Next- 这就是Item属性发挥作用的地方:

For i = 1 To myCollection.Count
    Debug.Print myCollection.Item(i).Bar
Next

按照惯例,该Item属性也是集合类'默认成员(某些集合类可以有不同的默认成员,例如ADODB.Recordset.Fields) - 它有一个特殊的隐藏属性,可以隐含地调用该成员,因此您可以省略它:

For i = 1 To myCollection.Count
    Debug.Print myCollection(i).Bar
Next

Item...其结果和明确说明的完全相同。

笔记收藏使用循环进行迭代For Each...Next。通过索引访问集合项总是比利用隐藏[_NewEnum]成员慢。并且差异非常显著

对于集合类,隐式调用此默认成员很方便 - 但其他(非集合)类也可以有默认成员,并且隐式调用它们是错误的常见来源,因为代码不是按照说明去做和/或说它做什么


我对项目(1)、项目(2)、项目(3)等的解释是什么?

意思.Item(1)是“给我集合中的第一个项目”。在 的情况下SyncObjects,每个项目都是一个SyncObject对象,因此您可以使用关键字检索该项目Set

Set firstItem = syncList.Item(1)

SyncObjects.Item(1) 对应的是“我的文件夹”(电子邮件地址)中的第一个文件夹还是 Outlook 中绝对文件夹中的第一个文件夹?

这应该无关紧要:集合的整个目的是封装一组对象并允许迭代它们。实现无法保证哪个特定对象是第一个、第二个、第三个或最后一个:您可以使用各个项目的属性(例如Name)来找出SyncObject您正在查看的特定对象,而不是它在集合中的索引。

Dim current As SyncObject
For Each current In Application.GetNameSpace("MAPI").SyncObjects
    Debug.Print current.Name
Next

答案2

我找到了一个回复,我测试了

dim 尝试作为字符串

try = Outlook.GetNamespace("MAPI").SyncObjects.Item(1) 在调试模式下
尝试相等:“Tutti gli account”

尝试 = Outlook.GetNamespace("MAPI").SyncObjects.Item(2)

等于:“Cartelle applicazioni”

在此处输入图片描述

相关内容