Excel combobox listfillrange propriété pointant sur une formule à base de plage nommée a des problèmes

ActiveX zone de liste déroulante des objets dans Excel ne se comportent pas bien quand leur ListFillRange fait référence à une formule à base de Plage Nommée (Nom Défini).

Je pense que j'ai rencontré d'autres erreurs et même, éventuellement, Excel se bloque grâce à cela, mais pour l'instant, tout ce qui arrive est la combobox_change() événement est déclenché à tout moment n'IMPORTE quelle cellule du classeur est changé.

Je ne suis pas sûr si c'est vraiment un bug, ou si il y a une solution, ou une solution de contournement. Si c'est un bug, comment dois-je le signaler à l'Excel de personnes?

Et enfin, de la vraie chair de ma question est "Comment puis-je contourner ce problème le mieux?" J'aimerais avoir une formule basée sur des plages nommées, mais il semble comme ce ne sera pas possible.

Pour reproduire ce problème, procédez de la manière suivante:

  1. Créer un nouveau classeur. Sur Feuil3 créer un petit tableau de 3 colonnes à travers, et de plusieurs rangées de haut.
  2. Créer une plage nommée avec cette formule (ou un équivalent): =DECALER(Feuil3!$A$2:$C$36,0,0,COUNTA(Feuil3!$A:$A),NBVAL(Feuil3!$4:$4)) Pour ce faire, utilisez l'Entrée>Nom>Définir. Nom de la plage de quelque chose comme "demoRange"
  3. Aller à la feuille "Sheet1" et de créer une zone de liste déroulante, (il doit être sur une feuille séparée). (Utiliser le Contrôle de la boîte à outils menu, pas le menu Formulaires).
  4. Cliquez sur le bouton Mode création (le triangle bleu avec un crayon), puis à droite, cliquez sur la liste déroulante, puis cliquez sur Propriétés.
  5. Dans la fenêtre de propriétés de la zone de liste déroulante changer le ListFillRange de la propriété de sorte qu'elle pointe vers la plage nommée que vous avez créé à l'étape 2 ("demoRange").
  6. Vous pouvez modifier la propriété ColumnCount à 3, et le largeurcolonne (columnwidths) à la propriété "50,50,50"
  7. Définissez la propriété linkedCell à la cellule "A1" en tapant A1 dans la propriété linkedCell.
  8. Fermer la fenêtre propriétés, et double-cliquez sur la zone de liste déroulante pour définir son évolution() de l'événement.
  9. Mettre un Débogage.Assert(false) ou Msgbox("demo") dans le sous-programme pour la nouvelle zone de liste déroulante de l'événement de changement.
  10. Quitter le mode création
  11. important - Maintenant, sélectionnez un élément dans la zone de liste déroulante. L'événement devrait déclencher normalement la première fois. (Le bug n'affichera pas si vous ne le faites pas cette étape, quelque chose doit être sélectionné dans la liste déroulante)
  12. Modifier des cellules de n'importe où dans le classeur [Edit] ou de toute autre classeur ouvert [/edit], sur une feuille et de n'importe quel endroit. Chaque fois que vous modifiez n'importe quelle cellule, (au moins pour moi), l'événement onchange de la zone de liste déroulante exécuter.

Encore une fois, est-ce normal, et quelle est la meilleure solution pour ce que je suis en train de faire? Cette zone de liste déroulante obtient liés à différentes cellules, et est censé être un remplacement pour le petit de police dans la validation des données des listes déroulantes excel fournit par défaut.

Mise à jour: l'événement sera déclenché sur n'importe quel changement sur un classeur qui est ouvert dans l'application. Pas n'importe quelle feuille de calcul dans le fichier de démonstration.

OriginalL'auteur Kimball Robinson | 2009-08-11