VBA (Excel) ActiveX ListBox Événement de Changement de comportement récursif

Je ne suis pas un programmeur VBA donc je m'excuse à l'avance si certains de mes terminologie dans cette question est incorrecte. Un de mes collègues a voulu effacer la sélection d'une zone de liste dès qu'il a été sélectionné. Après quelques recherches sur google, nous avons trouvé une façon de le faire est par le Changement de l'événement. D'abord, nous avons essayé:

Private Sub ListBox1_Change()
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.Selected(i) = False
    Next i
End Sub

Toutefois, il semble que la définition de la Sélectionné valeur False à la propriété déclenche une Changement de l'événement sur la zone de liste et de ce fait devient une boucle infinie et les causes Excel (2007) à l'écrasement. Étant donné que nous savions qu'il y avait deux entrées, nous avons également essayé:

Private Sub ListBox1_Change()
    ListBox1.Selected(0) = False
    ListBox1.Selected(1) = False
End Sub

Et qui fonctionne! Bien que nous nous attendons à ce le même comportement pour le réglage de la Sélectionné propriété de provoquer le Changement de l'événement pour déclencher de nouveau et d'obtenir une boucle infinie.

Cependant, il semble qu'une fois par exemple ListBox1.Sélectionnée(0) = False le Changement de l'événement est déclenché, mais dans cette itération, il ne veut pas prolonger sur cette ligne, je suppose, car il sait que ce Sélectionné propriété a déjà été défini pour Faux pour cet article, de sorte que rien ne change.

Mais si c'est le cas, alors nous aimerions également s'attendre à ce que le comportement dans la première solution .. donc il semble y avoir une certaine différence en disant ListBox1.Sélectionné(i) = False rapport à la spécification de l'élément réel de l'indice directement (plutôt que par le biais de la variable je).

Personne ne sait la raison de ce comportement? Espérons que la question fait sens, j'ai essayé de l'expliquer du mieux que je peux.

Merci
Amit

Pour arrêter de re-déclenchement des événements de lire ceci.
Merci Cool Bleu - en fait, nous n'avons résoudre le problème de bouclage à l'aide de quelque chose de semblable à ce qui est discuté dans le lien que vous avez posté .. mais ma question ci-dessus (probablement pas très clair!) est d'essayer de comprendre pourquoi le comportement diffère dans les deux cas (le premier donne une boucle infinie, le deuxième ne fonctionne pas)
Sont là, littéralement, à seulement 2 articles de disponible pour la sélectionner dans la liste? Ou voulez-vous dire que seulement 2 articles ont été sélectionnés?
Pour les fins de l'exemple, il y avait deux éléments dans la zone de liste, mais pour le cas d'utilisation il y a 5
Je ne peux pas reproduire une différence entre les deux versions (Excel 2007). Le Changement Événement est déclenché uniquement pour l'Élément qui est sélectionné [Sélectionnés(Item_Index) est égal à True], mais quand le Changement de gestionnaire d'Événement est Entré de nouveau, alors ce poste est de [Sélectionnés(Item_Index) est égal à False], qui est de corriger et de Modifier l'Événement n'est pas Entré de nouveau. De sorte qu'il fonctionne comme prévu, et est pour les deux versions de la même.

OriginalL'auteur user555265 | 2014-11-25