0

un autre problème que je ne peux pas comprendre, encore une fois. Je récupère une propriété personnalisée précédemment ajoutée par mon code dans un MailItem. Je teste actuellement avec Outlook 2010, il est aussi simple queImpossible d'extraire la valeur de ItemProprieties outlook: L'opération a échoué

Dim mailIndex 
For mailIndex = objFolder.Items.Count To 1 Step - 1 
    Dim property1 
    Set property1 = GetMigrationProperty(objFolder.Items(mailIndex).ItemsProprieties) 
    '... code goes on 
    Next 

Après la deuxième itération de la boucle, le property1.Value est « l'opération a échoué » et il lance une exception. Pourquoi?

PS: J'ai ce problème depuis que je changé le type de boucle de Pour chaque à un pour inversé

Répondre

2

Aïe! Est-ce votre vrai code? C'est la notation de points multiples prise à son extrême.

Cache les éléments variables avant d'entrer dans la boucle et appeler Articles (index) une seule fois par itération:

set Items = objFolder.Items 
For mailIndex = Items.Count To 1 Step - 1 
    Dim property1 
    set Item = Items.Item(mailIndex) 
    Set property1 = GetMigrationProperty(item.ItemsProprieties) 
    '... code goes on 
    set item = Nothing 
Next 
+0

De plus, si vous appelez GetMigrationProperty plus d'une fois, mettre en cache la valeur de la collection et le magasin item.ItemsProprieties dans une variable locale. Réinitialisez-le à Northing à la fin de la boucle. –

+0

Je vois, cela fonctionne. Puis-je demander pourquoi il est important de libérer l'objet objet après chaque boucle? Si je comprends bien, l'objet items contient une référence à mailItem, si nous ne le libérons pas, cette référence sera simplement remplacée par une autre dans l'itération suivante. Pourquoi est-ce important et comment pourrait-il causer des problèmes? Je viens d'un environnement SharePoint/C# c'est pourquoi cela me semble bizarre. – Machinegon

+0

Si vous utilisez la notation par points multiples, l'interpréteur/compilateur crée des variables implicites pour contenir les variables intermédiaires, et vous ne pouvez pas accéder ou libérer explicitement ces variables. Ils sont libérés quand ils sortent de la portée dans le script VB ou chaque fois que le GC se sent comme dans C#/VB.Net. Ce problème est beaucoup plus profond dans les langues .Net par rapport au script VB. –

Questions connexes