SyncObjects.Item Method (Outlook), explain [closed]

-1

Este link: link é desprovido de explicações. Qual é o significado de SyncObjects.Item (1), por exemplo? Posso ter um exemplo prático? SyncObjects.Item (1) corresponde na primeira pasta na minha pasta (endereço de e-mail) ou na primeira pasta em absoluto no outlook?

    
por Riccardo La Marca 23.02.2018 / 20:31

2 respostas

2

Você está descobrindo classes de coleções . Uma dessas classes é a classe VBA.Collection ; no Excel, você provavelmente encontrou a classe de coleção Workbooks ou a coleção Worksheets ou UserForms ou Controls ; SyncObjects é apenas outra coleção desse tipo.

Todas as classes de coleções têm algo em comum. Eles são classes, o que significa que eles representam objetos - mas eles também contêm itens . Algumas coleções contêm apenas um tipo de objeto (por exemplo, Worksheets contém apenas Worksheet objects), outras contêm qualquer tipo de objeto.

Por convenção, todas as coleções são baseadas em 1, então o primeiro item da coleção estará no índice 1.

Todas as coleções podem ser enumeradas - isto é, iteradas usando um loop For Each...Next . Eles podem fazer isso porque todos eles expõem um membro [_NewEnum] oculto que possui atributos ocultos especiais.

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

Todas as coleções também podem ser indexadas - isto é, seus itens individuais podem ser acessados por índice ou por algum tipo de chave / nome. Isso permite iterar uma coleção usando um For...Next loop - e é aí que a propriedade Item entra em ação:

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

A propriedade Item , por convenção, também é a classe de coleção ' membro padrão (algumas classes de coleção podem ter diferentes membros padrão, por exemplo ADODB.Recordset.Fields ) - tem um atributo oculto especial torna possível implicitamente chamar esse membro, então você pode omiti-lo:

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

... e o resultado é exatamente o mesmo que se Item fosse explicitamente explicitado.

Note collections want to be iterated with a For Each...Next loop. Accessing collection items by index is always going to be slower than leveraging the hidden [_NewEnum] member. And the difference is remarkable.

Para classes de coleção, invocar implicitamente este membro padrão é conveniente - no entanto outras classes (não-coleção) também podem ter membros padrão, e implicitamente invocá-los é uma fonte comum de erros, porque o código não está fazendo o que diz , e / ou dizendo o que faz .

What am I saying with Item(1), Item(2), Item(3), etc.?

O que .Item(1) está dizendo é "me dê o primeiro item da coleção". No caso de SyncObjects , cada item é um objeto SyncObject , para que você recupere esse item com a palavra-chave Set :

Set firstItem = syncList.Item(1)

SyncObjects.Item(1) corresponds at the first folder in the my folder (email address) or the first folder in absolute on outlook?

Isso deve ser irrelevante: o ponto inteiro de uma coleção é encapsular um grupo de objetos e permitir que eles sejam iterados. Qual objeto específico é o primeiro, o segundo, o terceiro ou o último, não é garantido pela implementação: você usaria as propriedades dos itens individuais (por exemplo, Name ) para descobrir o que você está vendo, SyncObject específico, não seu índice em uma coleção.

Dim current As SyncObject
For Each current In Application.GetNameSpace("MAPI").SyncObjects
    Debug.Print current.Name
Next
    
por 23.02.2018 / 21:16
0

Eu encontrei uma resposta, eu testei com

dim tente como string

try = Outlook.GetNamespace ("MAPI"). SyncObjects.Item (1) no modo de depuração try is equal em: "Tutti gli account"

try = Outlook.GetNamespace ("MAPI"). SyncObjects.Item (2)

é igual em: "Cartile applicazioni"

    
por 23.02.2018 / 21:20